NLog记录日志到数据库

1.安装Nlog

2.修改配置文件

<?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"
      throwExceptions="true"
      internalLogLevel="Off">
  <variable name="myvar" value="myvalue"/>
  <targets>
    <!--<target xsi:type="Null" name="blackhole" />-->
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="logs/${date:format=yyyyMM}/nlog-all-${shortdate}.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger} ${newline}${message} ${exception} ${newline}" />

    <target xsi:type="File" name="ownFile-web" fileName="logs/${date:format=yyyyMM}/nlog-own-${shortdate}.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger} ${newline}${message} ${exception} ${newline} --- |url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

    <target xsi:type="Null" name="blackhole" />
    <target xsi:type="Database" name="database" dbProvider="MySql.Data.MySqlClient.MySqlConnection,Mysql.Data">
        <connectionString>${var:connectionString}</connectionString>
      <commandText>
        insert into sys_log (
        Guid,Application, Logged, Level, Message,
        Logger, CallSite, Exception,IP,User,UserName,Browser
        ) values (
        @guid,@Application, @Logged, @Level, @Message,
        @Logger, @Callsite, @Exception, @IP,@User,@UserName,@Browser
        );
      </commandText>
      <parameter name="@guid" layout="${guid}" />
      <parameter name="@Application" layout="FytSoa" />
      <parameter name="@logged" layout="${date}" />
      <parameter name="@level" layout="${level}" />
      <parameter name="@message" layout="${message}" />
      <parameter name="@logger" layout="${event-context:item=Logger}" />
      <parameter name="@callSite" layout="${aspnet-Request-Url}" />
      <parameter name="@exception" layout="${exception:tostring}" />
      <parameter name="@IP" layout="${aspnet-request-ip}" />
      <parameter name="@User" layout="${aspnet-user-identity}" />
      <parameter name="@UserName" layout="${event-context:item=UserName}" />
      <parameter name="@Browser" layout="${aspnet-request-useragent}" />
    </target>

  </targets>

  <rules>
    <logger name="*" minlevel="Error" writeTo="allfile" />
    <!--Skip Microsoft logs and so log only own logs-->
    <!-- add your logging rules here -->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <!--这里全部使用最高等级Trace,即可以记录所有类型日志。可以根据需要降低等级,如使用Info,则仅记录Info及以上的日志,Trace、Debug日志不记录-->
    <logger name="*" minlevel="Trace" writeTo="database" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>

3.Program中添加UseNlog()

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseNLog()
                .Build();

4.Startup.cs中的Configure中设置数据库连接

            #region Nlog记日志
            //将日志记录到数据库
            NLog.LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
            NLog.LogManager.Configuration.Variables["connectionString"] = Configuration["DBConnection:MySqlConnectionString"];
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);  //避免日志中的中文输出乱码
            #endregion

 

 

要将 NLog 日志记录数据库中,可以使用 NLog.Targets.Database 扩展包。下面是一个简单的 NLog 配置文件示例,用于将日志记录到 SQL Server 数据库中: ```xml <?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"> <extensions> <add assembly="NLog.Targets.Database" /> </extensions> <targets> <target xsi:type="Database" name="database" dbProvider="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=TestDB;Integrated Security=True" commandText="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@time_stamp, @level, @logger, @message)"> <parameter name="@time_stamp" layout="${date}" /> <parameter name="@level" layout="${level}" /> <parameter name="@logger" layout="${logger}" /> <parameter name="@message" layout="${message}" /> </target> </targets> <rules> <logger name="*" minlevel="Info" writeTo="database" /> </rules> </nlog> ``` 在上面的配置文件中,我们首先需要添加 NLog.Targets.Database 扩展包: ```xml <extensions> <add assembly="NLog.Targets.Database" /> </extensions> ``` 然后,我们定义了一个名为 "database" 的目标,类型为 Database(xsi:type="Database"),使用的数据库提供程序为 System.Data.SqlClient,连接字符串为 Data Source=.;Initial Catalog=TestDB;Integrated Security=True,表示连接本地 SQL Server 数据库 TestDB。 接着,我们定义了 SQL 命令文本为 "INSERT INTO Log (Date, Level, Logger, Message) VALUES (@time_stamp, @level, @logger, @message)",并使用 <parameter> 元素定义了 4 个参数:@time_stamp、@level、@logger 和 @message,分别对应日期、日志级别、日志记录器名称和日志消息。 最后,我们定义了一个规则,匹配所有的日志记录器(name="*"),最低日志级别为 Info(minlevel="Info"),并将日志记录到 "database" 目标中(writeTo="database")。 需要注意的是,这个配置文件只适用于 SQL Server 数据库,如果要将日志记录到其他类型的数据库中,需要修改 dbProvider 和 connectionString 属性,并根据数据库类型修改 SQL 命令文本和参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值