2009-04-23 30 views
10

Câu hỏi của tôi rất đơn giản: viết gì vào nhật ký. Có bất kỳ quy ước nào không? Tôi phải làm gì?Điều gì cần ghi vào tệp nhật ký?

Vì ứng dụng của tôi phải được phát hành, tôi muốn có nhật ký thân thiện, có thể được đọc bởi hầu hết mọi người mà không hỏi nó là gì.

Tôi đã có một số ý tưởng, như dấu thời gian, số nhận dạng duy nhất cho từng chức năng/phương pháp, v.v. Tôi muốn có một số mức nhật ký, như truy tìm/gỡ lỗi, thông tin, lỗi/cảnh báo.

Bạn có sử dụng một số tài nguyên nhật ký được định dạng trước không?

Cảm ơn bạn

+2

Đối với những gì đáng giá, nhật ký thường không được người dùng đọc, vì vậy hầu hết mọi người cố gắng làm cho chúng mang tính thông tin hơn là "thân thiện" ... –

+2

@David: Cái gì? Hầu hết các nhật ký đều được đọc bởi quản trị viên - một nhóm người dùng. Không chắc bạn đang nói về điều gì. "Thân thiện" với quản trị viên thường có nghĩa là "Hoàn thành" - dấu ngày, id phiên, tên mô-đun, mức độ nghiêm trọng, thư phù hợp trên một dòng, v.v. –

+0

các phương tiện thân thiện ở đây định dạng nhật ký sẽ dễ phân tích cú pháp, đọc, và cung cấp khả năng cho bất kỳ người dùng nào (chẳng hạn như người dùng hiện tại hoặc quản trị viên) có thể có hầu hết các công cụ để có thông tin thích hợp về ứng dụng –

Trả lời

9

Dưới đây là một số gợi ý cho nội dung:

  • timestamp
  • nhắn
  • log loại tin nhắn (như lỗi, cảnh báo, dấu vết, debug)
  • id chủ đề (để bạn có thể hiểu được tệp nhật ký từ một ứng dụng đa luồng)

Thực hành tốt nhất để thực hiện:

  • Đặt một mutex xung quanh phương pháp ghi do đó bạn có thể chắc chắn rằng mỗi ghi là chủ đề an toàn và sẽ có ý nghĩa.
  • Gửi 1 thư tại một thời điểm vào tệp nhật ký và chỉ định loại thông báo tường trình mỗi lần. Sau đó, bạn có thể đặt loại ghi nhật ký bạn muốn thực hiện khi khởi động chương trình.
  • Không sử dụng bộ đệm trên tệp hoặc xả thường xuyên trong trường hợp xảy ra sự cố chương trình.

Chỉnh sửa: Tôi vừa nhận thấy câu hỏi được gắn thẻ bằng Python, vì vậy hãy xem câu trả lời của S. Lott trước tôi. Nó có thể là đủ cho nhu cầu của bạn.

+0

Tôi chấp nhận câu trả lời này, bởi vì nó đang trả lời. S.Lott rất hữu dụng. Cảm ơn bạn –

18

Khá dễ chịu và đã được triển khai.

đọc này: http://docs.python.org/library/logging.html


Sửa

"dễ dàng để phân tích, đọc," nói chung là tính năng mâu thuẫn. Tiếng Anh - dễ đọc, khó phân tích. XML - dễ phân tích cú pháp, khó đọc. Không có định dạng nào đạt được dễ đọc và dễ phân tích cú pháp. Một số định dạng nhật ký "không khủng khiếp để đọc và không thể phân tích cú pháp".

Một số người tạo nhiều trình xử lý để một nhật ký có nhiều định dạng: một bản tóm tắt để mọi người đọc và phiên bản XML để phân tích cú pháp tự động.

1

Vì bạn đã gắn thẻ python câu hỏi của mình, tôi cũng giới thiệu bạn đến this question. Đối với nội dung, đề xuất của Brian là tốt. Tuy nhiên, hãy nhớ thêm tên chương trình nếu bạn đang sử dụng nhật ký dùng chung.

