zoukankan      html  css  js  c++  java
  • Core 2.0使用Nlog记录日志+Mysql

    一、先创建一个Core2.0的项目,并在NuGet中引入3个类库文件

    MySql.Data.dll
    NLog.dll
    NLog.Web.AspNetCore.dll

    二、创建一个nlog.config文件。这个文件的属性中的 “复制到输出目录”改为:始终复制

    <?xml version="1.0" ?>
    <nlog autoReload="true" internalLogFile="file.txt"> 如果日志写入失败,会把错误写入此文件
      <targets>
        <target type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"  
    name="database" connectionstring="Data Source=XXXXXXXXX;initial catalog=log;user id=XXXXX;password=XXXXX;SslMode=none"> <commandText> INSERT INTO logs(Date,Thread,Level,Logger,Message,domain,errortype) VALUES (@log_date, @thread, @log_level, @logger, @message,@domain,@errortype) </commandText> <parameter name="@log_date" layout="${event-context:item=log_date}" /> <parameter name="@thread" layout="${event-context:item=thread}" /> <parameter name="@log_level" layout="${event-context:item=log_level}" /> <parameter name="@logger" layout="${event-context:item=logger}" /> <parameter name="@message" layout="${event-context:item=message}" /> <parameter name="@domain" layout="${event-context:item=domain}" /> <parameter name="@errortype" layout="${event-context:item=errortype}" /> </target> </targets> <rules> <logger name="*" minlevel="Debug" appendTo="database" /> </rules> </nlog>

    nlog.config文件说明:

    <targets />声明目标

    <rules />声明规则

    (1)路由规则详情(rules):

    <rules />区域定义了日志的路由规则。每一个路由表项就是一个<logger />元素。<logger />有以下属性:
    
    name - 日志源/记录者的名字 (允许使用通配符*)
    minlevel - 该规则所匹配日志范围的最低级别
    maxlevel - 该规则所匹配日志范围的最高级别
    level - 该规则所匹配的单一日志级别
    levels - 该规则所匹配的一系列日志级别,由逗号分隔。
    writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
    final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。
    如:
    1、名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。
    <logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" />
    2、名字空间Name.Space下的Class1这个类的所有级别等于Debug或Error的日志信息都写入到“f1”这个目标里。
    <logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" /> 
    3、名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”和“f4”这两个目标里。
     <logger name="Name.Space.*" writeTo="f3,f4" /> 
    4、 名字空间Name.Space下所有类的、级别在Debug和Error之间的(包括Debug,Info,Warn,Error) 日志信息都不会被记录(因为这条规则没有定义writeTo),
    同时其它后续规则也都会被忽略(因为这里设置了final="true")。
     <logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" /> 

     (2)自动再配置:

           听起来确实挺不好理解的。但是确实也没什么。换句简单的话来说,当我们一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。直接上代码:

    <nlog autoReload="true">
       ...
    </nlog>

    (3)日志排错

    <nlog throwExceptions="true" />    
    <nlog internalLogFile="file.txt" />- 设置internalLogFile属性可以让NLog把内部的调试和异常信息都写入指定文件里。
    <nlog internalLogLevel="Trace|Debug|Info|Warn|Error|Fatal" /> - 决定内部日志的级别,级别越高,输出的日志信息越简洁。
    <nlog internalLogToConsole="false|true" /> - 是否把内部日志输出到标准控制台。
    <nlog internalLogToConsoleError="false|true" /> - 是否把内部日志输出到标准错误控制台 (stderr)。
     设置throwExceptions属性为“true”可以让NLog不再阻挡这类异常,而是把它们抛给调用者。在部署是这样做可以帮我们快速定位问题。一旦应用程序已经正确配置了,
    我们建议把throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃

    (4)异步处理,使其具备异步处理能力

    <nlog>
      <targets async="true">
        <!-- all targets in this section will automatically be asynchronous -->
      </targets>
    </nlog>

    三、修改Startup文件,添加 ILoggerFactory loggerFactory

        public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
            {
    //新天加的日志配置 loggerFactory.AddNLog(); env.ConfigureNLog(
    "nlog.config");

    if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }

    修改program文件,添加配置UseNlog()

    四、开始添加内容

      static NLog.ILogger logger = NLog.LogManager.GetCurrentClassLogger();
    
            public IActionResult Index()
            {
                LogEventInfo log = new LogEventInfo();
                log.Properties["log_level"] = "9";
                log.Properties["log_date"] = DateTime.Now;
                log.Properties["thread"] = 7;
                log.Properties["logger"] = "big";
                log.Properties["domain"] = "www.xiaoyaodijun.com";
                log.Properties["message"] = "时光悠悠,碧水长流";
                log.Properties["errortype"] = "core .server";
                logger.Debug(log);
    
                return View();
            }

    五、可以直接在数据库看结果了

     

    配置参考来源:https://www.cnblogs.com/fuchongjundream/p/3936431.html

  • 相关阅读:
    Authentication for the REST APIs
    Authentication for the REST APIs
    泛型转Datatable
    Web API 返回json文件的2中不用方式
    Robotframework自定义关键字库
    python通过接口上传图片造测试数据
    robot framework(2) 环境搭建
    RobotFrameWork(1) 关键字驱动测试框架
    python发送带附件的邮件
    解决adb连接海马玩模拟器
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/9290200.html
Copyright © 2011-2022 走看看