zoukankan      html  css  js  c++  java
  • asp.net core NLog 配置

    NuGet 添加引用NLog.Config 和 NLog.Web.AspNetCore
    添加NLog.Config引用时会自动在项目根目录生成一个NLog.config文件,把文件属性设置成总是复制

    日志级别:Trace -> Debug-> Information -> Warning -> Error-> Critical


    修改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"
          xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
          autoReload="true"
          throwExceptions="false"
          internalLogLevel="Off" internalLogFile="c:	emp
    log-internal.log">
    
        <!-- optional, add some variables
      https://github.com/nlog/NLog/wiki/Configuration-file#variables
      -->
        <variable name="myvar" value="myvalue"/>
    
        <!--
      See https://github.com/nlog/nlog/wiki/Configuration-file
      for information on customizing logging rules and outputs.
       -->
        <targets>
    
            <!--
        add your targets here
        See https://github.com/nlog/NLog/wiki/Targets for possible targets.
        See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
        -->
    
            <!--
        Write events to a file with the date in the filename.
        <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
                layout="${longdate} ${uppercase:${level}} ${message}" />
        -->
            <!--Error保存至文件-->
            <target name="error_file" xsi:type="File" maxArchiveFiles="30"  encoding="utf-8"
                    fileName="${basedir}/Logs/${date:yyyyMMdd}_Error.log"
                    archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Error.{#}.log"
                    archiveDateFormat="yyyyMMdd"
                    archiveAboveSize="104857600"
                    archiveNumbering="Sequence"
                    layout="${date:yyyy-MM-dd HH:mm:ss} ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace}" />
            <!--Trace保存至文件-->
            <target name="trace_file" xsi:type="File" maxArchiveFiles="30" encoding="utf-8"
                    fileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.log"
                    archiveFileName="${basedir}/Logs/${date:yyyyMMdd}_Trace.{#}.log"
                    archiveDateFormat="yyyyMMdd"
                    archiveAboveSize="104857600"
                    archiveNumbering="Sequence"
                    layout="${date:yyyy-MM-dd HH:mm:ss} ${uppercase:${level}}: ${message}" />
        </targets>
    
        <rules>
            <!-- add your logging rules here -->
            <logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="trace_file" />
            <!--<logger name="*" minlevel="Debug" writeTo="debugger" />-->
            <logger name="*" minlevel="Error" writeTo="error_file" />
            <!--
        Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
        <logger name="*" minlevel="Debug" writeTo="f" />
        -->
        </rules>
    </nlog>

    在Program.cs文件中添加如下代码:

                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                }).UseNLog()

    添加后如下:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                }).UseNLog();

    注入和调用如下:

            private readonly ILogger<BusinessController> _logger;
    
            public BusinessController(ILogger<BusinessController> logger)
            {
                _logger = logger;
            }
    
            [HttpGet]
            public string Test()
            {
                var json = DateTime.Now.ToString();
    
                _logger.LogInformation(json);
                _logger.LogError(json);
                _logger.LogDebug(json);
                _logger.LogCritical(json);
                _logger.LogTrace(json);
                _logger.LogWarning(json);
    
                return json;
            }

    输出文件位置inDebug etcoreapp3.1,目录中会自建一个文件夹Logs

    inDebug
    etcoreapp3.1Logs

    全局异常,添加过滤器;并在Startup.cs文件的ConfigureServices方法中添加过滤器

    public class GlobalExceptionFilter: IExceptionFilter
        {
           public static Logger logger = LogManager.GetCurrentClassLogger();
    
            public void OnException(ExceptionContext filterContext)
            {
                logger.Error(filterContext.Exception);
                var result = new BaseResult()
                {
                    ResultCode = ResultCodeAddMsgKeys.CommonExceptionCode,//系统异常代码
                    ResultMsg = ResultCodeAddMsgKeys.CommonExceptionMsg,//系统异常信息
                };
                filterContext.Result = new ObjectResult(result);
                filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                filterContext.ExceptionHandled = true;
            }
        }

      xsi:type:将文件类型设置为File,将日志保存到文件中。

      fileName:将日志文件保存到"${logDir}/InfoLogs/log.txt"。

      archiveFileName:为了防止日志文件保存的太大,我们将日志文件拆分保存。通过archiveFileName参数设置保存格式,具体格式可以到这里查看。

      createDirs:若设置的日志文件夹不存在,则自动创建文件夹。

      keepFileOpen:为了提高文件写入性能,避免每次写入文件都开关文件,将keepFileOpen设置为true,我们通过openFileCacheTimeout参数定时关闭文件。

      autoFlush:为了提高日志写入性能,不必每次写入日志都直接写入到硬盘上,将autoFlush设置为false,我们通过openFileFlushTimeout参数定时写入文件。

      openFileCacheTimeout:将keepFileOpen参数设置为false,则设置定时关闭日志。防止日志一直开着占用着。

      openFileFlushTimeout:将autoFlush参数设置为false,则设置定时将日志从缓存写入到硬盘时间。

      archiveAboveSize:为了防止一个文件日志太大,我们需要根据指定大小将日志拆文件保存。archiveAboveSize参数的单位是字节。通过设置为10240=10KB,每个日志大小达到10KB就会自动拆分文件,拆分后的文件名规则通过archiveFileName设置,拆分文件名的规则通过archiveNumbering设置,具体规则可以查看这里。

      concurrentWrites:支持多个并发一起写文件,提高文件写入性能。

      encoding: Nlog默认保存的编码格式为Encoding.Default,中文保存到日志中会出现乱码,将其设置为utf-8,就可以正常保存了。

      

    参考

      Asp.Net Core基础NLog记录日志

      asp.net core 自定义认证方式--请求头认证

      示例项目

      Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

      ASP.NET Core 教程:NLog 的使用

  • 相关阅读:
    python2和python3的区别
    开发常用命令
    类中的内置方法
    while 循环
    sql执行效率,explain 查询执行效率
    jmeter 中的 HTTP URL Re-writing Modifier
    jmeter beanshell内容
    jmeter 和 ajax
    jdbc 与 each controller 对多条查询结果的处理
    jdbc与 Beanshell PostProcessor 对多条结果的处理
  • 原文地址:https://www.cnblogs.com/hofmann/p/14183132.html
Copyright © 2011-2022 走看看