2010-09-29 38 views
40

Có một loạt các thư viện ghi nhật ký khác nhau để lựa chọn, mỗi thư viện có một bộ các đặc điểm và ưu điểm riêng. (Ví dụ .Net: log4net, System.Diagnostics.TraceSource, nLog, v.v.)Điểm của mặt tiền khai thác gỗ là gì?

Độ nghiêng tự nhiên là trừu tượng hóa các quirks đó và sử dụng mặt tiền ghi nhật ký. (ví dụ: Castle.Services.Logging, Common.Logging, Simple Logging Facade) Bằng cách đó, nếu một khung công tác ghi nhật ký mà bạn đang sử dụng bị lỗi thời, hoặc một khung công tác khác sẽ trở thành thịnh hành, bạn chỉ có thể trao đổi việc triển khai và để mã không bị ảnh hưởng.

Nhưng có nhiều mặt tiền ghi nhật ký để chọn. Cho rằng câu trả lời cho nhiều triển khai ghi nhật ký khác nhau là trừu tượng, tại sao không sử dụng mặt tiền ghi nhật ký mặt tiền? Nếu điều đó nghe có vẻ vô lý, điều gì khiến nó trở nên vô lý hơn so với mặt tiền ghi nhật ký ban đầu? Điều gì làm cho một lớp trừu tượng thêm trên đầu khung khai thác số ma thuật?

+9

http://www.joelonsoftware.com/articles/fog0000000018.html –

+0

@brian Tôi không chắc chắn giả định của bạn về khuynh hướng tự nhiên của mọi người là đúng sự thật. Nhấn mạnh hầu hết các nhà phát triển thậm chí không nghĩ về nó. – Howiecamp

Trả lời

58

Tôi sẽ nói chủ yếu từ quan điểm của việc sử dụng trừu tượng để cách ly mã ứng dụng từ một khung đăng nhập cụ thể. Có những yếu tố khác có thể ảnh hưởng đến việc lựa chọn khung đăng nhập của một người hoặc lựa chọn của một (và yêu cầu) một trừu tượng.

Tôi đã dành rất nhiều thời gian gần đây để đánh giá các khung đăng nhập khác nhau cũng như trừu tượng khai thác gỗ của bên thứ ba.

Một số người cảm thấy có giá trị trong việc cách ly mã ứng dụng của họ từ một khung đăng nhập cụ thể. Bạn sẽ tìm thấy nhiều bài viết ở đây trên SO giống như thisthisthis (và còn nhiều nữa), nơi ghi nhật ký được thảo luận và nhiều người coi nó như một vấn đề tất nhiên là khung công tác ghi nhật ký phải được bao bọc/trừu tượng.

Rõ ràng, điều này cho phép bạn không bị ràng buộc với một khuôn khổ cụ thể. Điều này có quan trọng không? Bạn có bao giờ thực sự chuyển đổi khung đăng nhập của mình không? Vâng, cũng có rất nhiều người hoặc không đề cập đến gói hoặc những người đề nghị chống lại nó. Nếu bạn xem xét một số ví dụ về mã gói khung đăng nhập đã được đăng ở đây, bạn cũng có thể thấy nhiều ví dụ về lý do tại sao ít nhất một số người không nên quấn khung đăng nhập của họ!

Nếu bạn đã bắt đầu một dự án gần đây, bạn có thể đã kiểm tra khung công tác ghi nhật ký và, có lẽ, đã thu hẹp nó xuống hai vòng chung kết: log4net và NLog. Mỗi người đều có lập luận ủng hộ. log4net rõ ràng là một yêu thích, có lẽ là yêu thích của những người đã bày tỏ ý kiến. NLog cung cấp khả năng rất giống nhau. Được đánh giá bởi sự nổi tiếng, log4net có thể là sự lựa chọn rõ ràng. Dựa trên khả năng, chúng có vẻ rất giống nhau. Dựa trên "hoạt động gần đây" (như được chỉ định bởi các kiểm tra để mã nguồn của họ repostories bởi hoạt động blog hoặc thiếu thị trưởng), NLog là sự lựa chọn rõ ràng. Nếu bạn phải chọn một năm trước, bạn có thể đi với log4net vì nó sẽ là sự lựa chọn "an toàn". Không rõ khi nào NLog phát hành. Trong năm kể từ đó, NLog đã trải qua một chu kỳ phát triển khá đáng chú ý, phát hành phiên bản beta chỉ vài ngày trước.

