Thực tiễn tốt nhất để ghi nhật ký hành động của người dùng trong sản xuất


21

Tôi đã lên kế hoạch đăng nhập rất nhiều thứ khác nhau trong môi trường sản xuất của mình, đại loại như khi người dùng:

  • Đăng nhập, Đăng xuất Tắt
  • Thay đổi tài liệu
  • Chỉnh sửa cài đặt tài khoản
  • Thay đổi mật khẩu ... vv

Đây có phải là một thực hành tốt để làm trong một môi trường sản xuất? Ngoài ra những gì là một cách tốt để đăng nhập tất cả điều này. Tôi hiện đang sử dụng khối mã sau để đăng nhập:

public void LogMessageToFile(string msg)
        {

            System.IO.StreamWriter sw = System.IO.File.AppendText(
                GetTempPath() + @"MyLogFile.txt");
            try
            {
                string logLine = System.String.Format(
                    "{0:G}: {1}.", System.DateTime.Now, msg);
                sw.WriteLine(logLine);
            }
            finally
            {
                sw.Close();
            }
        }

Điều này sẽ ổn cho sản xuất? Ứng dụng của tôi còn rất mới vì vậy tôi không mong đợi hàng triệu người dùng ngay lập tức hoặc bất cứ điều gì, tìm kiếm các thực tiễn tốt nhất để theo dõi các hành động trên trang web hoặc nếu nó thậm chí là cách thực hành tốt nhất.


1
Tôi có thể sẽ đề xuất một Databasetệp văn bản ...

@DaveZych: phụ thuộc vào mục đích đăng nhập. Nếu theo dõi / theo dõi lỗi là bất kỳ phần nào của mục đích đó, cơ sở dữ liệu sẽ bị loại. Xem lập trình
viên.stackexchange.com/questions / 92186 / Kẻ

Tôi đã thực hiện một thao tác cơ bản a User Activity Logger that hooks up various events, bạn có thể thấy nó ở đây: stackoverflow.com/questions/30326673/iêu . Thưởng thức!
Jeremy Thompson

Câu trả lời:


29

Đây không phải là một câu trả lời trực tiếp cho câu hỏi, nhiều hơn về một mở rộng về nó.

Khi bạn khởi chạy một ứng dụng mới, tôi khuyên bạn nên đăng nhập mọi thứ mà người dùng thực hiện: đăng nhập, đăng xuất, cào **, mọi thứ. Nếu đó là dựa trên web, hãy xem xét sử dụng bản đồ nhiệt để bạn biết con chuột của họ đang làm gì.

Khi tôi tham gia dự án BravoX tại Xerox vào cuối những năm 70, chúng tôi đã ghi lại các chuyển động của chuột theo pixel để tìm ra cách người dùng có thể sử dụng thứ kỳ lạ này được gọi là trình soạn thảo WYSIWYG. Chúng tôi sẽ xem phát lại các phiên của người dùng trong bữa trưa. Đó là vô cùng hướng dẫn. Chúng tôi đã phát hiện ra một mô hình sử dụng mà chúng tôi gọi là Charlie Browning, người dùng sẽ chọn một số văn bản và in nghiêng ... sau đó họ sẽ hoàn tác ... sau đó họ sẽ làm lại ... qua lại, qua lại. Hóa ra họ đã cố gắng để hiểu những thứ này ở mức độ cảm xúc. Vì vậy, chúng tôi (Greg Kusnik đã thực hiện mã, nếu bộ nhớ phục vụ) đưa vào một số tối ưu hóa cụ thể để hỗ trợ chính xác hành vi này.

Nếu không có bản ghi âm, chúng tôi sẽ không bao giờ nghĩ sẽ làm điều này.


1
Bạn có thể viết một cuốn sách tập trung vào nhận xét này một mình!
giám mục

Kiểu ghi nhật ký cụ thể này là tất cả về trải nghiệm người dùng thời gian thực, vì vậy tôi sẽ không phải là tác giả. Tôi là ông Hardcopy. Khi bạn nhấn In, tôi đã lấy bản trình bày bên trong của tài liệu, chuyển đổi nó thành ngôn ngữ mô tả trang, sau đó gửi nó qua thứ kỳ lạ có tên Ethernet đến máy in laser đầu tiên của thế giới, nằm ngay dưới sảnh. Các nhóm tôi tương tác nhiều nhất là Cục Đánh máy Thượng viện Hoa Kỳ và nhóm in của IMF, 2 trong số các trang web thử nghiệm beta tốt nhất, đòi hỏi khắt khe nhất của chúng tôi. Tôi đã học được rất nhiều về bố cục, phông chữ, vv từ những người đó. Thời gian tốt.
Peter Rowell

9

