一、增加引用
<PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.6.0" />
二、配置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" internalLogLevel="Warn" internalLogFile="Logs/internal-nlog.txt"> <!-- define various log targets --> <targets> <!-- 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"> <connectionString>${var:connectionString}</connectionString> <commandText> insert into syslog (levels,operatingtime,operatingaddress,userid,logger,requesturl,referrerurl,action,message,exception) values (@levels,@operatingtime,@operatingaddress,@userid,@logger,@requesturl,@referrerurl,@action,@message,@exception); </commandText> <parameter name="@levels" layout="${level}" /> <parameter name="@operatingTime" layout="${date}" /> <parameter name="@operatingaddress" layout="${aspnet-Request-IP}" /> <parameter name="@userid" layout="1" /> <parameter name="@logger" layout="${logger}" /> <parameter name="@requesturl" layout="${aspnet-request-url}" /> <parameter name="@referrerurl" layout="${aspnet-request}" /> <parameter name="@action" layout="${aspnet-mvc-action}" /> <parameter name="@message" layout="${message}" /> <parameter name="@exception" layout="${exception:tostring}" /> </target> </targets> <rules> <!--All logs, including from Microsoft--> <!--minlevel 改为Trace 跟踪全部 Error 只捕获异常--> <logger name="*" minlevel="Error" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> <logger name="*" minlevel="Trace" writeTo="database" /> </rules> </nlog>
三、在代码中加入Nlog
1、program.cs 中
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseNLog(); //加入nlog日志
2、Startup.cs 中
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//增加日志记录
//loggerFactory.AddNLog(); 这个已在program 中加过了,在这里写的话是无法获取 请求地址等信息的
//env.ConfigureNLog("nlog.config");
NLog.LogManager.LoadConfiguration("config/nlog.config").GetCurrentClassLogger();
NLog.LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("DefaultConnection");
3、要写入日志的 Controller 中
public class AccountController : Controller { private readonly ILogger<AccountController> _logger; private ApplicationConfiguration _config; private readonly SysUserService _service; public AccountController(SysUserService service, IOptions<ApplicationConfiguration> option, ILogger<AccountController> logger) { _logger = logger; _service = service;
}
在需要写的位置:
_logger.LogInformation("{userName} 登录系统。登录地址:{ip}", model.Account, "192.168.1.1");
完成。