Chọn năm nào trước? Lựa chọn nào bây giờ? Là một lựa chọn rõ ràng hơn sau đó? Là một sự lựa chọn tốt hơn bây giờ?

Một điều trừu tượng giúp bạn là khả năng đưa ra quyết định chọn người nào (bạn thậm chí không nhất thiết phải chọn EVER, mặc dù bạn có thể muốn nếu bạn định cung cấp khung ghi nhật ký với sản phẩm). Bạn có thể kiểm tra ổ đĩa và cái kia và cảm nhận cách chúng hoạt động với ứng dụng của bạn, với nhóm của bạn, trong môi trường của bạn. Sử dụng một cái gì đó như Common.Logging hoặc SLF cho phép bạn bắt đầu viết mã ngay bây giờ, mã hóa cho một số giao diện đăng nhập/API và nhận mã đăng nhập của bạn tại chỗ. Nếu bạn tin rằng giao diện/API được cung cấp bởi sự trừu tượng là đủ cho công việc của bạn (và, tại sao nó không phải vì nó cơ bản giống như giao diện/API được cung cấp bởi log4net và NLog), thì không có nhiều nguy hiểm trong việc sử dụng sự trừu tượng. Khi bạn trải qua chu kỳ phát triển, bạn có thể thấy rằng một khung công tác hoặc một khuôn khổ khác phù hợp hơn với nhu cầu của bạn. Có mã hóa để trừu tượng, bạn được tự do để thực hiện lựa chọn đó tại bất kỳ điểm nào, cho đến khi sản phẩm của bạn ra khỏi cửa.

Bạn thậm chí có thể suy nghĩ, trong suy nghĩ của bạn, rằng bạn có thể có thể viết một thư viện đăng nhập từ đầu. Một lần nữa, nếu bạn tin rằng giao diện/API của log4net và/hoặc NLog là đủ, bạn có thể triển khai thư viện đăng nhập của bạn với một API tương tự. Nếu bạn tin rằng, đó có thể là một lý do khác để sử dụng một trừu tượng. Một lần nữa, bạn có thể bắt đầu viết mã (cho sản phẩm của bạn, không phải thư viện đăng nhập của bạn) ngày hôm nay, đăng nhập với một số khung khai thác gỗ khác cho đến khi thư viện đăng nhập "từ đầu" của bạn sẵn sàng. Có lẽ bạn thực sự muốn sử dụng System.Diagnostics.TraceSource và Ukadc.Diagnostics (để có được khả năng định dạng đầu ra tương tự như log4net hoặc NLog) để bạn có thể tích hợp "tốt hơn" với nhật ký mà Microsoft đã triển khai trong một số nền tảng của họ bằng cách sử dụng TraceSources. Nó có thể được khá dễ dàng để viết một "logger" về TraceSources và sau đó viết trừu tượng để bạn có thể cắm nó vào Common.Logging hoặc SLF. (Nếu giao diện/API là đủ, bạn chỉ có thể viết "logger" của bạn về giao diện của thư viện trừu tượng và không phải viết thêm một lớp trừu tượng).

Với các đối số thuyết phục như vậy, tại sao mọi người sẽ KHÔNG sử dụng trừu tượng? Ha ha, đùa thôi!

