Как настроить NLog для записи в Azure поток журнала службы приложений? - PullRequest
0 голосов
/ 03 апреля 2020

Я публикую приложение NET Core 2.2 в Azure Службе приложений. Я настроил службу приложения для сохранения журналов в Azure хранилище BLOB-объектов. Я пытаюсь переключиться на использование NLog, так как не смог увидеть области в этих журналах.

Я следовал руководству по Документация NLog ; добавил PackageReferences в .csproj, изменил Program.cs в соответствии с инструкциями и удалил вызов AddLogging в Startup.cs. Когда я отлаживаю свое приложение локально, я вижу, как NLog выводит то, что я ожидаю, в моем журнале отладки. Когда я публикую sh, поток журнала по-прежнему отображается так же, как раньше. Файлы журнала в моем хранилище больших двоичных объектов также, похоже, не отформатированы NLog.

Внутренний файл NLog не сообщает о каких-либо проблемах с моими целями. Я могу использовать удаленную отладку и вижу, что NLog пишет для отладки.

Отрывок моего csproj

  <ItemGroup>
    <None Include="NLog.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
  </ItemGroup>

Мой 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="Info"
      internalLogFile="./internal-nlog.txt"
      internalLogToConsole="true"
      internalLogToConsoleError="true"
      internalLogToTrace="true"
      internalLogIncludeTimestamp="true"
      throwExceptions="true"
      throwConfigExceptions="true">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore" />
  </extensions>
  <time type="FastLocal" />
  <!-- the targets to write to -->
  <targets>
    <!-- 2020-04-02 20:00:12.062 +00:00 [Trace] Hangfire.Server.ServerJobCancellationWatcher: No newly aborted jobs found. -->
    <target xsi:type="Console"
            name="ConsoleTarget"
            layout="> ${longdate:universalTime=true} [${level}] ${logger}.${callsite:className=false}:${when:when=length('${ndlc}')>0:inner= [${ndlc}]} ${message} ${exception:format=tostring}"
            encoding="utf-8"
            error="false"
            detectConsoleAvailable="true" />

    <target xsi:type="File"
            name="allfile"
            fileName=".\nlog-all-${shortdate}.log"
            layout="${longdate:universalTime=true} [${level}] ${logger}.${callsite:className=false}:${when:when=length('${ndlc}')>0:inner= [${ndlc}]} ${message} ${exception:format=tostring}" />

    <!-- For Azure Log Stream -->
    <target xsi:type="Trace"
            name="azureLogStream"
            rawWrite="true"
            layout="X ${longdate:universalTime=true} [${level}] ${logger}.${callsite:className=false}:${when:when=length('${ndlc}')>0:inner= [${ndlc}]} ${message} ${exception:format=tostring}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <logger name="Microsoft.EntityFrameworkCore.*"
            level="Information"
            final="true" />
    <logger name="Microsoft.*"
            maxlevel="Information"
            final="true" />
    <logger name="Hangfire.*"
            minlevel="Trace"
            final="true" />

    <!-- BlackHole without writeTo -->
    <logger name="*"
            minlevel="Trace"
            writeTo="azureLogStream,allfile" />

    <logger name="*"
            minlevel="Trace"
            writeTo="ConsoleTarget" />
  </rules>
</nlog>

У меня есть настроил NLog также на запись в файл, и он работает.

Из потоковых журналов

2020-04-03 17:31:13.241 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting HTTP/1.1 GET http://**BEEP**/
2020-04-03 17:31:13.242 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request finished in 6.3456ms 404

Из файла журнала, созданного NLog

2020-04-03 16:02:59.9714 [Info] Namespace.Class.McWritey: [RequestId:800022a7-0000-e300-b63f-84710c7967bb RequestPath:/signalr/notifications TransportConnectionId:-qK6yuSdbcbr5PDDXJ-EBQ [Id: `ac5c3f80-456a-48b5-9122-6836f911e141`]] CloseFile File Closed by -qK6yuSdbcbr5PDDXJ-EBQ
2020-04-03 16:03:00.5218 [Info] Namespace.Class.McWritey: [RequestId:800022a7-0000-e300-b63f-84710c7967bb RequestPath:/signalr/notifications TransportConnectionId:-qK6yuSdbcbr5PDDXJ-EBQ] OnDisconnectedAsync Client Disconnected: -qK6yuSdbcbr5PDDXJ-EBQ

Из журнал отладки при подключении VS к опубликованному приложению

X 2020-04-03 17:39:19.1176 [Info] Namespace.Class.McWritey: [RequestId:8000161a-0000-f400-b63f-84710c7967bb RequestPath:/signalr/notifications TransportConnectionId:7ML3GmVzsm7mHPBl0sB-GA] OnConnectedAsync Client Connected: 7ML3GmVzsm7mHPBl0sB-GA 
...