Như đã đề cập trước đó, NLog và log4net đều khuôn khổ khai thác gỗ tốt. Như Jeff đã đề cập ở trên, System.Diagnostics cũng là một lựa chọn hợp lý (cho nhiều hơn là chỉ đăng nhập vào EventLog). Đang cố gắng thêm một số giá trị vào câu trả lời của tôi, thay vì chỉ vẹt những gì đã được nói, bạn có thể tăng cường ghi nhật ký System.Diagnostics của mình bằng cách sử dụng TraceSources và bằng cách sử dụng miễn phí Ukadc.Diagnostics library from codeplex.
Với TraceSources bạn có thể tạo "trình ghi nhật ký có tên", tương tự như cách bạn có thể thực hiện trong NLog và log4net. Các TraceSources này có thể được cấu hình để đăng nhập ở các mức nhất định (thay đổi theo TraceSource) và chúng có thể được gửi đến các đích khác nhau (TraceListeners). Tất cả TraceSources có thể đăng nhập vào cùng một người nghe hoặc một số có thể đăng nhập vào một số người nghe trong khi những người khác đăng nhập vào người nghe khác. Bất kỳ TraceSource nào cũng có thể được gửi tới nhiều TraceListeners. Đây là cách bạn sẽ sử dụng TraceSources trong mã (giả sử rằng TraceSource "abc" đã được cấu hình trong tệp app.config để ghi nhật ký "Thông tin" và các thông điệp ưu tiên cao hơn và đã được cấu hình để đăng nhập vào tệp "nhật ký." txt ").
public class MyClass
{
static TraceSource ts = new TraceSource("abc"); //Common idiom for NLog and log4net, not sure if as common for TraceSource
public void Func1(int x)
{
ts.Information("Entering Func1");
ts.Verbose("x = {0}", x); //Won't log if "abc" is configured to log Info and HIGHER messgaes
ts.Information("Exiting Func1");
}
}
Một lợi ích lớn của Ukadc.Diagnostics, hơn TraceSources "đồng bằng", là bạn có thể cấu hình định dạng đầu ra NLog/log4net phong cách để bạn có thể có quyền kiểm soát nhiều hơn nữa so với những gì các lĩnh vực hiển thị trong sản lượng khai thác gỗ của bạn và những gì định dạng.
Ba điều đó là khá hữu ích từ NLog/log4net mà không có sẵn trong System.Diagnostics là:
Khả năng tự động đăng nhập thông tin trang web gọi (phương pháp/chức năng)
đăng nhập bổ sung context (GDC - thuộc tính ghi log toàn cục, MDC - các thuộc tính ghi luồng trong NLl/log4net). System.Diagnostics không có Trace.CorrelationManager.LogicalOperationStack, tương tự như NDC.
Bộ ghi nhật ký Hierarichal.
Trình ghi nhật ký Hierarichical có nghĩa là bạn có thể định cấu hình trình ghi "tổ tiên" và bất kỳ nhật ký "hậu duệ" nào sẽ kế thừa các cài đặt đó. Ví dụ: giả sử rằng bạn có một lớp có tên loại đầy đủ (không gian tên) đủ điều kiện là Namespace1.Namespace2.Class. Với NLog/log4net bạn có thể cấu hình thông tin đăng nhập (level, destination) cho "Namespace1" và nếu bạn yêu cầu logger dựa trên tên đầy đủ của bất kỳ kiểu nào trong Namespace1, nó sẽ kế thừa các thiết lập của Namespace1. Bạn có thể đạt được một cái gì đó tương tự như thế này bằng cách sử dụng TraceSources bằng cách xem cách Castle implemented their TraceSource-based logging trừu tượng. Đặc biệt, hãy xem hàm Khởi tạo. Nó khá dễ dàng để làm việc (trong trình bao bọc mỏng của bạn xung quanh TraceSource) và, như một lợi ích phụ, làm cho cấu hình của TraceSources của bạn dễ dàng hơn một chút vì bạn không phải cấu hình từng TraceSource riêng lẻ. Lưu ý rằng bạn có thể dễ dàng thêm khả năng có cấu hình "root" bằng cách định cấu hình TraceSource được gọi là "" và thêm một số mã trong lược đồ Castle để mặc định thành cấu hình "" nếu không tìm thấy tổ tiên thực sự. Ví dụ, bạn có thể cấu hình "*" để đăng nhập, nói Verbose, và sau đó cấu hình cụ thể một số TraceSources nhất định (hoặc theo lớp hoặc theo không gian tên) để tắt hoặc ở một mức độ khác. Nếu không có logger hierarichal, để làm điều tương tự với TraceSources sẽ yêu cầu bạn phải cấu hình mỗi TraceSource duy nhất để đăng nhập vào "Verbose" mà bạn muốn tiết lộ.
Trong khi tôi nói nhiều về logger cho các lớp và không gian tên, NLog, log4net và TraceSources cũng cho phép bạn định nghĩa tên logger của bạn thành chuỗi tùy ý. Như vậy, bạn lạnh xác định một hệ thống phân cấp logger theo khu vực chức năng chứ không phải bởi không gian tên/lớp:
Database
Database.Connect
Database.Query
Database.Update
Database.SQL
Amazon
Amazon.Books
Amazon.Books.Fiction
Amazon.Books.Nonfiction
Amazon.Electronics
Amazon.Electronics.Video
Amazon.Electronics.Music
Amazon.Electronics.Computer
Vì vậy, bạn có thể bật "Amazon" khai thác gỗ và tất cả các bản ghi Amazon thứ (mà không cần phải cấu hình một cách rõ ràng và mỗi "con" TraceSource) và cơ sở dữ liệu công cụ sẽ không. Hoặc, bạn có thể biến Amazon trên và Amazon.Electronics tắt và chỉ Amazon.Books (và trẻ em) sẽ đăng nhập.
Cuối cùng, nếu bạn thực hiện với NLog hoặc log4net, điều đáng nói là NLog vừa mới phát hành một bản phát hành mới, NLog 2.0, (trong bản beta).
+1 cho điểm an toàn của luồng, mặc dù chỉ có chủ đề chính đẩy các sự kiện nhật ký. Cảm ơn câu trả lời toàn diện của bạn. –