Nếu trừu tượng là tốt, bạn có nên viết của riêng mình hoặc sử dụng tài liệu hiện có không? Nếu bạn viết một mình, thì rõ ràng bạn phải viết nó. Làm thế nào để làm điều này? Vâng, bạn có thể chỉ cần xác định một giao diện và bọc một khuôn khổ (cẩn thận và bọc nó một cách chính xác!). Sau đó, nếu bạn quyết định muốn chuyển đổi, hãy đóng khung đó.Nếu bạn cẩn thận, bạn không phải thay đổi bất kỳ mã ứng dụng nào, ngoại trừ có thể là nơi bạn thực sự tạo các đối tượng của khung bên dưới. Có lẽ điều này là tốt. Bạn đã tránh sự phụ thuộc vào một số sự trừu tượng của bên thứ ba đối với giá "nhỏ" của việc triển khai một trình bao bọc đơn lẻ trên một khung công tác duy nhất. Tuy nhiên, có một chi phí. Cho đến khi bạn đã viết trừu tượng của bạn, bạn không thể viết rất nhiều mã ứng dụng đã đăng nhập vào nó, trừ khi bạn có một chiến lược tốt để thay đổi nó thành trừu tượng của bạn. Nó cũng trở nên khó khăn hơn để kiểm tra lái xe hai hoặc nhiều khung để quyết định cái nào hoạt động tốt hơn cho bạn. Mỗi khung mà bạn muốn "thử" yêu cầu một công việc quấn khác. Nếu bạn muốn chuyển đổi giữa các khung công tác một cách dễ dàng (ít nhất là trong chu trình phát triển), bạn phải làm việc để làm cho nó dễ dàng. Khung bên thứ ba cung cấp khung này.

Wow! Bây giờ tôi đã bán! Hãy cho tôi đăng nhập trừu tượng, hoặc cho tôi cái chết!

Ghi nhật ký khai thác tất cả nước thịt? Có nhược điểm nào không? Họ không thể tuyệt vời, phải không?

Vâng, như mọi khi, khi "mua" thứ gì đó hoặc khi nhận được thứ gì đó miễn phí, bạn sẽ có được những gì có sẵn. Logging abstractions không khác nhau. Cả Common.Logging lẫn SLF đều không trưng ra ít nhất một bộ các khả năng rất quan trọng của log4net/NLog - các khả năng ngữ cảnh ghi nhật ký (GDC, MDC, NDC). Đây có thể là chìa khóa để nhận thông tin đầy đủ được ghi lại và định dạng để cho phép bạn nhận được nhiều giá trị nhất từ ​​của bạn. SLF không cung cấp một trừu tượng TraceSource. Nó cũng không cung cấp các hàm IsXXXEnabled. Common.Logging cung cấp một trừu tượng TraceSource. Castle.Logging KHÔNG hiển thị GDC/MDC/NDC cho log4net và NLog. Nó cũng cung cấp một trừu tượng TraceSource. Sự trừu tượng hóa của TraceSource của Castle cũng tăng cường việc ghi nhật ký TraceSource bằng cách cung cấp khả năng đặt tên "phân cấp", tương tự như khả năng của log4net và NLog. Nó trông khá tuyệt!

Ngoài ra, các dự án này đều là nguồn mở của một biểu mẫu này hoặc biểu mẫu khác. Vì vậy, tùy thuộc vào sự trừu tượng, các nhà phát triển có thể có nhiều hơn hoặc ít hơn một quan tâm có lợi trong việc giữ cho nó được cập nhật và thêm các tính năng mới. Common.Logging đã trải qua một vài phiên bản và được sử dụng, AFAIK, trong Spring.Net. Dường như hoạt động hợp lý, ít nhất là trong lịch sử. Castle.Logging được sử dụng trong khuôn khổ Castle. Vì vậy, họ dường như có khách hàng "thực sự" và đang sử dụng "thế giới thực", hy vọng sẽ thúc đẩy nhiều tính năng triển khai hơn. SLF, theo như tôi có thể nói, không được sử dụng như là một phần của một nền tảng phát triển "thực sự", do đó rất khó để biết nó được thực hiện bao nhiêu.

