مقایسه Serilog, log4net و NLog کتابخانه های Logging در .Net

هنگام توسعه برنامه های دات نت، به ناچار به یک مکانیسم ثبت log کارآمد و قابل اعتماد نیاز خواهید داشت. شما گزینه هایی دارید. اما چگونه انتخاب کنیم؟ بیایید به دنیای کتابخانه های Logging بپردازیم و سه مورد از محبوب ترین آنها را با هم مقایسه کنیم: Serilog، log4net و NLog.


معرفی

وقتی می‌خواهید آن کد را که درست عمل نمی‌کند، اشکال‌زدایی کنید، چه کسی وقت دارد تا log ها را سازماندهی کند. اما به من اعتماد کنید، داشتن یک سیستم قوی می‌تواند شما را بعداً نجات دهد. بنابراین، چرا زمانی را برای درک گزینه های خود صرف نمی کنید؟


مروری کوتاه بر ثبت کتابخانه ها

در چشم انداز دات نت، سه بازیگر اصلی در مورد ثبت کتابخانه ها وجود دارد: Serilog، log4net و NLog. هر کدام با طعم منحصر به فرد و مجموعه ای از ترفندها همراه است. بنابراین، بیایید کمی با لاگ در دات نت دست و پنجه نرم کنید.


Serilog

بیایید بیشتر در Serilog کاوش کنیم. ما در حال کشف قابلیت‌های بیشتری هستیم، توضیح می‌دهیم که چگونه Serilog از همتایان خود متمایز می‌شود، و بررسی می‌کنیم که چگونه ویژگی‌های آن می‌تواند به بهترین شکل در سناریوهای دنیای واقعی اعمال شود.


در دات نت Serilog چیست؟

با توجه به نام، فکر می کنید که این فقط مربوط به Logging است - پیام هایی که توسعه دهندگان در طول اجرای یک برنامه برای درک جریان آن ضبط می کنند.- اما با Serilog، چیزی بیش از آنچه که به نظر می رسد وجود دارد. این نه تنها Logging را با "log ساختاری" خود به سطح جدیدی می برد، بلکه رویدادهای log را نیز ساده می کند تا آنها را به راحتی قابل پرس و جو کند.

// Using Serilog
Log.Logger = new LoggerConfiguration()     
.WriteTo.Console()     
.CreateLogger();  

Log.Information(&quotHello, Serilog!&quot);   

// Creates structured log data
Log.Information(&quotOrder {OrderId} created for {CustomerId}&quot, orderId,
customerId);


در مثال بالا، ما از ثبت یک پیام رشته ای ساده فراتر می رویم. Serilog به ما اجازه می دهد تا ورودی های log پیچیده تری ایجاد کنیم و داده های خاصی را با هر log مرتبط کنیم. پس، log های ما چیزی بیش از یک رکورد مکتوب هستند. آنها "ساختار یافته" هستند!


تصور کنید که یادداشت ها را یادداشت می کنید اما به جای یک بلوک متن، فیلدهای خاصی مانند «OrderId» و «CustomerId» دارید. حالا، آیا این کار ارجاع به یادداشت‌های شما را در آینده آسان‌تر نمی‌کند؟


درک عملکرد Serilog

اگر هنوز اینجا هستید، به این معنی است که فقط مرا اذیت نمی کنید. شما واقعاً به Serilog علاقه مند هستید. آیا برای سطح بعدی آماده هستید؟ خود را نگه دارید، ما در شرف فرو رفتن در سیاهچاله ساختار زدایی Serilog هستیم!

// Serilog De-structuring
Log.Information(&quotProcessing {@Order}&quot, order);


در این مثال، ما از نماد «@» در مقابل شیء Order استفاده می‌کنیم. این بدان معنی است که Serilog شیء "order" را از بین می برد و ویژگی های عمومی شی را ثبت می کند. بیایید این را بیشتر تجزیه کنیم:


