log4net so với Nlog


355

Bất cứ ai cũng có kinh nghiệm cho cả hai? Làm thế nào để họ chồng lên nhau?

Chúng tôi đang lên kế hoạch sử dụng một trong số chúng để đăng nhập vào ứng dụng doanh nghiệp.

Người giới thiệu:

log4net

làm phiền

EDIT: Chúng tôi không có phụ thuộc hiện tại vào nlog hoặc log4net.


9
Đây là logger mà tôi sử dụng: System.IO.File.Append ALLText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", message));
bảo vệ zumalifif

213
Tốt cho bạn, nhưng một số người có thể cần bật / tắt đăng nhập một cách linh hoạt, sử dụng các cấp độ nhật ký khác nhau, để tự động xóa dữ liệu nhật ký cũ, v.v.
Tor Hovland

23
Cần lưu ý rằng tài liệu Log4Net là khủng khiếp.
BentOnCoding

Có một bài viết chi tiết trên blog robertmccarter.com/switching-to-nlog
Michael Freidgeim 17/07/13

2
Bạn nên thử ReflectInsight. Mạnh mẽ hơn nhiều sau đó cả insightextensions.codeplex.com
code5

Câu trả lời:


383

Gần đây tôi đã được giao nhiệm vụ "tạo nguyên mẫu một số loggin" cho một dự án sắp tới. Tôi đã không có bất kỳ kinh nghiệm khung đăng nhập. Tôi đã nghiên cứu, chạy qua các hướng dẫn, tạo các ứng dụng đồ chơi, v.v. trên Log4Net, NLog và Thư viện doanh nghiệp trong vài ngày. Trở lại 3-4 tuần sau đó và đưa chúng lại với nhau thành một bản demo gắn kết. Hy vọng rằng một số điều này là hữu ích cho bạn.

Đề nghị của tôi cho dự án của chúng tôi là:

  1. Sử dụng mặt tiền đăng nhập (ví dụ: Common.Logging , SimpleLoggingFacade ) để tránh phụ thuộc trực tiếp.
  2. Nếu chúng tôi kết thúc sử dụng Thư viện doanh nghiệp cho các cơ sở khác, thì cũng sử dụng nó để Ghi nhật ký.
  3. Nếu chúng ta kết thúc việc sử dụng một cái gì đó có sự phụ thuộc vào Log4Net, hãy sử dụng Log4Net.
  4. Nếu không có điều nào ở trên, hãy sử dụng NLog. Mà tôi thích.

Điều đó dựa trên những phát hiện này (ý kiến!):

  • Tất cả 3 khung có khả năng và có thể làm một số điều tinh vi. Chúng tôi muốn một giải pháp chất lượng, nhưng thực sự không cần hiệu suất cực cao hoặc 60 loại bồn rửa sự kiện.
  • Cả 3 đều có những khái niệm cơ bản rất giống nhau.
  • Mỗi cái có các thủ thuật hay, như định tuyến thực sự tiên tiến hoặc tên tệp nhật ký động, cắt bớt tệp, v.v.
  • Cả 3 đều được ghi chép lại theo cách riêng của họ.
  • Đối với một người mới hoàn toàn như tôi, ban đầu họ hơi lúng túng. Không có sự khác biệt quyết liệt ở đây cho những điều cơ bản. Tôi đã vượt qua nó.
  • Khi xem xét lại mọi thứ một vài tuần sau đó, NLog rõ ràng là dễ dàng nhất để tiếp tục. Tôi cần rất ít chải lên nó. Với Log4Net, tôi đã phải xem lại một vài ví dụ trực tuyến để bắt đầu. Với EntLib, tôi đã từ bỏ và thực hiện lại các hướng dẫn từ đầu - tôi hoàn toàn lạc lối.
  • Tôi không thể tìm ra cách để EntLib thực hiện một số việc như đăng nhập vào cơ sở dữ liệu. Nó có thể dễ dàng, nhưng nó vượt quá giới hạn thời gian của tôi.
  • Log4Net và NLog có một dấu chân mã nhỏ. EntLib là spam, nhưng dù sao tôi cũng sẽ sử dụng mặt tiền của nó.
  • Tôi vô tình cấu hình sai EntLib và nó nói với tôi trong thời gian chạy. Log4Net đã không. Tôi đã không có một cấu hình sai ngẫu nhiên với NLog.
  • EntLib đi kèm với trình chỉnh sửa app.config đẹp mắt mà bạn cần 100%. NLog có một lược đồ tập tin cấu hình để bạn có được "intellisense". Log4Net đi kèm với nada.

