Serilog中的結構化日志支持非常好,而且配置簡便。我能夠比其他任何人更輕松地啟動和運行Seirlog。Serilog中的日志可以發送到很多目的地。Serilog稱這些東西為“接收器”
在大多數情況下,Serilog的延遲是NLog的延遲的一半,吞吐量是其兩倍。測試鏈接
使用NLog
第一步,項目中引入NLog.Web.AspNetCore
第二步、創建nlog.config文件(詳細的配置說明請參照NLog官方文檔),配置好日志參數。並將改文件設置成【始終復制】或者【如果較新則復制】
nlog.config文件示例
具體的配置說明 可以參考 https://www.cjavapy.com/article/183/
<?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info"> <!-- 啟用.net core的核心布局渲染器 --> <extensions> <add assembly="NLog.Web.AspNetCore" /> </extensions> <!-- 寫入日志的目標配置 archiveAboveSize="102400" maxArchiveDays="60" --> <targets> <!-- 調試 --> <target xsi:type="File" name="debug" fileName="../logs/debug-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> <!-- 警告 --> <target xsi:type="File" name="warn" fileName="../logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> <!-- 錯誤 --> <target xsi:type="File" name="error" fileName="../logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> <!-- 控制台 --> <target xsi:type="Console" name="console" layout="${message}" /> </targets> <!-- 映射規則 --> <rules> <!-- 調試 --> <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" /> <!--<logger name="*" minlevel="Trace" writeTo="console" />--> <!-- 警告 --> <logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" /> <!-- 錯誤 --> <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" /> <!--跳過不重要的微軟日志--> <logger name="Microsoft.*" maxlevel="Info" final="true" /> </rules> </nlog>
第三步、代碼中注入NLog
只需修改program.cs
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).UseNLog();// 注入nlog
四. 控制器里使用
/// <summary> /// 日志 /// </summary> private readonly ILogger<DemoController> _logger; /// <summary> /// 構造函數 /// </summary> /// <param name="logger"></param> public DemoController(ILogger<DemoController> logger) { _logger = logger; } public IActionResult Test() { _logger.LogError("我是日志內容"); return Ok("ok"); }
使用log4net
第一步、在對應項目中引入Microsoft.Extensions.Logging.Log4Net.AspNetCore
第二步、創建log4net.config文件(詳細的配置說明請參照其官方文檔),配置好日志參數。並將改文件設置成【始終復制】或者【如果較新則復制】
log4net.config文件內容示例
<?xml version="1.0" encoding="utf-8"?> <log4net> <!-- Define some output appenders --> <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\log.txt" /> <!--追加日志內容--> <appendToFile value="true" /> <!--防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--可以為:Once|Size|Date|Composite--> <!--Composite為Size和Date的組合--> <rollingStyle value="Composite" /> <!--當備份文件時,為文件名加的后綴--> <datePattern value="yyyyMMdd.txt" /> <!--日志最大個數,都是最新的--> <!--rollingStyle節點為Size時,只能有value個日志--> <!--rollingStyle節點為Composite時,每天有value個日志--> <maxSizeRollBackups value="20" /> <!--可用的單位:KB|MB|GB--> <maximumFileSize value="5MB" /> <!--置為true,當前最新日志文件名永遠為file節中的名字--> <staticLogFileName value="true" /> <!--輸出級別在INFO和ERROR之間的日志--> <!--過濾級別 FATAL > ERROR > WARN > INFO > DEBUG--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="WARN" /> <param name="LevelMax" value="FATAL" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="rollingAppender" /> </root> </log4net>
第三步、代碼注入log4net
修改program.cs代碼注入log4net
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((context, logBuilder) => { logBuilder.AddFilter("System", LogLevel.Warning); logBuilder.AddFilter("Microsoft", LogLevel.Warning); logBuilder.AddLog4Net(); //注入log4net }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
再修改startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // app.UseHttpsRedirection(); #region 添加log4net loggerFactory.AddLog4Net(); #endregion app.UseRouting(); ...... }
測試
[Route("api/[controller]")] [ApiController] public class TestLoggerController : ControllerBase { private readonly ILogger<TestLoggerController> _logger; public TestLoggerController(ILogger<TestLoggerController> logger) { this._logger = logger; } [HttpPost("testWriteLogException")] public void TestWriteLogException() { _logger.LogError("這是一個簡單日志測試"); } }
使用Serilog
添加 Nuget 引用
Serilog.AspNetCore日志包主體
Serilog.Sinks.RollingFile 將日志寫入文件
日志記錄器的四種級別(Log4j)的要求
- error 錯誤信息(較嚴重)
- warn 警告級別的信息(不嚴重)
- info 需要持續輸出的信息(無論調試還是發布狀態)
- debug 需要在調試過程中輸出的信息,但發布后是不需要的(當然發布后,也是看不到的)
級別由上自下依次降低
appsettings.json 中添加 Serilog 節點
{ "Serilog": { "WriteTo": [ { "Name": "RollingFile", "Args": { "pathFormat": "logs\\{Date}.txt", "RestrictedToMinimumLevel": "Warning" } }, { "Name": "Console" } ], "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Information", "System": "Information" } } }, }
簡單說明下配置文件的意思:
- 將日志寫入RollingFile(文件)和Console(控制台)。
- RollingFile 的具體配置:記錄文件到 根目錄/logs/{日期}.txt 文件內,每天記錄一個文件,並且只記錄 Warning 及其以上的日志;
- 默認日志級別記錄 Debug 及其以上的日志。
- 如果日志包含 Microsoft System ,只記錄級別為 Information 及以上的日志。
修改 program.cs,注冊 Serilog
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).UseSerilog((context, configure) => { configure.ReadFrom.Configuration(context.Configuration); });
簡單配置完成,現在可以在項目中方便的使用 Serilog 了。
private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogError("Error 測試"); return View(); }
更多詳情
https://www.cnblogs.com/diwu0510/p/12828519.html