فرض کنید شما یک شی پیچیده دارید (بیایید آن را "order" بنامیم)، که دارای ویژگی های بسیاری مانند "OrderId"، "OrderName"، "OrderStatus" و غیره است. حالا، وقتی این شی را ثبت می کنید، به طور معمول، نام نوع شی را دریافت می کنید، درست است؟ خیلی مفید نیست، نه؟


در اینجا اپراتور "@" به کمک شما می آید. به Serilog می‌گوید: «هی، فقط نام نوع را به من نگو! آن را جداسازی کنید و خصوصیات را ثبت کنید. من همه آنها را می خواهم!

// Order class with public properties
public class Order
{    
    public int OrderId { get; set; } 
    public string OrderName { get; set; }
    public string OrderStatus { get; set; }
}  

// Create an instance of an order
Order order = new Order { OrderId = 1001, OrderName = &quotNew Laptop&quot, OrderStatus = &quotProcessing&quot };

// Using Serilog De-structuring
Log.Information(&quotProcessing {@Order}&quot, order);


حدس بزنید خروجی چه خواهد بود؟ نام نوع «order» را ثبت نمی‌کند، بلکه مقادیر ویژگی‌های شی «order» را ثبت می‌کند. تصور کنید که بتوانید به راحتی به همه جزئیات به جای فقط نام نوع اشاره کنید!


مزایای Serilog

بسیار خوب، شما تحمل کرده اید که من در موردSerilog، Logging ساختاریافته و "Destructuring" آن صحبت کنم. اکنون، بیایید مزایای استفاده از این کتابخانه ثبت شگفت انگیز را در برنامه های خود باز کنیم.


ویژگی هایی که مزایای قابل توجهی را ارائه می دهند

ثبت ساختار یافته: این مانند دادن قدرت های فوق العاده به لاگ های شماست. داشتن همه چیز ساختاریافته و سازماندهی شده، پرس و جوی log های شما را به یک رویا تبدیل می کند.

پشتیبانی گسترده از سینک: logging در یک کنسول یا یک فایل, قدیمی به نظر می رسد، درست است؟ Serilog با پشتیبانی از مجموعه وسیعی از دیتابیس ها مدرنیته را به ارمغان می‌آورد، از جمله چندین پایگاه داده محبوب، سیستم‌های مدیریت log، و حتی سرویس‌های log مبتنی بر ابر.

گزینه های پیکربندی: چه از یک فایل پیکربندی باشد و چه به صورت برنامه ای، Serilog به شما امکان می دهد تا لاگر خود را همانطور که می خواهید تنظیم کنید.

کاربردهای دنیای واقعی Serilog

حتی جوکر هم موافق است، Serilog محبوب ما در مورد مدیریت لاگ ها در برنامه های کاربردی دنیای واقعی شوخی نیست. اگر چندین سرویس در حال اجرا و برقراری ارتباط دارید، مرتبط کردن logهای مربوط به همه این سرویس‌ها می‌تواند سردردی بدتر از بدترین حالت خماری شما باشد.


با استفاده از Logging ساختاریافته، می‌توانید بدون زحمت شناسه‌های درخواست یا حتی نام‌های کاربری را ثبت کنید. بنابراین اشکال زدایی حتی در سیستم های پیچیده توزیع شده به یک راه حل تبدیل می شود.


این را تصور کنید: شما در حال اجرای یک فروشگاه آنلاین هستید. هر بار که سفارشی می آید، خدمات مختلف جنبه های مختلفی را پردازش می کنند. اگر می خواهید جریان یک سفارش خاص را بدانید، لاگ ساختاری با Serilog بهترین دوست شماست. «OrderId» را ذخیره کنید و آن را مانند یک کارآگاه دنبال کنید.

معایب Serilog

هر سکه دو روی دارد و Serilog از این قاعده مستثنی نیست. به دات نت 4.5 یا بالاتر نیاز دارد، بنابراین اگر نسخه‌های قدیمی‌تر دات‌نت را دارید، ممکن است این فنجان چای شما نباشد.

