.NET Core 日志配置,NLog配置示例
2024-10-15
46
.NET Core内置的日志组件附带了以堆日志提供程序,输出到控制台,输出,系统事件。
在Program.cs组件配置里可以配置,如下。Console和Debug是默认配置。
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
//日志输出到哪里的配置,默认Console和Debug
webBuilder.ConfigureLogging(builder => builder.AddConsole().AddDebug().AddEventLog());
webBuilder.UseStartup<Startup>();
});
但是如果需要将日志写入文件或者写入数据库就需要自己实现或者使用第三方日志组件。
第三方日志组件实际上都是实现了日志提供程序的接口。
.NET Core官方定义了6种级别的日志,下面是.NET Core的日志级别枚举
//
// 摘要:
// Defines logging severity levels.
public enum LogLevel
{
Trace = 0,
Debug = 1,
Information = 2,
Warning = 3,
Error = 4,
Critical = 5,
None = 6
}
下面以NLog为例
首先Nuget安装NLog,注意要安装NLog.Web.AspNetCore。
在Program.cs文件里使用NLog(最后的地方UseNlog()一下)
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseNLog();
添加一个配置文件nlog.config,配置文件的内容可以根据官方说明,我就是从官网复制的。
参考地址
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3
<?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"
internalLogFile="c:\nlog\internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="c:\nlog\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="c:\nlog\nlog-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
这样就算配置完成了,直接可以使用了,使用方法
如果在Controller里直接在构造方法注入使用即可。
//例如在Startup的Configurate方法直接注入使用
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IOptions<SettingModel> appOptions,ILogger<Startup> logger){
logger.LogInformation("123123");
}
调试后在我配置的c:\nlog\nlog-all-${shortdate}.log里可以看到日志了
更新于:1个月前赞一波!
相关文章
- .NET 游戏开发框架有哪些?
- PluginCore 基于 ASP.NET Core 的轻量级插件框架
- .NET C# EntityFramework(EF)连接SQLite代码示例
- Sylvan.Data.Excel 性能优异的开源.NET Excel数据读取库
- ASP.NET Core 中常用的内置中间件
- .NET9 F#有什么新特性?
- .NET 开源 ORM FreeSql 使用教程
- .NET9 C# 13 有哪些新特性?
- .NET9 开始删除内置的 Swagger 支持 可使用Scalar.AspNetCore替代
- .NET 9 中System.Text.Json 的新增功能
- 什么是.NET渐进式Web应用(PWA)
- .NET开发中常见的异常报错原因和解决方法?
- .NET框架和CLR的工作原理?
- ASP.NET MVC与Web Forms的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- 使用ADO.NET连接到南大通用GBase 8s数据库
- 鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?
- ASP.NET Core使用partial标签报错
- .NET 9 即将推出的功能Task.WhenEach
- .NET 使用HttpClientFactory+Polly替代直接使用HttpClient
文章评论
评论问答