nlog日志很好,参考了网上很多系列文章,然后集成了自己认为满意的nlog.config
nlog节点:
autoReload:自动加载修改的配置文件
internalLogLevel:nlog日志输出日志级别
internalLogFile:nlog本身日志生成存储路径
extensions节点:新增程序引用集,这里使用aspnetcore
<add assembly="NLog.Web.AspNetCore"/>
variable :nlog变量声明,声明之后可以在其他地方节点使用,使用方式如下:
<variable name="productName" value="mytest" /> --声明一个产品名称
<variable name="logDirectory" value="c:\nlog\${productName}\${shortdate}"/> --日志输出文件夹C盘下
${basedir}:指定文件输出到系统部署根目录下
rules->logger:
name:日志输出格式是否过滤,"*":所有,"mircrosoft.*":mircrosoft开头的过滤输出;
level:指定文件输出日志级别,"Error"只输出错误的日志
levels:可以指定多个输出,多个用','分割;
writeto:指定的rules写入到targets->target几点下的"name"对应;
targets->target:定义输出的xsi:type的类型输出,和指定相关配置信息;具体的可以参考:
很多配置参考信息:https://github.com/jkowalski/NLog
Nlog官网:https://github.com/NLog/NLog/
完成了nlog.config的配置,程序代码就可以在aspnetcore中使用了;
1.web工程需要引入"NLog.Web.AspNetCore"的dll,引入这个可以附带它自身引用的相关dll;
2.Startup.cs配置" Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)"的方法.
#region NLog配置
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
loggerFactory.AddNLog();
env.ConfigureNLog(@"XmlConfig\nlog.config");
#endregion
3.nlog.config配置文件必须在部署目录的根节点下面存在,不然会找不到nlog.config配置信息异常;
4.完成配置工作可以使用了.
--1.使用nlog本身的日志方法进行输出:
var _logger = NLog.LogManager.LogFactory.GetCurrentClassLogger();
_ogger.Error("输出一条错误信息成功!");
--2.使用"Microsoft.Extensions.Logging"方法输出,nlog本身实现了Microsoft.Extensions.Logging的扩张接口,所以也可以使用"Microsoft.Extensions.Logging"中的方法进行日志输出.使用该dll中的方法可以使用依赖注入的方式进行调用:
private readonly ILogger<DemoController> _logger;
public DemoController(ILogger<DemoController>)
{
_logger = logger;
}
_logger.LogError("error 错误,我是使用Microsoft.Extensions.Logging");
基本上在aspnetcore上使用nlog日志就是这么的,也可以写入DB,tcp,nosql等其他的介质中,具体的可以参考
网站:https://github.com/jkowalski/NLog,这里有很多的实例配置方式;
下面的配置是输出到本地文件中的完整配置,
在使用中遇到个问题,就是layout配置中的"${exception:format=tostring}"这个异常指定了输出不输出详细的异常信息,
只输出我自己的描述message信息,throw出的异常确获取不到的.不知道怎么回事,它本身方法有传Excepiton的.看例1:
例1:
2019-04-09 12:35:20.7370 ERROR|DEMO-YF16PC 0
[Logger]:Dolphin.Web.Controllers.DemoController
[CallSite]:Demo.Web.Controllers.DemoController.Index(E:\src\Presentation\Demo.Web.Admin\Controllers\DemoController.cs:46)
[StackTrace]:ObjectMethodExecutor.Execute => <no type>.lambda_method => DemoController.Index
[Message]:error 错误
代码中是这么写的:
try
{
_userInfoServices = EngineContext.Current.Resolve<IUserInfoServices>();
throw new Exception("我是输出异常信息");
}
catch (Exception ex)
{
_logger.LogError("error 错误", ex);
}
--输出本地文件完整配置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"
keepVariablesOnReload="true"
throwConfigExceptions="false"
internalLogLevel="info"
internalLogFile="c:\nlog\internal-nlog.log"
>
<!-- Load the ASP.NET Core plugin -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!--设置配置变量的值-->
<variable name="productName" value="mytest" />
<variable name="logDirectory" value="c:\nlog\${productName}\${shortdate}"/>
<!--定义日志目标/输出-->
<targets>
<!--屏幕打印消息-->
<target name="console" xsi:type="ColoredConsole" layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${message} ${callsite} ${exception}" />
<!--VS输出窗口-->
<target name="debugger" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss.fff}: ${level} ${message}" />
<!-- 输出单个"Error"文件信息 -->
<target name="fileerror" xsi:type="File"
fileName="${logDirectory}\${date:format=yyyyMMdd}_${level}.log"
archiveFileName="${logDirectory}\${date:format=yyyyMMdd}_${level}.{#}.log"
archiveNumbering="Sequence" concurrentWrites="true"
archiveAboveSize="52428800"
keepFileOpen="false" autoFlush="true"
openFileFlushTimeout="5" openFileCacheTimeout="30"
header="--------------------START----------------------"
footer="--------------------END------------------------"
layout="${longdate} ${level:uppercase=true}|${machinename}${newline}[Logger]:${logger}${newline}[CallSite]:${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}[StackTrace]:${exception:format=tostring}${stacktrace}${newline}[Message]:${message}${newline}" />
</targets>
<!--定义日志路由规则-->
<rules>
<!-- Log levels:Fatal,Error,Warn,Info,Debug,Trace -->
<logger name="*" minlevel="Info" level="Error" writeTo="fileerror" />
<!--<logger name="*" writeTo="debugger" />
<logger name="*" writeTo="console" />
<logger name="*" minlevel="Info" levels="Fatal,Error,Warn,Info,Debug,Trace" writeTo="logfile" />-->
</rules>
</nlog>