اگر نیازهای Logging شما ساده است و با ثبت متن ساده سر و کار دارید، Serilog می تواند مانند استخدام یک دانشمند موشکی برای آموزش یک کودک مهدکودک باشد.

log4net

روز دوم گشت ما در اطراف چشم انداز جنگلداری، و امروز همه چیز درباره log4net است. حتی اگر در صحنه جدیدتر باشید، احتمال زیادی وجود دارد که شنیده باشید که در جایی از log4net نام برده است. پس بیایید این بسته را باز کنیم و جذابیت قدیمی log4net را کشف کنیم.


در دات نت log4net چیست؟

یک کهنه کار باتجربه، بیش از یک دهه است که به جامعه دات نت خدمت می کند. این یک اقتباس از کتابخانه معروف log4j در جاوا است. شهرت خوبی به دست آورده است، log4net انعطاف پذیری را فراهم می کند که در هیچ چیز دیگری وجود ندارد.

// Using log4net 
var log = LogManager.GetLogger(typeof(MyClass)); 
log.Info(&quotHello, log4net!&quot);  

// Also support for different levels of logging
log.Debug(&quotDebugging&quot);
 log.Error(&quotSomething went wrong!&quot);

در مثال بالا، log4net سطوح مختلف گزارش گیری از اطلاعات تا خطا را ارائه می دهد.

آیا این فقط شگفت انگیز نیست که چگونه خود را مطابق با نیازهای شما منحرف می کند و قالب می گیرد؟ من را به یاد یوگی مورد علاقه من می اندازد!


آشنایی با نحوه عملکرد log4net

قدرت log4net در فایل پیکربندی XML آن نهفته است. این به شما کنترل کامل بر عملیات log4net می دهد. آیا نیاز به تغییر تاکتیک های Logging خود در میانه همه چیز دارید؟ شما می توانید این کار را در یک لحظه انجام دهید، درست مانند تغییر مسیر در یک بزرگراه باز!


<log4net>
   <root>
     <level value=&quotDEBUG&quot />
     <appender-ref ref=&quotconsoleAppender&quot />   
   </root>   
   <appender name=&quotconsoleAppender&quottype=&quotlog4net.Appender.ConsoleAppender&quot>     
    <layout type=&quotlog4net.Layout.PatternLayout&quot>       
       <conversionPattern value=&quot%date [%thread] %-5level %logger-%message%newline&quot />     
    </layout>   
   </appender> 
</log4net>

در این پیکربندی XML، به log4net دستور می‌دهیم تا لاگ‌های سطح DEBUG و بالاتر را روی یک کنسول وارد کند. ConversionPattern جایی است که فرمت پیام log خروجی را کنترل می کنید. بسیار شبیه به بستنی فروشی مورد علاقه خود، آن را با هم مخلوط کنید تا ذائقه شما را برآورده کند!


ویژگی های log4net

انعطاف پذیری: log4net با چندین سناریو سازگار است. نوشتن log روی یک فایل متنی؟ easy peasy Logging به یک data store؟ این یک بازی کودکانه است شعبده بازی هر دوی آنها با هم؟ چرا که نه! آن را به روش خود داشته باشید!

<appender name=&quotRollingFile&quot type=&quotlog4net.Appender.RollingFileAppender&quot>     
     <file value=&quotmyapp-log.txt&quot />     
     <rollingStyle value=&quotSize&quot />     
     <maximumFileSize value=&quot10MB&quot />     
     <staticLogFileName value=&quottrue&quot /> 
</appender> 
<appender name=&quotAdoNetAppender&quot type=&quotlog4net.Appender.AdoNetAppender&quot>     
    <connectionType value=&quotSystem.Data.SqlClient.SqlConnection, System.Data&quot />     
    <connectionString value=&quotdata source=[datasource];initial catalog=[database];integrated security=false;&quot />     