Nếu tôi là bạn và tôi đã gắn bó với việc viết vào một tệp văn bản, tôi sẽ sử dụng log4net và đăng nhập vào một tệp "UserActions.log" cụ thể. Bằng cách này, nó không làm rối quá trình đăng nhập bình thường của bạn. Bằng cách sử dụng log4net (hoặc bất kỳ khung ghi nhật ký nào khác), bạn có thể tránh phát minh lại bánh xe và tận dụng các trình nối tệp cuộn, cảnh báo / lỗi / gỡ lỗi / mã thông tin, viết tập tin hàng loạt, v.v ... Luôn luôn là một ý tưởng tốt để xây dựng đăng nhập tốt bất kỳ ứng dụng cấp sản xuất.

Trong thực tế, có lẽ tốt hơn để lưu trữ tất cả thông tin này trong cơ sở dữ liệu. Sử dụng cơ sở dữ liệu sẽ cho phép bạn sắp xếp nó, tổng hợp nó và thống kê về nó dễ dàng hơn


3
Bạn có thể ăn bánh của mình và ăn nó: có một ứng dụng cơ sở dữ liệu cho log4net: log.apache.org/log4net/release/config-examples.html . Nhưng nếu bạn lo lắng về hiệu suất, bạn cũng có thể đăng nhập vào tệp và phân tích chúng trong một dịch vụ riêng biệt, chuẩn bị dữ liệu để báo cáo nhanh hơn (có thể là cơ sở dữ liệu báo cáo).
Nỗi sợ hãi tuyệt vọng

8

Các tệp nhật ký được sử dụng 1. để lấy thông tin sửa lỗi hệ thống. 2. để nghiên cứu hoạt động của người dùng vì sự tinh quái, hoặc 3. để hiểu cách mọi người sử dụng hệ thống khi bạn không thể xem họ. Với ý nghĩ đó:

  • Nhật ký môi trường (ví dụ: vars môi trường, các cài đặt khác, v.v.) khi khởi động ứng dụng. Điều này rất hữu ích cho các vấn đề gỡ lỗi.
  • Đăng nhập người dùng và hành động (phần riêng biệt của URL) cho mỗi yêu cầu.
  • Ghi nhật ký tất cả các tham số cho từng yêu cầu EXCEPT cho mật khẩu. Tôi muốn đặt các dấu phân cách xung quanh mỗi tham số trong nhật ký, vd phone{(999)999-9999} email{aaa@aaa.com}. Mật khẩu không bao giờ được viết ở bất cứ đâu ngoại trừ cơ sở dữ liệu theo một cách, hàm băm bảo mật bằng mật mã với muối duy nhất cho mỗi người dùng và nhiều vòng băm (xem chú thích)
  • Khi đăng nhập, bạn nên đăng nhập địa chỉ IP của người dùng, ID người dùng, tên, số lần đăng nhập không thành công, có thể là trình duyệt, có thể là id phiên cookie, nhưng không bao giờ là mật khẩu.
  • Hãy nhớ không đăng nhập mật khẩu trên trang đăng nhập trang thay đổi mật khẩu, bạn cũng không nên đăng nhập câu hỏi hoặc câu trả lời bí mật nếu bạn có chức năng đó. Bất kỳ mật khẩu hoặc khóa mã hóa khác phải không được đăng nhập. Đó là một cách thực hành tốt để viết một cái gì đó như sáu ngôi sao vào nhật ký cho các tham số này để bạn có thể thấy rằng bạn đã nhớ để loại bỏ dữ liệu này.
  • Tôi muốn đăng nhập tổng thời gian cần để phục vụ mỗi yêu cầu: Done: 49ms
  • Tôi thích đăng nhập thay đổi trạng thái phiên. Những điều này nên hiếm.
  • Như những người khác nói, có những thư viện ghi nhật ký tuyệt vời để đăng nhập vào các tệp, không chắc chắn về việc đăng nhập vào cơ sở dữ liệu.
  • Lưu trữ nhật ký an toàn. Ngay cả khi không có mật khẩu, vẫn có luật pháp tiểu bang, liên bang và quốc tế về Thông tin nhận dạng cá nhân (xem Safe Harbor ) làm cho dữ liệu nhật ký được bảo mật.
  • Hãy sao lưu. Nếu bạn để chúng chảy vào bản sao lưu toàn bộ ổ đĩa mỗi đêm, hãy nhớ nhớ sao lưu chúng ở một nơi khác trước khi nâng cấp lên máy chủ mới (đừng hỏi tôi làm thế nào tôi học được điều này).

Lời khuyên khác

Lưu ý: Để đăng nhập một ai đó, hãy băm mật khẩu được cung cấp với cùng thuật toán băm và muối từ hàm băm ban đầu cho người dùng đó. Nếu hàm băm của mật khẩu được cung cấp khớp với hàm băm mật khẩu được lưu trong cơ sở dữ liệu, thì chúng đã được đăng nhập. Để làm việc này, bạn phải xác định bộ ký tự cho mật khẩu của mình, không cho phép ký tự thay thế Unicode và bất kỳ ký tự nào khác bên ngoài bộ của bạn.