Vì vậy, rõ ràng tôi thích NLog cho đến nay. Không đủ để sử dụng nó mặc dù có sẵn một giải pháp khác.


19
+1 về việc đề xuất xây dựng Mặt tiền cho các mối quan tâm thực sự (SoC) hoặc vì vậy bạn không thể đánh giá tên miền của mình.
eduncan911

66
Mặt tiền chỉ hoạt động nếu bạn có thể làm điều đó mà không phá vỡ các giá trị chẩn đoán phụ thuộc vào ngăn xếp cuộc gọi, v.v. Tôi đã thấy rất nhiều mặt tiền phá vỡ các tính năng chẩn đoán thiết yếu này cuối cùng gây hại nhiều hơn ...
James Schek

11
Log4Net chưa hỗ trợ Cấu hình Máy khách của .NET 3.5 SP1 và .NET 4, vì nó tham chiếu System.Web. Chỉ muốn chỉ ra rằng, mặc dù nó thực sự liên quan mật thiết đến 'với sự phụ thuộc vào Log4Net, hãy sử dụng Log4Net.'
Simon D.

59
NLog được hỗ trợ tích cực ( nlog-project.org/doad ) trong khi Log4Net chưa được cập nhật kể từ phiên bản 1.2.10 được xuất bản vào ngày 19 tháng 4 năm 2006 ( problems.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta

5
Nếu bạn có một sự phụ thuộc vào thư viện bằng log4net và muốn sử dụng NLog thay vào đó (hoặc ngược lại), việc viết và định cấu hình một lớp Appender tùy chỉnh để kết nối hai lớp là khá đơn giản.
dbkk

158

Một xem xét quan trọng đã không được thảo luận nhiều là hỗ trợ và cập nhật.

Log4Net chưa được cập nhật kể từ phiên bản 1.2.10 được xuất bản ngày 19 tháng 4 năm 2006 .

Ngược lại, NLog đã được hỗ trợ tích cực từ năm 2006 sẽ sớm phát hành NLog 2.0 hỗ trợ nhiều nền tảng không tồn tại khi log4net được cập nhật lần cuối như:

  • NET Framework 2.0 SP1 trở lên, 3.5 & 4.0 (Cấu hình máy khách và mở rộng)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Hồ sơ Mono 2.x

30
Nhưng nó có cần cập nhật không? Nếu nó không bị hỏng, đừng sửa nó?
glenneroo

24
Đó bị hỏng: độ phân giải * messes lên ip địa chỉ giữa IPv4 / IPv6 cho localhost trên Vista và Win7 (vài bản vá lỗi không chính thức đang nổi lên xung quanh) * Không biên dịch trong Net 4.0 Client Profile
Tormod Hystad

6
Dường như có một phiên bản .NET 4.0 trong các tác phẩm dành cho Log4Net.
scope_creep

38
log4net đã ra mắt v1.2.11 vào tháng 10 năm 2011 . Tôi nghĩ rằng câu trả lời này đã lỗi thời.
Mariano Desanze

83
Thật ra, câu trả lời này vẫn còn giá trị với tôi. Tôi đang trong quá trình chọn một logger và câu trả lời này cho chúng ta biết rằng log4net đã được cập nhật một lần trong nửa thập kỷ qua, trong khi NLog là một dự án tích cực hơn.
Batibix

97

Gần đây đã có kinh nghiệm với cả hai khung, tôi nghĩ rằng tôi có thể chia sẻ quan điểm của mình trên từng khung.

Tôi được yêu cầu đánh giá các khung đăng nhập cho một ứng dụng web hiện có, tôi đã thu hẹp lựa chọn của mình thành NLog (v2.0) và log4net (v1.2.11) sau khi đi qua các diễn đàn trực tuyến khác nhau. Đây là những phát hiện của tôi:

  1. Thiết lập / bắt đầu với NLog rất dễ chết. Bạn xem qua hướng dẫn Bắt đầu trên trang web của họ và bạn đã hoàn thành. Bạn có một ý tưởng công bằng, làm thế nào mọi thứ có thể với nlog. Tập tin cấu hình trực quan đến mức bất cứ ai cũng có thể hiểu cấu hình. Ví dụ: nếu bạn muốn đặt đăng nhập nội bộ, bạn đặt cờ trong nút tiêu đề của tệp cấu hình Nlog, đây là nơi bạn mong đợi. Trong log4net, bạn đặt các cờ khác nhau trong phần cài đặt ứng dụng của web.config.

  2. Trong log4net, ghi nhật ký nội bộ không xuất dấu thời gian gây khó chịu. Trong Nlog, bạn có được một bản ghi đẹp với dấu thời gian. Tôi thấy nó rất hữu ích trong đánh giá của tôi.

  3. Bộ lọc trong log4net - Tốt hơn bạn nên kiểm tra câu hỏi này của tôi - bộ lọc log4net - cách viết AND bộ lọc để bỏ qua các thông điệp tường trình và nếu bạn tìm thấy câu trả lời / giải pháp cho vấn đề này, vui lòng cho tôi biết. Tôi hiểu, có một cách giải quyết cho câu hỏi này, vì bạn có thể viết bộ lọc tùy chỉnh của riêng bạn. Nhưng một cái gì đó không dễ dàng có sẵn trong log4net.

  4. Hiệu suất - Tôi đã đăng nhập khoảng 3000 thông điệp tường trình vào cơ sở dữ liệu bằng cách sử dụng một thủ tục được lưu trữ. Tôi đã sử dụng vòng lặp đơn giản (int i = 0; i <3000; i ++ ... để ghi cùng một thông điệp 3000 lần. Đối với việc ghi: log4net AdoAppender mất gần gấp đôi thời gian so với NLog.

  5. Log4net không hỗ trợ appender không đồng bộ.

Nó là đủ so sánh để tôi chọn NLog làm khung đăng nhập. :)


bản ghi log4net của nội bộ gỡ lỗi: logging.apache.org/log4net/release/sdk/...
Narayan Akhade

36

Đối với bất kỳ ai đến chủ đề này muộn, bạn có thể muốn xem lại Thư viện lớp cơ sở .Net (BCL). Nhiều người đã bỏ lỡ các thay đổi giữa .Net 1.1 và .Net 2.0 khi TraceSource lớp được giới thiệu (khoảng năm 2005).

Việc sử dụng TraceSource có thể gây khó chịu cho các khung ghi nhật ký khác, với kiểm soát chi tiết việc ghi nhật ký, cấu hình trong app.config / web.config và truy cập theo chương trình - mà không cần chi phí của khối ứng dụng doanh nghiệp.

Ngoài ra còn có một số so sánh nổi xung quanh: "log4net vs TraceSource"


1
EntLib đang mở rộng TraceSource
Michael Freidgeim

34

Đối với chúng tôi, sự khác biệt chính là ở sự hoàn hảo ...

Hãy xem Logger.IsDebugEnabledNLog so với Log4Net, từ các thử nghiệm của chúng tôi, NLog có ít chi phí hoạt động hơn và đó là những gì chúng tôi đang theo đuổi (công cụ có độ trễ thấp).

Chúc mừng, Florian


25

Đầu tiên nhìn vào phần còn lại của ngăn xếp của bạn.

Nếu bạn đang sử dụng NHibernate, nó sử dụng Log4Net trực tiếp. Các khung khác có thể có các logger cụ thể khác mà chúng cần.

Khác hơn thế: cả hai đều hoạt động tốt.

Tôi đã tự giải quyết trên Log4Net. Nó có thể là một nỗi đau để cấu hình, và nếu nó không được cấu hình chính xác, đó là một nỗi đau để tìm ra những gì đã sai. Nhưng bạn có thể làm cho nó làm hầu hết mọi thứ bạn muốn từ một logger.

Nếu bạn không gặp vấn đề thường trực với Log4Net, đây là bài viết tôi đã viết về cách bắt đầu với nó: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg: Lưu ý rằng trong NHibernate v3, phần phụ thuộc vào log4net được gỡ bỏ một cách may mắn - nó có thể cắm được để bạn có thể sử dụng NLog nếu muốn.
UpTheCux

NLog là một nỗi đau tương đương để cấu hình / tìm ra những gì sai quá. Ít nhất với log4net, bạn có thể tìm tài liệu và google cho các vấn đề.
Ông trùm

Điểm hay của việc cân nhắc phần còn lại của chồng bạn, tôi không thể nói rằng đó là một mối quan tâm mà tôi đã xem xét ra khỏi đỉnh đầu. Mặc dù có vẻ như NHibernate không còn là một ví dụ cho kịch bản này, Sitecore cung cấp một ví dụ hiện đại về điều này, vì nó sử dụng Log4Net trong nội bộ. Sitecore khá mở rộng, vì vậy bạn có thể sử dụng bất cứ thứ gì bạn thích để đăng nhập, nhưng điều đó phức tạp hơn nhiều so với chỉnh sửa web.config của trang web để thêm trình ghi nhật ký của riêng bạn
Scott Simontis


14

Tôi lặp lại ở trên và thích nLog. Entlib là không cần thiết cồng kềnh.

Re: Log4net Một điều mà LUÔN LUÔN đưa tôi với log4net là quên thêm phần sau vào global.asax để khởi tạo thành phần:

log4net.Config.XmlConfigurator.Configure();

13

Nếu bạn đến đây bạn có thể tìm thấy một ma trận toàn diện bao gồm cả lib NLog và Log4Net cũng như Enterprise Lib và các sản phẩm khác.

Ai đó có thể lập luận rằng ma trận được thực hiện theo cách gạch chân các tính năng của lib thương mại duy nhất có trong ma trận. Tôi nghĩ đó là sự thật nhưng dù sao nó cũng hữu ích để thúc đẩy sự lựa chọn của tôi so với NLog.

Trân trọng


1
Nhìn vào ma trận đó có vẻ như đã lỗi thời đáng kể đối với ít nhất là khuôn khổ của The Guy Guy, một đối thủ cạnh tranh thương mại.
Andy Dent

9

Như tôi nhận thấy, log4net khóa các tệp đầu ra của chúng trong toàn bộ ứng dụng đang chạy, vì vậy bạn không thể xóa chúng. Nếu không thì chúng tương tự nhau.

Vì vậy, tôi thích NLog.


22
Thêm <lockingModel type = "log4net.Appender.FileAppender + MinimalLock" /> để cấu hình fileappender của bạn để ngăn chặn điều này (được đề cập trên trang ví dụ log4net đây: logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

Trình cắm không biết xấu hổ cho một dự án nguồn mở mà tôi chạy, nhưng được thảo luận sôi nổi về khung đăng nhập .NET nào hoạt động nhiều hơn, tôi nghĩ rằng tôi đã đăng một liên kết bắt buộc tới Serilog .

Để sử dụng trong một ứng dụng, Serilog tương tự (và rút ra rất nhiều) log4net. Tuy nhiên, không giống như các tùy chọn ghi nhật ký .NET khác, Serilog là về việc giữ nguyên cấu trúc của các sự kiện nhật ký để phân tích ngoại tuyến. Khi bạn viết:

Log.Information("The answer is {Answer}", 42);

Hầu hết các thư viện đăng nhập ngay lập tức kết xuất tin nhắn thành một chuỗi. Serilog cũng có thể làm điều đó, nhưng nó bảo toàn thuộc { Answer: 42 }tính để sau này, bằng cách sử dụng một trong một số kho lưu trữ dữ liệu NoQuery, bạn có thể truy vấn đúng các sự kiện dựa trên giá trị củaAnswer .

Chúng tôi gần với 1.0 và hỗ trợ tất cả các nền tảng hiện đại (.NET 4.5, Windows Store và Windows Phone 8).


Nhưng câu hỏi là: Nó có hỗ trợ Mono không? ;) Nó có vẻ đầy hứa hẹn (và tôi thích logo của chủ đề và kim) nhưng không thể tìm thấy bất kỳ thông tin nào về việc nó có hỗ trợ Mono hay không.
ashokgelal

Câu hỏi hay :) ... vâng, chúng tôi có người dùng trên Mono - Tôi không chắc họ đang sử dụng bản dựng Serilog .NET 4.5 hay 4.0, nhưng nếu bạn gặp phải bất kỳ vấn đề nào, chúng tôi sẽ giúp bạn.
Nicholas Blumhardt