Không rõ lộ trình dành cho các nền tảng này là gì. Common.Logging có một số tính năng sắp tới được liệt kê trên trang web của họ, nhưng không hiển thị rõ ràng khi chúng có sẵn. Trang web nói "Tháng Sáu", nhưng năm nào? Danh sách gửi thư được giám sát bao lâu một lần? Đối với SLF, tần suất của codeplex được giám sát như thế nào? Ưu tiên của các dự án "miễn phí" này so với các công việc trả lương của nhà phát triển ở đâu? Bạn có thể đủ khả năng cho một số bên thứ ba trừu tượng để thực hiện một tính năng mà bạn cần? Họ sẽ tiếp nhận được nếu bạn thực hiện một cái gì đó và sau đó gửi lại để xem xét để được bao gồm trong sản phẩm? Ngoài ra, tất cả các nguồn cho tất cả các abstractions này đều có sẵn, vì vậy bạn chỉ có thể chịu trách nhiệm cho nó và thực hiện bất kỳ sửa chữa hoặc thêm bất kỳ cải tiến mà bạn, mà không cần phải đi qua thời gian và năng lượng của tạo ra một sự trừu tượng từ đầu. Bạn có thích Common.Logging nhưng thực sự muốn log4net/NLog GDC/MDC/NDC? Nhận triển khai của Castle và thêm nó vào Common.Logging. Thì đấy! Bản tóm tắt khai thác có chứa gần 100% API đăng nhập log4net/NLog. Bạn có thích SLF nhưng muốn nó có IsXXXEnabled? Không có nhiều công việc để thực hiện điều đó. Hãy tiếp tục và sử dụng GDC/MDC/NDC trong khi bạn đang ở đó. Bạn có thích Castle? (Tôi không quen thuộc với nó, không chắc chắn nó dễ sử dụng bên ngoài lâu đài như thế nào, nếu vấn đề đó quan trọng) Hãy cẩn thận, tôi đã không sử dụng nó, nhưng nhìn vào nguồn trên git, nó trông giống như logger NLog trừu tượng có thể không giữ lại thông tin trang web cuộc gọi.

Có đạo đức khi tham gia nhiều dự án nguồn mở và kết hợp chúng để tạo một dự án "siêu" (để bạn sử dụng hoặc của công ty bạn)? Có phải là xấu để có Common.Logging và tăng cường nó với việc thực hiện GDC/MDC/NDC của Castle? Tôi không biết. Tôi sẽ để người khác trả lời.

Tôi sắp hoàn thành ...

Một số trừu tượng khai thác gỗ của bên thứ ba cung cấp các khả năng khác. Bạn có thể sử dụng một thư viện được thực hiện trong điều khoản của, nói log4net. Bạn có thể không muốn sử dụng log4net, hoặc ít nhất có thể không muốn bị ràng buộc với nó. Common.Logging (và có thể SLF) giúp bạn dễ dàng nắm bắt các thông điệp ghi log4net và định tuyến lại chúng thông qua sự trừu tượng để chúng được ghi lại trong luồng ghi nhật ký của khung khai thác cơ bản của trừu tượng. SLF có thể cung cấp một cái gì đó tương tự. Tất nhiên, bạn có thể có thể làm một cái gì đó tương tự với khung công tác khai thác hiện có, hoặc là ra khỏi hộp hoặc bằng cách viết một tùy chỉnh log4net Appender, NLog Target, hoặc System.Diagnostics TraceListener. Các tính năng này đã không sôi nổi lên rất cao trong đánh giá cụ thể của tôi về việc có hay không sử dụng sự trừu tượng khai thác gỗ của bên thứ ba trong dự án của tôi bởi vì tôi chủ yếu quan tâm đơn giản trong khía cạnh trừu tượng.

Vì vậy, tôi nên đứng ở đâu? Tôi nghĩ rằng có giá trị trong việc giữ mã ứng dụng của bạn được cách ly từ một khung khai thác gỗ cụ thể. Với tôi, Common.Logging trông giống như một sự lựa chọn trừu tượng vững chắc, mặc dù một số tính năng quan trọng bị thiếu (GDC/MDC/NDC) và nó không tương thích với Silverlight. Nó sẽ tuyệt vời của những tính năng đã trở thành có sẵn sớm. Tôi cảm thấy thoải mái khi triển khai GDC/MDC/NDC nếu tôi phải làm như vậy. Làm cho nó tương thích Silverlight có lẽ sẽ mất nhiều công sức hơn, chủ yếu là bởi vì tôi không đặc biệt có kinh nghiệm với C# /. NET/Silverlight. Cho đến khi những vấn đề đó được giải quyết, chúng tôi sẽ có thể viết nhiều mã ứng dụng với Common.Logging tại chỗ. Chúng ta có thể dành nhiều thời gian để phát triển ứng dụng của chúng ta hơn là phát triển một thư viện khai thác gỗ hoặc thư viện trừu tượng khác. Nếu chúng ta cuối cùng phải thêm những tính năng còn thiếu, chúng ta sẽ phải làm rất nhiều điều đó nếu chúng ta đã thực hiện một thư viện khai thác hoặc thư viện trừu tượng.