//...Other settings omitted for brevity
</appender>

با دو تگ ضمیمه ساده، می‌توانیم داده‌های خود را به طور همزمان در یک فایل و یک پایگاه داده ثبت کنیم. حالا این چیزی است که من می گویم ضربه زدن به دو پرنده با یک سنگ!


بالغ و پایدار: مدتی بودن در اطراف مزایای خود را دارد، اشکالات کمتر، پذیرش گسترده، و حمایت بسیار زیاد جامعه، که به چند مورد اشاره می کنیم.

پیاده سازی موفقیت آمیز log4net

با گذشت زمان، log4net خانه هایی را در بسیاری از برنامه های کاربردی در دنیای واقعی پیدا کرده است. تأکید آن بر سفارشی‌سازی و سازگاری، آن را به یک انتخاب محبوب برای سیستم‌هایی تبدیل می‌کند که نیاز به کنترل دانه‌بندی بر ورود به سیستم دارند.

معایب استفاده از log4net

تا اینجا فقط از آفتاب و رنگین کمان صحبت می کردیم. اما، به یاد داشته باشید که عمو بن به پیتر چه توصیه ای کرد؟ "قدرت زیاد مسئولیت زیاد هم می آورد!". و با log4net، از این قاعده مستثنی نیست.


فقدان logging ساختاریافته: در مقایسه با Serilog، استخراج اطلاعات معنی‌دار از سیاهه‌ها می‌تواند مانند جستجوی سوزن در انبار کاه به نظر برسد.

پیچیدگی پیکربندی ها: در حالی که استفاده از XML برای پیکربندی ها درها را به روی فرصت های بی شماری باز می کند، نکته مهم این است که با آشکار شدن نیازهای شما پیچیده تر می شود. سعی کنید مشکل کوله پشتی را برای یک کودک 8 ساله توضیح دهید، متوجه خواهید شد!

بنابراین، هنگام بررسی log4net، همیشه قیاس استاد سوشی را به خاطر بسپارید. مطمئنا، داشتن یک ست سوشی که خودتان انجام دهید سرگرم کننده است، اما فقط در صورتی که بدانید چگونه سوشی درست کنید. در غیر این صورت، ممکن است کثیف شود!


NLog

بیایید در مورد NLog صحبت کنیم. اغلب به عنوان پسر عموی جوان log4net و رقیب کمتر شناخته شده Serilog مقایسه می شود، NLog به تنهایی ترکیب منحصر به فردی از ویژگی ها را ارائه می دهد. وقتی صحبت از انعطاف پذیری به میان می آید، پیوند برادرانه ای با log4net دارد و با Serilog در زمینه logging ساختاریافته موافق است.


NLog چیست؟

من دوست دارم NLog را به عنوان پلی بین پیچیدگی Serilog و ماهیت آزمایش شده log4net در نظر بگیرم. از logging ساخت‌یافته پشتیبانی می‌کند و در عین حال سطح بالایی از سازگاری را از نظر مکان و نحوه ذخیره‌سازی لاگ‌ها حفظ می‌کند. اساساً، هر دو سری Serilog و log4net را دارد.

// Initialize NLog Logger 
var logger = NLog.LogManager.GetCurrentClassLogger(); 
// Logging an informational message
logger.Info(&quotGreetings from NLog World!&quot);

مثال بالا یک نمونه لاگر را نشان می دهد که با استفاده از NLog ایجاد می شود. متد GetCurrentClassLogger تضمین می کند که نمونه لاگر به کلاس فعلی اختصاص داده می شود و متعاقباً یک log اطلاعاتی ثبت می شود.


شیرجه رفتن عمیق در توابع NLog

بهترین‌های هر دو جهان را ارائه می‌کند - ثبت‌نام ساختاری و پیکربندی مبتنی بر XML - بدون هیچ گونه مصالحه‌ای.

// NLog – Illustrating structured logging
logger.Info(&quotJust dispatched an order {OrderId} to client {ClientId} &quot, 1200, &quotC100&quot);