Điều quan trọng về logfile là "greppability". Cố gắng cung cấp tất cả thông tin của bạn trong một dòng, với các số nhận dạng chuỗi thích hợp là duy nhất (cũng trong cơ số) cho một điều kiện cụ thể. Đối với dấu thời gian, hãy sử dụng tiêu chuẩn ISO-8601 sắp xếp tốt.

0

timestamp tức DateTime YYYY/MM/DD: HH: mm: ss: ms tài Chủ đề ID hàm Tên nhắn/Thông báo lỗi/thành công tin nhắn/Chức năng vết

Có này ở định dạng XML và bạn sau đó có thể dễ dàng viết một trình phân tích cú pháp cho nó.

<log> 
    <logEntry DebugLevel="0|1|2|3|4|5...."> 
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" /> 
    <ThreadId value="" /> 
    <FunctionName value="" /> 
    <Message type="Error|Success|Failure|Status|Trace"> 
     Your message goes here 
    </Message> 
    </logEntry> 
</log> 
+3

Một số người nghĩ rằng XML là câu trả lời cho mọi thứ (do đó, hãy làm một số cơ quan regex) nhưng tôi không đồng ý. Việc phân tích cú pháp tệp nhật ký định dạng cố định dễ dàng (có thể dễ dàng hơn) bằng các công cụ xử lý văn bản thông thường hơn là tệp XML. Và bạn không kết thúc với tất cả những "tiếng ồn" trong tập tin chiếm không gian vô dụng. – paxdiablo

+0

Một số pplz nghĩ rằng suy nghĩ của họ quyết định cái gì là chính xác và cái gì không đúng. Người ta có thể không đồng ý nhưng nó không chứng minh bất cứ điều gì. Và bằng cách nào đó một số pplz ở đây chỉ để áp đặt quyền lực của họ cho họ, tôi đề nghị rằng thời gian của họ để chúng ta học cách tôn trọng và cung cấp không gian cho người khác. Một số giải pháp thời gian có thể không quan trọng sau đó tham gia. –

+0

Tôi phải thừa nhận rằng tôi không thích XML nhiều, đó là một ý kiến ​​cá nhân, và tôi cảm ơn bạn vì đã đề xuất, nhưng tôi cảm thấy thoải mái hơn với một tệp văn bản đơn giản hơn các tệp xml lộn xộn. trường hợp nó là hữu ích, đặc biệt trong các ứng dụng web. –

1

Ý tưởng hay là xem xét phần mềm phân tích nhật ký. Trừ khi bạn có kế hoạch để viết của riêng bạn, có thể bạn sẽ muốn khai thác một gói phân tích log hiện tại như Analog. Nếu đúng như vậy, có thể bạn sẽ muốn tạo một bản ghi đầu ra tương tự với các định dạng mà nó chấp nhận. Nó sẽ cho phép bạn tạo ra các biểu đồ và đồ thị đẹp mắt với nỗ lực tối thiểu!

1

Theo tôi, cách tiếp cận tốt nhất là sử dụng các thư viện ghi nhật ký hiện có chẳng hạn như log4j (or it's variations for other languages). Nó cho phép bạn kiểm soát cách thư của bạn được định dạng và bạn có thể thay đổi nó mà không bao giờ chạm vào mã của bạn. Nó tuân theo các phương pháp hay nhất, mạnh mẽ và được hàng triệu người dùng sử dụng. Tất nhiên, bạn có thể viết cho bạn khung đăng nhập riêng, nhưng đó sẽ là điều rất kỳ quặc để làm, trừ khi bạn cần một cái gì đó rất cụ thể. Trong bất kỳ trường hợp nào, hãy truy cập tài liệu của họ và xem cách các câu lệnh đăng nhập được trình bày ở đó.

Check-out log4py - Python chuyển phiên bản của log4j, tôi nghĩ rằng có một số triển khai cho Python ngoài kia ..

0

thư viện khai thác gỗ của Python là thread-an toàn cho chủ đề quá trình duy nhất.

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