+3

Như một bài lớn! Tôi đồng ý với tất cả mọi thứ, 1 có chắc chắn, nhưng có lẽ nó có thể được đơn giản hóa/định dạng một chút? Tôi có thể nhìn thấy rất nhiều điều được tuyên bố nhiều lần chẳng hạn. Ngoài ra, vì điều này là rất cũ, bạn có bất kỳ cái nhìn sâu sắc mới hơn về điều này? Có điều gì đó thay đổi trong thời gian chờ đợi mà sẽ đảm bảo thảo luận một lần nữa? – julealgon

+1

Tôi không có gì để thêm từ bài đăng gốc của mình. Vào thời điểm tôi đã viết điều này, tôi đã trải qua quá trình học hỏi càng nhiều về việc đăng nhập càng tốt. Trong trường hợp tổ chức của tôi, chúng tôi đã quyết định sử dụng phương pháp tiếp cận mặt tiền ghi nhật ký, cụ thể là Common.Logging cho .Net. Chúng tôi cũng định cư trên NLog như hệ thống khai thác cơ bản của chúng tôi, mặc dù, do mặt tiền, chúng tôi không trực tiếp phụ thuộc vào NLog. – wageoghe

+0

FWIW: Gần đây tôi đã tình cờ gặp một [LibLog] (http://dhickey.ie/2015/04/introducing-liblog/) mà chỉ là một tập tin chứ không phải là một sự phụ thuộc. – LosManos

0

Trong ví dụ này, bạn chỉ cần một mức trừu tượng để có thể hoán đổi bộ ghi nhật ký của bạn.

Ưu điểm bổ sung nào có thể hoán đổi mặt tiền ghi nhật ký của bạn giúp bạn?

+0

Nếu mặt tiền ghi nhật ký tốt hơn xuất hiện hoặc nếu dự án mặt tiền ghi nhật ký bị lỗi thời, tôi có thể hoán đổi nó. – brian

+0

:) Đúng, nhưng IMHO YAGNI, và đôi khi bạn phải chấp nhận rằng ở một giai đoạn nào đó trong tương lai bạn sẽ phải khởi động trình soạn thảo mã và thực hiện một số thay đổi. Điều đó nói rằng nếu nghĩ rằng bạn có nhu cầu sau đó làm điều đó. Nhưng tôi không bao giờ muốn nhìn thấy một bên thứ ba đăng nhập mặt tiền mặt tiền dự án mặt tiền ... –

1

Nó không phải là số ma thuật, nó phụ thuộc vào độ linh hoạt mà bạn muốn. Nếu bạn nghĩ về việc thay đổi mặt tiền của nhật ký, bạn nên viết mặt tiền mặt. Nếu bạn nghĩ về việc chỉ thay đổi nhật ký, bạn cần một mặt tiền. Nếu bạn không nghĩ gì về việc không sử dụng mặt tiền.

Những bất lợi khi bạn nói là khả năng đặc biệt. Nếu bạn đang sử dụng chúng chỉ viết mặt tiền của riêng bạn.

9

Tôi nghĩ điều làm cho One (mức trừu tượng) số ma thuật ở đây là Zero quá ít và Hai là quá nhiều.

Hoán đổi nhật ký phía sau mặt tiền của trình ghi nhật ký (số lượng cấp: 1) có thể dẫn đến lợi ích của người dùng, chẳng hạn như trình ghi nhật ký mới có thể làm điều gì đó mà trình ghi nhật ký không thể thực hiện được. Tôi có thể tưởng tượng rằng đó có thể là hiệu suất, hỗ trợ một số loại ứng dụng nhất định, v.v.

Sẽ khó tưởng tượng hơn lợi ích của người dùng khi hoán đổi mặt tiền logger (số cấp: 2).