2

Bạn không chỉ định liệu bạn có đang sử dụng cơ sở dữ liệu hay không nhưng nếu bạn và cơ sở dữ liệu đó là SQL Server, thì bạn có thể thêm một thứ gọi là AutoAudit và tự động ghi lại tất cả các tương tác với dữ liệu của bạn. Chỉ cần đảm bảo chỉ định những đối tượng bạn muốn kiểm toán.

Nhưng dù sao, tôi sẽ không cố gắng tự mã hóa theo dõi của mình vì nó sẽ kết thúc một cơn ác mộng bảo trì.

Ngoài ra, để ghi nhật ký, đừng tự cuộn, hãy sử dụng Nhật ký thư viện doanh nghiệp hoặc Log4Net hoặc tương tự.


2

Chỉ là một lời khuyên chung chung. Có thể không liên quan trực tiếp đến câu hỏi của bạn.

Nó phụ thuộc vào những gì bạn sẽ sử dụng nhật ký cho? Chủ yếu là các bản ghi được sử dụng trong sản xuất để phát hiện các hoạt động gây ra lỗi. Nếu bạn đang giữ chúng để theo dõi hành động của người dùng, thì đó không phải là một phần của nhật ký. Đó phải là tính năng phía máy chủ của sản phẩm. Những điều này sau đó chắc chắn cần phải đi vào cơ sở dữ liệu để nghiên cứu sau này. Nhưng các bản ghi phía máy chủ như "Lỗi xảy ra do một số văn bản trống", không phải là một phần của tính năng. Những điều này cần phải đi trong hệ thống tập tin. Họ phải có các nội dung sau với chúng: - user_id, error_number, error bản, file_name, function_name, thread_id, system_date_time và bất kỳ bối cảnh nào khác.

Bây giờ tôi chỉ nói về các bản ghi trong các tập tin.

1) Giữ chúng không đồng bộ. Hoạt động I / O tốn kém.

2) Thiết kế chúng là lớp hơn chức năng. Những thay đổi trong tương lai sẽ dễ dàng.

3) Giữ cho họ singleton, nếu có thể. Singleton là khó khăn trong đa luồng, vì vậy thiết kế đúng.

4) Cũng tốt hơn để giữ cho sự tương tác giữa logger và loggee đơn giản. Hầu hết thời gian gửi message_number so với tin nhắn văn bản thực tế và để logger nhận được thông báo từ số này. Điều này sẽ giúp nếu sau này chúng tôi muốn thực hiện thay đổi trong các định dạng nhật ký chung.

Thông thường logger và cũng là những thứ chúng ta cần đăng nhập nên là một phần của thiết kế. Tôi đã thấy các trường hợp có sự thay đổi trong thiết kế chỉ để đảm bảo rằng tất cả các thông tin liên quan được ghi lại đúng cách.


1

Hãy thử Log4Net.It cho phép bạn đăng nhập vào tệp hoặc cơ sở dữ liệu. Đây là Hướng dẫn !

Chúng tôi sử dụng Log4Net trong tất cả các dự án của chúng tôi.


0

Sử dụng một tệp nhật ký trình bày một vài vấn đề. Trước tiên, bạn có thể gặp lỗi khi nhiều quá trình cố gắng truy cập tệp. Bạn cũng có thể gặp sự cố khi cố gắng quay vòng hoặc xóa tệp trong khi hệ thống của bạn đang chạy. Cách xung quanh đó là sử dụng cơ sở dữ liệu.

Vì vậy, bước 1 là tạo bảng cơ sở dữ liệu. Tôi đề xuất các trường sau:
* userID
* hành động (ví dụ: đăng nhập, xóa foo)
* Một số văn bản mô tả (cho phép null ở đây)
* dấu thời gian

Bước 2, Tạo một thủ tục được lưu trữ với đầu vào cho userID, hành động và văn bản mô tả. Chỉ cần sử dụng thời gian hiện tại để tạo dấu thời gian.

Bước 3, Viết phương thức ghi nhật ký trong thư viện chia sẻ thuận tiện để dễ dàng đưa vào mọi nơi và bắt đầu thực hành gọi phương thức đó theo yêu cầu. Bạn có thể muốn có logic cờ mức ghi nhật ký để thay đổi nội dung được ghi.

Bước 4, Tạo thói quen bảo trì để thỉnh thoảng xóa các tin nhắn cũ khỏi bảng ghi nhật ký. Có lẽ xóa khi cũ hơn X, chạy mỗi tuần hoặc lâu hơn như là một phần của bảo trì DB thông thường (xây dựng lại chỉ mục, v.v.).

Khi bạn đã xây dựng điều này một lần, bạn sẽ có thể sử dụng mã liên quan đến các dự án khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.