Hỗ trợ .NET 4.5 đã giúp tôi, tải xuống và dùng thử giải pháp của bạn ngay bây giờ
Fat Shogun

8

Tôi cũng thứ hai NLog vì nó cũng hoạt động với mã không được quản lý. Tôi cho rằng có thể sở hữu để sử dụng log4net và log4cxx cùng nhau, nhưng NLog xử lý cả mã được quản lý và không được quản lý ra khỏi hộp.

Tôi cũng đã xem Common.Logging , một mặt tiền tạo ra sự trừu tượng của api đăng nhập, nó hỗ trợ log4net, NLog và Entreprise Library. Tôi không nghĩ rằng tôi sẽ sử dụng nó, nhưng tôi thích cách họ sử dụng lambdas để cải thiện hiệu suất khi đăng nhập bị vô hiệu hóa (một tính năng được chia sẻ với NLog và có thể là những người khác).


4

Bạn cũng có thể xem xét Khối ghi nhật ký thư viện doanh nghiệp của Microsoft . Nó đi kèm với thiết kế đẹp.


3
Cho phép bạn định cấu hình trực quan thay vì tạo thủ công XML. Tùy thuộc vào khẩu vị của bạn ...
Rashack

13
Ý tưởng sử dụng các công cụ trực quan cho một điều như vậy không phải là một điều tốt.
Adam Dymitruk

