не может войти в базу данных, используя «NLog». Я пробовал коды ниже.
Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().ConfigureLogging(logging =>
{
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
logging.ClearProviders();
logging.AddNLog(string.Equals(env, "Production") ?
"nlog.config" : "nlog.development.config");
});
});
nlog.development.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="Info"
internalLogFile="c:\temp\internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
<target name="database" xsi:type="Database">
<connectionString>Server=(localdb)\\MSSQLLocalDB; Database=MyDB; integrated security=true;</connectionString>
<commandText>
insert into dbo.Log (
MachineName, Logged, Level, Message,
Logger, Callsite, Exception, ModuleType, EffectedUserId, EffectedUser,
LoggerDetail
) values (
@MachineName, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception, @ModuleType, @EffectedUserId, @EffectedUser,
@LoggerDetail
);
</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}" />
<parameter name="@ModuleType" layout="${event-properties:moduleType}" />
<parameter name="@EffectedUserId" layout="${event-properties:effectedUserId}" />
<parameter name="@EffectedUser" layout="${event-properties:effectedUser}" />
<parameter name="@LoggerDetail" layout="${event-properties:loggerDetail}" />
</target>
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Error" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Error" final="true" /> <!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
<logger name="*" minlevel="Error" writeTo="database" />
</rules>
</nlog>
Способ, которым я пытался войти,
var logEvent = new LogEventInfo(NLog.LogLevel.Error, loggerName, context.Exception.Message);
logEvent.Properties["effectedUserId"] = userId;
logEvent.Properties["effectedUser"] = userName;
logEvent.Properties["moduleType"] = moduleType;
logEvent.Properties["loggerDetail"] = serialized;
logger.Log(logEvent);
Я не знаю, что я сделал не так, на самом деле я искал основную документацию NLog. net, чтобы узнать, как войти в базу данных. Я действительно застрял в этом ... Пожалуйста, помогите. Спасибо за ваше время!