<?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="Info"
internalLogFile="c:\temp\internal-nlog-AspNetCore.txt"><!-- enable asp.net core layout renderers --><extensions><add assembly="NLog.Web.AspNetCore"/></extensions><!-- the targets to write to --><targets><!-- File Target for all log messages with basic details --><target xsi:type="File" name="allfile" fileName="c:\temp\nlog-AspNetCore-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}"/><!-- File Target for own log messages with extra web details using some ASP.NET core renderers --><target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-AspNetCore-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}"/><!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection --><target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}"/><target name="database"xsi:type="Database"><connectionString>server=xxxx;Database=xx;user id=sa;password=xxxx</connectionString><!--
Script for creating the dbo.Log table.SETANSI_NULLSONSETQUOTED_IDENTIFIERONCREATETABLE[dbo].[Log]([Id][int]IDENTITY(1,1)NOTNULL,[MachineName][nvarchar](50)NOTNULL,[Logged][datetime]NOTNULL,[Level][nvarchar](50)NOTNULL,[Message][nvarchar](max)NOTNULL,[Logger][nvarchar](250)NULL,[Callsite][nvarchar](max)NULL,[Exception][nvarchar](max)NULL,CONSTRAINT[PK_dbo.Log]PRIMARYKEYCLUSTERED([Id]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]--><commandText>
insert into dbo.Log(
MachineName, Logged, Level, Message,
Logger, Callsite, Exception
)values(
@MachineName, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception
);</commandText><parameter name="@MachineName" layout="${machinename}"/><parameter name="@Logged" layout="${date}"/><parameter name="@Level" layout="${level}"/><parameter name="@Message" layout="${message}"/><parameter name="@Logger" layout="${logger}"/><parameter name="@Callsite" layout="${callsite}"/><parameter name="@Exception" layout="${exception:tostring}"/></target></targets><!-- rules to map from logger name to target --><rules><!--All logs, including from Microsoft--><!--至少Info级别以上:写入数据库--><logger name="*" minlevel="Info" writeTo="database"/><!--Output hosting lifetime messages to console target for faster startup detection --><!--Skip non-critical Microsoft logs and so log only own logs(BlackHole)--><!--写入各个文件,看自己项目需求--><!--<logger name="*" minlevel="Trace" writeTo="allfile"/><logger name="Microsoft.Hosting.Lifetime" minlevel="Info" writeTo="lifetimeConsole, ownFile-web" final="true"/><logger name="Microsoft.*" maxlevel="Info" final="true"/><logger name="System.Net.Http.*" maxlevel="Info" final="true"/><logger name="*" minlevel="Trace" writeTo="ownFile-web"/>--></rules></nlog>
using NLog.Web;
using NLog;var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();//logger.Debug("init main");try{var builder = WebApplication.CreateBuilder(args);// Add services to the container.
builder.Services.AddControllers();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Logging.AddNLog("nlog.config");var app = builder.Build();// Configure the HTTP request pipeline.if(app.Environment.IsDevelopment()){
app.UseSwagger();
app.UseSwaggerUI();}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();}catch(Exception exception){// NLog: catch setup errors
logger.Error(exception,"Stopped program because of exception");throw;}finally{// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();}