4
Có thể không phải là một điều tốt, nhưng đối với cấu hình hình ảnh EntLib là cần thiết. Viết cấu hình bằng tay thực tế là không thể, nó quá phức tạp (Bạn biết đấy, nó từ Microsoft).
Pavel Hodek

1
Ngay cả khi ai đó không thích một nhà thiết kế hình ảnh, tại sao downvote! : o
nawfal

EntLib không đăng nhập đồng bộ, về cơ bản nó có thể đạt hiệu suất.
Michael Freidgeim

2

Tôi nghĩ rằng sự đồng thuận chung là nlog dễ dàng hơn một chút để cấu hình và sử dụng. Cả hai đều khá có khả năng, mặc dù.


0

Dựa trên kinh nghiệm của tôi, SmartInspect đánh bại cả NLog và log4net.

Tài liệu này rất dễ sử dụng, tài liệu rất hay và bạn có thể xem và lọc các tin nhắn đã ghi lại trước đó bằng trình xem nhật ký tương tác của chúng, đây là một lợi thế rất lớn trong thế giới thực.

Một điều tôi thích là chế độ xem dữ liệu theo tab, như các tab trình duyệt trong Chrome. Mỗi tab có thể cung cấp một chế độ xem khác nhau của nhật ký.


11
Nó là một sản phẩm trả tiền. NLog & Log4Net là miễn phí.
Zo 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.