NLog.Web.AspNetCore больше не входит в базу данных - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть API-интерфейс ядра dotnet, работающий на версии 2.2 с NLog.Web.AspNetCore 4.7.0 (NLog 4.5.11), который ранее работал в версии 4.5.4.С обновлением теперь не похоже на вход в базу данных.Ничего с точки зрения инфраструктуры логирования не изменилось в моем коде.

Я должен упомянуть, у меня также есть в журнале эта прекрасная строка, так что я знаю, что она несколько работает.Но я использую, чтобы получить ОЧЕНЬ больше информации, и, конечно же, в базу данных тоже будут записаны вещи.

2018-12-26 15:06:59.9503||DEBUG|SomeApp.API.Program|init main |url: |action: 

Я пытался осмотреться в вопросах github и здесь, но у меня нетНе нашлось ничего полезного, любая помощь очень ценится!

Начальная настройка в Program.cs

var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
    logger.Debug("init main");
}
catch (Exception ex)
{
    //NLog: catch setup errors
    logger.Error(ex, "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();
}

Реализация

public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseIISIntegration()
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                })
                .UseNLog()  // NLog: setup NLog for Dependency injection
                .Build();

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="Trace"
  internalLogFile="C:\temp\internal-nlog.txt">

 <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
 </extensions>

 <targets async="true">

 <target type="File" name="file" fileName="${basedir}\logs\logfile.txt"
  maxArchiveFiles="5" archiveAboveSize="20971520" archiveEvery="Day"
  layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

<target xsi:type="Null" name="blackhole" />

<target name="database" xsi:type="Database">


  <connectionString>${gdc:item=connectionString}</connectionString>

  <commandText>
    insert into dbo.Log (
      EventId, Logged, Level, Message,
      Username,
      ServerName, Port, Url, Https,
      ServerAddress, RemoteAddress,
      Logger, CallSite, Exception
    ) values (
      @EventId, @Logged, @Level, @Message,
      @Username,
      @ServerName, @Port, @Url, @Https,
      @ServerAddress, @RemoteAddress,
      @Logger, @Callsite, @Exception
    );
  </commandText>

  <parameter name="@EventId" layout="${event-properties:item=EventId_Id}" />
  <parameter name="@logged" layout="${date}" />
  <parameter name="@level" layout="${level}" />
  <parameter name="@message" layout="${message}" />

  <parameter name="@username" layout="${aspnet-user-identity}" />

  <parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
  <parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
  <parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
  <parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />

  <parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
  <parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />

  <parameter name="@logger" layout="${logger}" />
  <parameter name="@callSite" layout="${callsite}" />
  <parameter name="@exception" layout="${exception:tostring}" />
</target>

</targets>

<rules>
<!--Limit to only configured logs for all logs, change name="*"-->
<logger name="SomeApp.*" minlevel="Info" writeTo="database" />
<logger name="*" minlevel="Trace" writeTo="file" />
<!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
</rules>
</nlog>

Пример кода ведения журнала

_logger.LogInformation(1001, "Login success: {0}", userForLoginDto.Username);

appsettings.json & appsettings.Development.json Настройки ведения журнала

  "Logging": {
"LogLevel": {
  "Default": "Trace",
  "Microsoft": "Information"
}

Кажется, что внутренний журнал NLog не имеет никакого значенияЯ могу предоставить его по запросу.

Извиняюсь за любые странные проблемы с форматированием, файл nlog.config не хотел приходить охотно.

...