این خطوط ساده می‌توانند اطلاعات جامعی را ثبت کنند که پردازش آنها بعداً آسان‌تر است. توجه کنید که چگونه OrderId عددی منحصر به فرد و ClientId الفبایی را مستقیماً به پیام گزارش ارسال می کنیم؟ خوب، این دقیقاً همان چیزی است که ما از Logging ساختار یافته می‌گوییم.


مزایای استفاده از NLog

ممکن است در مقایسه با همسالان خود یک بچه جدید در بلوک به نظر برسد، اما آنچه که روی میز آورده است تازه و سازگار است.


ویژگی های کلیدی NLog

ثبت ساختار یافته: به اندازه Serilog متمایز نیست، اما کار را بدون اضافه کردن سربار اضافی انجام می دهد.

انعطاف پذیری: از نظر پیکربندی و تعریف خروجی های گزارش (فایل، کنسول، پایگاه داده یا ایمیل)، NLog به اندازه log4net انعطاف پذیر است.


// NLog – Configuring multiple log targets
 var config = new NLog.Config.LoggingConfiguration();  

// Targets for logging - File and Console
 var logfile = new NLog.Targets.FileTarget(&quotlogfile&quot) { FileName = &quotlog.txt&quot };
 var logconsole = new NLog.Targets.ConsoleTarget(&quotlogconsole&quot);  

// Rules for mapping loggers to targets 
config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole); config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);  

// Apply config
NLog.LogManager.Configuration = config;

کد داده شده سناریویی را ارائه می دهد که در آن NLog دو هدف را برای logging پیکربندی می کند، یعنی logconsole و logfile. تابع AddRule چیزی است که سطوح گزارش خاص را به خروجی های هدف نگاشت می کند.


نمونه هایی از کاربردهای عملی NLog

دقیقا کجا می درخشد؟ این گزینه برای پروژه‌هایی است که به ویژگی‌های ثبت ساختار یافته نیاز دارند، بدون اینکه از محاسباتی که می‌تواند با Serilog ارائه شود، استفاده شود. علاوه بر این، NLog در سناریوهای throttling که در آن تولید log بسیار زیاد است، بهتر عمل می کند.


معایب NLog

در حالی که NLog یک رقیب توانمند است، اما هنوز مناطق خاصی دارد که از پیشرفت ها استقبال می شود:


  • نسبتاً بالغ تر از log4net است. مدت زمان کوتاه تری وجود داشته است.
  • اگرچه این سیستم Logging ساختار یافته دارد، اما به اندازه Serilog تکامل یافته یا پیچیده نیست. از این رو، اگر Logging ساخت یافته اولویت اصلی شماست، ممکن است بخواهید Serilog را نیز بررسی کنید.

برای مثال، تصور کنید که طعم بستنی مورد علاقه خود را توضیح دهید. شما فقط نمی گویید "شیرین است". شما احتمالاً جزئیات خاصی را ارائه می دهید - شاید خامه ای باشد، یا تکه های خمیر شیرینی دارد، یا شما را به یاد روزهای سرگرم کننده تابستان می اندازد.


مقایسه: Serilog در مقابل log4net در مقابل NLog

آیا برای رویداد اصلی آماده هستید؟ سه قهرمان سنگین وزن جهان دات نت لاگ در حال رویارویی هستند. در این گوشه، سرلوگ، Logging ساخت یافته را ارائه می دهیم. دولتمرد بزرگ، log4net. و آخرین اما نه کم اهمیت ترین، رقیب انعطاف پذیر، NLog.


مقایسه ویژگی ها

بیایید برسیم به ریزگردها. مقایسه کتابخانه‌های Logging ممکن است مانند نان تست بدون کره خشک به نظر برسد، اما، چه کسی گفت که برنامه‌نویسی همیشه پر از اکشن است، درست است؟


