2011-08-29 28 views
5

Tôi hiện đang cố gắng triển khai nhật ký cho phần quản trị của ứng dụng đường ray của tôi. Điều này sẽ cho phép quản trị viên xem những hành động mà người dùng đã thực hiện và khi nào. Ví dụ: 'Người dùng đã thêm địa chỉ mới', 'Người dùng đã cập nhật mã bưu điện của họ từ X thành Y'.Lưu nhật ký sự kiện của người dùng trong đường ray

Vì mỗi hành động có thể liên quan đến nhiều mô hình, không chỉ người dùng, tôi đã tạo một mô hình nhật ký có các trường cho tất cả các id mô hình hệ thống khác, thông báo và mã nhật ký.

class CreateLogs < ActiveRecord::Migration 
    def self.up 
    create_table :logs do |t| 
     t.integer :user_id 
     t.integer :marker_id 
     t.integer :administrator_id 
     t.integer :group_id 
     t.integer :assignment_id 
     t.integer :submission_id 
     t.integer :code 
     t.text :message 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :logs 
    end 
end 

mối quan tâm của tôi là ví dụ, người dùng có thể (giả sử) thêm một nhiệm vụ vào tài khoản của họ, nó được ghi lại như

Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '') 

(Một nơi nào đó mã 342 tương ứng với 'người dùng tạo một địa chỉ mới ', do đó không cần thông báo)

Rõ ràng trong chế độ xem nhật ký, tôi có thể lấy thông tin người dùng và địa chỉ liên quan từ id nhật ký/chi tiết nhưng nếu người dùng hoặc địa chỉ này bị xóa, tất cả thông tin đó sẽ không có sẵn và vì vậy nhìn lại các bản ghi, mục nhập sẽ là basicall y vô dụng.

Phải có cách tốt hơn hoặc một thứ gì đó đã tồn tại để giúp các sự kiện hệ thống nhật ký như thế này và đối phó với việc xóa tiềm năng.

Hoặc tôi có thể lưu trữ toàn bộ mục nhập dưới dạng tin nhắn văn bản nhưng điều đó không thực sự tồi và điền vào cơ sở dữ liệu không cần thiết?

Hãy cho tôi biết nếu bất kỳ điều nào không rõ ràng, chỉ cần tìm các hành động/sự kiện đăng nhập đã được thực hiện trước đó!

Cảm ơn,

Pete

Trả lời

3

Hãy nhìn vào những viên đá quý niêm yết trên ActiveRecord Versioning, nó có thể là những gì bạn cần.

+0

Điều này có vẻ đầy hứa hẹn, đặc biệt giống như đường viền giấy, nhưng nó chỉ có thể lưu một phiên bản/nhật ký duy nhất khi mô hình được thay đổi đúng không? Điều gì xảy ra nếu tôi muốn chỉ định từng thay đổi theo cách thủ công? Hoặc nếu có một hành động được thực hiện mà không nhất thiết phải thay đổi một mô hình nhưng làm một cái gì đó khác như gửi một email? –

+0

Có, phiên bản/kiểm toán thường được kích hoạt chỉ bằng các thay đổi bản ghi. Nếu bạn cần đăng nhập các hành động tùy chỉnh mà không nhất thiết kích hoạt thay đổi cơ sở dữ liệu, bạn sẽ cần tạo trình ghi nhật ký của riêng mình. – eugen

1

Tôi nghĩ rằng bạn nhấn vào một giải pháp tốt với việc sử dụng văn bản thô thay vì (hoặc ngoài) các ID. Nếu bạn đang lưu trữ tên người dùng và địa chỉ, nó có thể sẽ không phá vỡ bất kỳ dung lượng lưu trữ nào. Điều này là khá nhiều như thế nào một tập tin đăng nhập hiện nó; nó phun ra ai đã làm gì và khi nào nó xảy ra. Tôi không nghĩ rằng nó sẽ cản trở db của bạn ở tất cả để lưu trữ một số dữ liệu bổ sung trong văn bản. Tuy nhiên, nếu nó lớn, bạn luôn có thể giữ các bản ghi giá trị trong vài tuần qua. Có thể có một số loại công việc làm sạch bất kỳ tệp nhật ký nào cũ hơn 4 tuần. Nhưng điều đó chủ yếu phụ thuộc vào mức độ đăng nhập mà bạn đang làm: nếu bạn đang ghi lại mọi hành động mà người dùng thực hiện, thì điều này sẽ thực sự lớn. Nếu bạn chỉ quan tâm đến các sự kiện chính (người dùng đăng nhập/out, tạo/cập nhật/xóa một cái gì đó, vv ...) sau đó tôi nghĩ rằng bạn đang lưu trữ tốt văn bản và làm sạch ra mỗi một lần trong một thời gian.

Các vấn đề liên quan