(Và nếu số lượng cấp là 0, thì đó có thể chỉ là thiết kế hướng đối tượng xấu: bạn sẽ có hàng nghìn địa điểm trong mã của mình nơi trình ghi nhật ký được tham chiếu và điều gì xảy ra nếu có thay đổi đột ngột trong phiên bản tiếp theo của các logger.)

Thỏa thuận với mặt tiền logger có vẻ là bạn phải chọn một trong các tùy chọn của bên thứ ba hoặc tạo tùy chọn của riêng bạn và chuẩn bị gắn bó với nó trong một thời gian dài.

3

Cho đến NLog và log4net cung cấp một giao diện có thể được sử dụng thay vì các lớp cụ thể, tôi luôn luôn tóm tắt chúng sau giao diện của riêng tôi và lớp trình bao bọc.

Tại sao?

Để đạt được mức độ phù hợp thử nghiệm cao nhất cho tất cả các yêu cầu của người dùng, đặc biệt khi các yêu cầu đó bao gồm ghi nhật ký.

Khi bạn có tất cả việc ghi nhật ký của mình thông qua giao diện thay vì lớp bê tông, nó trở nên rất dễ dàng để cung cấp đối tượng giả với giao diện ghi nhật ký (chọn lựa cách bạn thực hiện, chèn phụ thuộc v.v.) để ghi lại tất cả các cuộc gọi đăng nhập được thực hiện trong một kịch bản thử nghiệm cụ thể.

Sau đó, chúng có thể được xác nhận và nếu thay đổi mã vi phạm việc ghi nhật ký, kiểm tra đơn vị của bạn sẽ bao gồm nó.

Nếu NLog hoặc log4Net cung cấp giao diện cho trình ghi nhật ký của chúng, thì tôi không cần phải cố gắng cung cấp giao diện và lớp bao bọc, vì tôi có thể thử giao diện của chúng cho các thử nghiệm.

0

Có thể sử dụng trong giao thức cho hệ thống plugin. Thay vì nói use Some3rdParty.dll and MyPlugingApi.dll tôi sẽ chỉ ghi lại MyPlugingApi.dll. Giao diện mặt tiền của nhật ký sẽ đề xuất và ghi lại một số cách sử dụng có thể sẽ dẫn đến các nhật ký có thể đọc được và hiệu suất ghi nhật ký đủ tốt. Và tất nhiên thay đổi sẽ không dẫn đến thay đổi đối với API plugin.

Tại sao cần thay đổi triển khai?Điều này có thể xảy ra nếu hiện tại xuất hiện chậm để bắt đầu cấu hình hoặc chậm để ghi các mục, mong muốn mở rộng để cắt giảm phiên bản .NET không cần bên thứ 3, tích hợp với codebase khác sử dụng các trình ghi nhật ký khác.

Tôi cũng đã viết một số khác facade là suy nghĩ của trẻ trong câu trả lời này.

1

Trong dự án của tôi, tôi sử dụng System.Diagnostics.Trace.TraceError(...), System.Diagnostics.Debug.Print(...) làm mặt tiền để ghi nhật ký. Đối với tổ chức (viết) các bản ghi tôi sử dụng NLog, tức là trong app.config Tôi có cấu hình cho NLog và chuyển hướng theo dõi của .net sang NLog.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets> 
    <target name="file" xsi:type="File" 
     layout="${longdate:universalTime=true}Z [${threadid}] ${pad:padding=5:inner=${level:uppercase=true}} ${logger} ${message}" 
     fileName="${basedir}/App_Data/logfile.txt"... 
    </targets> 
</nlog> 
<system.diagnostics> 
    <trace> 
    <listeners> 
     <add name="nlog" type="NLog.NLogTraceListener, NLog" /> 
    </listeners> 
    </trace> 
</system.diagnostics> 

Điều này không gói tôi vào bất kỳ bộ ghi nào. Khi tôi gửi các thành phần của tôi cho khách hàng, họ có thể sử dụng bất kỳ logger nào mà họ thích. Sử dụng trình ghi nhật ký cụ thể trong ứng dụng có thể gây ra sự cố, tức là bạn có thể sử dụng nlog nhưng khách hàng của bạn sử dụng log4net.

0