اول و مهمتر از همه، آیا برنامه شما نیاز به log ساختار یافته دارد؟ اگر بله، Serilog بهترین دوست شما خواهد بود. بیایید دوباره بررسی کنیم که چرا Serilog به عنوان فرزند Logging ساختار یافته است:

// Serilog Structured logging
Log.Information(&quotOrder {OrderId} created for {CustomerId}&quot, orderId, customerId);


این logها به‌طور خودکار در جفت‌های کلید-مقدار ساختاربندی می‌شوند و فیلتر کردن آن‌ها را بر اساس ویژگی‌های خاص آسان می‌کنند. اجازه دهید به شما یادآوری کنم ... این طلای خالص در هنگام اشکال زدایی است!


حال، اگر برنامه شما واقعاً نیازی به لاگ ساختاری ندارد، اما لاگ قابل تنظیم چیزی است که به دنبال آن هستید، log4net برای همیشه این کار را انجام داده است:

// Using log4net
 var log = LogManager.GetLogger(typeof(MyClass)); log.Info(&quotHello, log4net!&quot);

با log4net، می‌توانید آنچه را که وارد می‌کنید و جایی که ثبت شده است را پیکربندی کنید.

در همین حال، NLog بهترین‌های هر دو دنیا را برآورده می‌کند و لاگ ساختار یافته و پیکربندی بالا را متعادل می‌کند:

// NLog structured logging
logger.Info(&quotOrder {OrderId} created for {CustomerId}&quot, orderId, customerId);


درست مانند Serilog، NLog از لاگ ساختاری پشتیبانی می کند و مانند log4net، تنظیمات بالایی را ارائه می دهد. یک توازن واقعی قدرت، اگر از من بپرسید.


در اینجا طعم مقایسه ویژگی ها را مشاهده می کنید:

مقایسه عملکرد

عملکرد مانند پلنگ ساکت است، تا زمانی که به آن هجوم نیاورده است. هر سه عملکرد قابل مقایسه ای ارائه می دهند. اما وقتی نوبت به ثبت ساختار یافته و با توان بالا می‌رسد، هم Serilog و هم NLog برتری کمی نسبت به log4net دارند.

مقایسه حمایت جامعه

آیا تا به حال به نرم افزاری گیر کرده اید که دیگر پشتیبانی ندارد؟ احساس تنهایی زیر باران می کند. با این حال، خبر خوب، هر سه کتابخانه از حمایت جامعه قوی برخوردار هستند. با این حال، Serilog و NLog توسعه فعال تری دارند، زیرا آنها نیازهای مدرن تر Logging را برآورده می کنند.

نتیجه

وقت آن است که نقاط قوت و ضعف رقبای خود را بسنجیم، درست مانند ارزیاب‌ها در یک بازی المپیک. آیا قهرمان ما Maestro Logging ساختاریافته، Serilog، log4net آزمایش شده و قابل اعتماد یا ادغام هماهنگ هر دو جهان، NLog خواهد بود؟ اما به یاد داشته باشید، ما در اینجا یک برنده را کاملاً اعلام نمی کنیم. در عوض، ما به این نکته اشاره خواهیم کرد که چرا هر کدام می‌توانند قهرمان کاملی در ماجراجویی‌های کدنویسی شما باشند.


حکم: Serilog، log4net یا NLog؟

انتخاب بین Serilog، log4net و NLog مانند انتخاب بین بازی فوتبال، بسکتبال، یا انجام یک biathlon است. آنها اساساً متفاوت هستند، اما هر کدام مزیت های منحصر به فرد خود را برای بازی به ارمغان می آورند.


در اینجا تجسم دیگری برای فکر کردن وجود دارد. تصور کنید پایگاه کد ما یک شهر بسیار پیچیده است و سیاهه ها وسایل نقلیه ای هستند که در آن عبور می کنند. سپس Serilog سوپراسپرت ما خواهد بود، برای بزرگراه‌ها (یا logging ساختاریافته) عالی است، زیرا برای عملکرد و سرعت عالی ساخته شده است، با امتیاز زرق و برق دار بودن.

