c#Nlog文本日志,控制台日志,事件查看器日志(亲测有效)
以上只能满足控制台的日志输出,,而且事件管理器linux是没有的。无法满足项目中日志文件的需求,这时候我们就需要用到nlog进行一些复杂的日志输出。Logging.Console的nuget引用包括了依赖注入需要的引用所以就无需下载依赖注入需要的nuget,如对依赖注入的nuget。我已对文件进行调整方便展示效果,过多就不细说了,具体属性意思可看注释,多的可以去nlog官网看文档。这时候就自动创建
c#Nlog文本日志,控制台日志,事件查看器日志
Nlog和EventLog的功能
Nlog是比较方便的日志 功能要比log4要多,支持很多的日志输出方式,例如 ,控制台,文件,邮箱等等。
EventLog 可以把日志输出到windows自带的事件管理器
话不多说直接开始图文讲解
本次教程用的是依赖注入的框架引用的写法,不懂的同学可以去看一下基础语法,这里我就不多说了
为了方便展示功能用的控制台,我们先vs创建一个控制台管理项目,其次在添加Logging.Console的nuget引用
Logging.Console的nuget引用包括了依赖注入需要的引用所以就无需下载依赖注入需要的nuget,如对依赖注入的nuget
包版本有需求可自行更改
然后我们搭建依赖注入的框架
namespace Program
{
class Program
{
static void Main(string[] args)
{
ServiceCollection service = new ServiceCollection();
service.AddLogging(t =>
{
t.AddConsole();//添加log日志输出
t.SetMinimumLevel(LogLevel.Trace);//设置最高显示的日志级别
});
using (var sp = service.BuildServiceProvider())
{
}
Console.ReadKey();
}
}
}
接着我们创建一个Test类用作输出日志文本
public class Test
{
private readonly ILogger<Test> logger;
public Test(ILogger<Test> logger)
{
this.logger = logger;
}
public void qqq() {
logger.LogDebug("11111111111111日志Debug");
logger.LogWarning("2222222222222222日志Warning");
logger.LogError("3333333333333日志Error");
}
}
然后把test类加入到依赖中,接着运行
ServiceCollection service = new ServiceCollection();
service.AddLogging(t =>
{
t.AddConsole();//添加log日志输出
t.SetMinimumLevel(LogLevel.Trace);//设置最高显示的日志级别
});
service.AddScoped<Test>();
using (var sp = service.BuildServiceProvider())
{
var testq = sp.GetRequiredService<Test>();
testq.qqq();
}
Console.ReadKey();
这时我们可以看到控制台已经打印了我们的日志
此时已经完成基本的控制台输日志
windows的事件查看器
首先需要下载nuget包
然后添加到依赖运行即可
t.AddEventLog();//把日志输入到windows的事件管理器,只支持windows系统 需要下载nuget Microsoft.Extensions.Logging.EventLog
这时候我们打开事件查看器可以看到已经打印出来了
Nlog
以上只能满足控制台的日志输出,,而且事件管理器linux是没有的。无法满足项目中日志文件的需求,这时候我们就需要用到nlog进行一些复杂的日志输出
首先老样子,先把nlog的nuget包下载下来
nlog是需要配置config文件的,
首先我们去nlog官网复制他的config文件
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-6
然后本地项目创建一个nlog.config文件,将代码复制进去
<?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:\temp\internal-nlog-AspNetCore.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!--xsi:type代表的文件类型
fileName=输出到的地址
name=日志名称
layout=文件的输出格式
archiveAboveSize 表示日志文件最大为多少字节 超过就存档就是重新创建一个
maxArchiveFiles 表示最多保存多少个文件
maxArchiveDays 日志保存多少天-->
<target xsi:type="File" name="allfile" fileName="logs/log-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}" archiveAboveSize="1000" maxArchiveFiles="3"/>
<!-- File Target for own log messages with extra web details using some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="nlog-AspNetCore-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
<!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection -->
<target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--日志进来之后是按顺序从上往下匹配
writeTo是代表输出到哪个日志 比如 writeTo="allfile"就是把日志输出到name值等于allfile的日志
final="true"表示日志如同通过就不继续往下匹配了 如果没通过在继续往下匹配
minlevel=最小显示的日志级别
maxlevel表示最大级别的日志
name表示名称 有多种发写法 比如 abc.*表示abc开头的日志都输出-->
<logger name="*" minlevel="Info" writeTo="allfile" />
<!--Output hosting lifetime messages to console target for faster startup detection -->
<logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true" />
<!--Skip non-critical Microsoft logs and so log only own logs (BlackHole) -->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<logger name="System.Net.Http.*" maxlevel="Info" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
我已对文件进行调整方便展示效果,过多就不细说了,具体属性意思可看注释,多的可以去nlog官网看文档
创建的nlog.config文件要设置成较新则复制
接着我们循环10000次执行日志输出任务并且把不需要的包注释掉
//t.AddConsole();//添加log日志输出
//t.AddEventLog();//把日志输入到windows的事件管理器,只支持windows系统 需要下载nuget Microsoft.Extensions.Logging.EventLog
using (var sp = service.BuildServiceProvider())
{
var testq = sp.GetRequiredService<Test>();
for (int i = 0; i < 10000; i++)
{
testq.qqq();
}
}
这时候就自动创建文本日志了,我设置放在bin文件的根目录下了,大家可去自己设置的路径下查看
更多推荐
所有评论(0)