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