Tôi không phải là một chuyên gia, nhưng trong nhóm của chúng tôi, giá trị của mặt tiền không cho chúng ta khả năng thay đổi khung khai thác gỗ. Đúng, đó là điều chúng tôi nhận được, nhưng chúng tôi đang ở trong hạng mục không có khả năng thay đổi khuôn khổ của chúng tôi.

Trong trường hợp của chúng tôi, chúng tôi đang sử dụng mặt tiền để điều chỉnh giao diện đăng nhập theo nhu cầu của ứng dụng của chúng tôi. Chúng tôi thấy rằng trong tất cả các khuôn khổ ngữ nghĩa mà chúng tôi xem xét, họ vẫn tập trung vào những gì chúng tôi gọi là mô hình "pháp y" của việc ghi nhật ký - một người nào đó tìm kiếm một số dòng sản phẩm để phân tích một số sự kiện.

Mặc dù đây cũng là trường hợp sử dụng đối với chúng tôi, nó thực sự không phải là trường hợp sử dụng chính của chúng tôi. Chúng tôi muốn nhiều hơn một khung công cụ so với hình thức ghi nhật ký, điều này sẽ cho phép chúng tôi báo cáo về những điều quan tâm - ngay cả những điều chúng tôi chưa từng nghĩ đến tại thời điểm triển khai.

Ví dụ: ứng dụng của chúng tôi không cần "thông báo" để đi cùng với một sự kiện; thay vào đó, "logger" của chúng tôi sẽ chấp nhận enums xác định loại sự kiện và các đối tượng trạng thái đại diện cho các chi tiết cụ thể (ví dụ: dấu thời gian hoặc các giá trị khác) và sẽ tuần tự hóa chúng để tạo thuận lợi cho báo cáo, phân tích perf, số liệu giá trị kinh doanh vv. pháp y. (Chúng tôi nhận ra rằng trên thực tế, chúng tôi đang làm cho pháp y truyền thống khó hơn một chút vì lợi ích của giao diện ghi đơn giản và dễ hiểu giúp tăng khả năng sử dụng và sử dụng nó thường xuyên hơn).

Vì vậy, để cung cấp cho bạn câu trả lời tóm tắt gọn gàng, đây là thứ tự sắp xếp theo thứ tự các lợi ích mà chúng tôi cảm thấy chúng tôi nhận được từ việc sử dụng mặt tiền ghi nhật ký.

  1. Phù, giao diện mục đích xây dựng tạo điều kiện thiết bị đo đạc (như trái ngược với chỉ khai thác gỗ truyền thống, như đã trình bày ở trên)
  2. điểm kiểm tra Mockable
  3. triển khai logger tiêm thích hợp cho tất cả mọi thứ từ sự phát triển địa phương để kết nối AWS S3 hoặc DB, tùy thuộc vào việc triển khai (ứng dụng của chúng tôi sử dụng Autofac với tiêm phụ thuộc hàm dựng)
  4. Substitu khung logger bảng cho phép chúng ta thay đổi sang một khung công tác logger khác trong tương lai nếu chúng ta muốn. (Ngẫu nhiên, chúng tôi không nhận ra điều này, vì vậy, một mình, sẽ không thuyết phục chúng tôi sử dụng một mặt tiền.)

Và cuối cùng, 0 mặt tiền sẽ mất những lợi ích này và 2 mặt tiền sẽ không thêm vào bất kỳ lợi ích nào, vì vậy đó là lý do 1 mặt tiền là số phù hợp với chúng tôi.

Câu hỏi hay, @brian! :)

1

Việc sử dụng quan trọng mặt tiền ghi nhật ký là khi bạn đang viết thư viện. Việc nhúng các phụ thuộc vào thư viện luôn là thứ đòi hỏi một chút cẩn thận và ghi lại nhiều hơn thế.

Tóm lại, bạn không muốn ép buộc triển khai ghi nhật ký của mình vào người dùng thư viện. Sử dụng mặt tiền được chọn tốt có nghĩa là họ có thể xử lý các bản ghi của thư viện với khung lựa chọn riêng của họ và sẽ không phải trải qua một số loại trừ phụ thuộc kỳ lạ và sơ hở để làm cho cả khung đăng nhập của bạn và cùng tồn tại.

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