nlog core集成项目输出本地文件

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值