zoukankan      html  css  js  c++  java
  • ASP.NET Core中使用NLog记录日志

    1:添加Nlog的组件

    直接在NuGet里面搜索NLog.Web.AspNetCore

    2:然后就是配置服务

    public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            //public static IHostBuilder CreateHostBuilder(string[] args) =>
            //   Host.CreateDefaultBuilder(args)
            //       .ConfigureWebHostDefaults(webBuilder =>
            //       {
            //           webBuilder.UseStartup<Startup>();
            //           webBuilder.UseNLog();
            //       });
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    }).UseNLog();
            //鼠标放在UseNLog() 会显示是IHostBuilder的拓展方法IHostBuilder.UseNlog()
        }

    3:配置文件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"
          throwConfigExceptions="true"
          internalLogLevel="info"
          internalLogFile="E:loginternal-nlog.txt">
      <!--autoReload:修改后自动加载,可能会有延迟-->
      <!--throwConfigExceptions:NLog日志系统抛出异常-->
      <!--internalLogLevel:内部日志的级别-->
      <!--internalLogFile:内部日志保存路径,日志的内容大概就是NLog的版本信息,配置文件的地址等等-->
      <!--输出日志的配置,用于rules读取-->
      <targets>
        <!--write logs to file-->
        <!--将日志写入文件中,fileName可以指定日志生成的路径-->
        <target xsi:type="File" name="allfile" fileName="D:Log
    log-all-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
         <!--同样是将文件写入日志中,写入的内容有所差别,差别在layout属性中体现。写入日志的数量有差别,差别在路由逻辑中体现-->
        <target xsi:type="File" name="ownFile-web" fileName="D:Log
    log-my-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
        <target xsi:type="Null" name="blackhole" />
      </targets>
      <rules>
        <!--路由顺序会对日志打印产生影响。路由匹配逻辑为顺序匹配。-->
        <!--All logs, including from Microsoft-->
        <logger name="*" minlevel="Trace" writeTo="allfile" />
    
        <!--Skip Microsoft logs and so log only own logs-->
        <!--以Microsoft打头的日志将进入此路由,由于此路由没有writeTo属性,所有会被忽略-->
        <!--且此路由设置了final,所以当此路由被匹配到时。不会再匹配此路由下面的路由。未匹配到此路由时才会继续匹配下一个路由-->
        <logger name="Microsoft.*" minlevel="Trace"  final="true" />
        <!--上方已经过滤了所有Microsoft.*的日志,所以此处的日志只会打印除Microsoft.*外的日志-->
        <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
      </rules>
    </nlog>

    4:记录输出

    [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
                "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            private readonly ILogger<WeatherForecastController> _logger;
            private readonly IConfiguration Configuration;
    
            public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
            {
                _logger = logger;
                Configuration = configuration;
            }
    
            [HttpGet]
            public IEnumerable<WeatherForecast> Get()
            {
                _logger.LogError("这是错误信息");
                _logger.LogDebug("这是调试信息");
                _logger.LogInformation("这是提示信息");
                
                try
                {
                    throw new Exception("BOBOBOBOBBBBBBBBBBexection");
                }
                catch (Exception ex)
                {
                    _logger.LogInformation("这是提示信息"+ ex.Message);
                   
                }
                var rng = new Random();
                return Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateTime.Now.AddDays(index),
                    TemperatureC = rng.Next(-20, 55),
                    Summary = Summaries[rng.Next(Summaries.Length)]
                })
                .ToArray();
            }
        }

    5:效果

     //////////////////////////

    在第二步里,我们是将组件配置在Program.Main函数下,我只在配置Autofc的时候是在Main下配置的

    一般这种服务应该在ConfigureServices里去注入,我想了几个方法还是不行,但是在Configure()方法下却行了,

    但是显示过期的方法了

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
                loggerFactory.AddNLog();
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
    人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/14703489.html
Copyright © 2011-2022 走看看