// Serilog: Speeding up your structured log queries
Log.Logger = new LoggerConfiguration()     
.WriteTo.Console()      
.CreateLogger(); 

 Log.Information(&quotProcessing {@Order} at {Time}&quot, order, DateTime.Now);


در همین حال، log4net مانند یک کامیون قابل اعتماد است. ممکن است آنقدرها هم پر زرق و برق یا سریع نباشد، اما قوی و قابل اعتماد است، در شهر ما به راحتی در حال گشت و گذار است و تمام کارهای روزانه logging را بدون عرق کردن انجام می دهد.

// log4net: Reliable and gets the job done
 var log = LogManager.GetLogger(typeof(MyClass)); log.Info(&quotPerforming the day to day logging tasks!&quot);


در نهایت، NLog تلاش می‌کند تا تعادلی ایجاد کند، و به عنوان یک SUV عمل می‌کند که توانایی آفرود و راحتی را با هم ترکیب می‌کند و شکاف بین درخشندگی لاگینگ ساختاری Serilog و دوام بدون عارضه log4net را پر می‌کند.

// NLog: Best of both worlds
var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info(&quotOrder {OrderId} named {OrderName} for {CustomerId}&quot, orderId, orderName, customerId);


سرگرم کننده به نظر می رسد، درست است؟ اما هنوز عجله نکنید. به‌عنوان توسعه‌دهندگان، انتخاب‌های ما باید همیشه بر اساس نیازهای خاص و زمینه برنامه‌مان باشد.


نکاتی برای انتخاب کتابخانه ثبت Log مناسب

انتخاب یک کتابخانه Log یک تصمیم حیاتی است، اما لازم نیست به اندازه گرفتن جکپات در قرعه کشی سخت باشد. در اینجا چند نکته وجود دارد که ممکن است به تمرکز تصمیم شما کمک کند:


محتویات log: چه اطلاعاتی را ثبت خواهید کرد؟ آیا متن ساده، رویدادهای غنی از ویژگی، یا هر دو است؟ به یاد داشته باشید، Serilog حامل استاندارد برای Logging ساختار یافته است، NLog یک جایگزین متعادل ارائه می‌کند، و log4net قهرمان logging قدیمی شما است.

پیشنهاد کتابخانه: اکوسیستم کتابخانه را نیز در نظر بگیرید. چه خروجی های logging (فایل، کنسول، پایگاه داده، ابر و غیره) پشتیبانی می شوند؟ حمایت جامعه چگونه است؟

ادغام: آیا پشته فناوری شما با کتابخانه سازگار است؟ به عنوان مثال، اگر از طرفداران اینترفیس logging داخلی NET Core هستید، هم Serilog و هم NLog یکپارچه سازی عالی ارائه می دهند.

// Example: Integrating Serilog with the built-in .NET Core logging
Log.Logger = new LoggerConfiguration()
     .Enrich.FromLogContext()
     .WriteTo.Console()
     .CreateLogger();

  WebHost.CreateDefaultBuilder(args)
     .UseSerilog()
     .Build();


کارایی و سهولت استفاده: اگر برنامه شما دارای تعداد زیادی log است، باید مطمئن شوید که کتابخانه انتخابی شما نه تنها سریع است، بلکه برای جستجو و فیلتر کردن نیز ساده است.

مانند تیمی که یک بازیکن کامل را برای مسابقه بعدی خود انتخاب می کند، کتابخانه Logging را انتخاب کنید که در بازی که برنامه شما انجام می دهد برجسته باشد. چشمان خود را روی صفحه برنامه نویسی قرار دهید، انگشتان زیرک خود را خم کنید، و اجازه دهید آنها بر روی صفحه کلید برقصند، و یادداشت های log کاملی را روی بوم برنامه دات نت خود ایجاد کنید. بگذارید بهترین logger برنده شود!