gpt4 book ai didi

c# - 如何配置 NLog 以写入 Azure 应用服务的日志流?

转载 作者:行者123 更新时间:2023-12-05 05:04:34 26 4
gpt4 key购买 nike

我正在将 .NET Core 2.2 应用发布到 Azure 应用服务。我已将应用服务配置为将日志保存到 Azure 存储 blob。我正在尝试切换到使用 NLog,因为我无法在这些日志中看到范围。

我已经按照 NLog's documentation 上的指南进行操作;在 .csproj 中添加了 PackageReferences,按照说明更改了 Program.cs,并在 Startup.cs 中删除了对 AddLogging 的调用。当我在本地调试我的应用程序时,我可以看到 NLog 在我的调试日志中输出我期望的内容。当我发布时,日志流仍然像以前一样显示。我的 blob 存储中的日志文件似乎也没有被 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 

最佳答案

是的,看起来像 ASP.NET Core,然后 System.Diagnostics.Trace 不会重定向到应用程序诊断日志。它仅适用于经典的 ASP.NET。

您可以 activate log stream from log-files , 因此它将监视存储在 HOME 文件夹中的任何以 .txt 或 .log 结尾的文件。然后你可以使用一个文件目标:

<?xml version="1.0" encoding="utf-8"?>
<nlog>
<targets async="true">
<target name="logfile" xsi:type="File" filename="${environment:HOME:cached=true}/logfiles/application/app-${shortdate}-${processid}.txt" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>

另请参阅:https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-cloud-logging-with-Azure-function-or-AWS-lambda#writing-to-azure-diagnostics-log-stream

关于c# - 如何配置 NLog 以写入 Azure 应用服务的日志流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com