我有一个已部署到Azure的Web应用程序。我正在使用NLog进行错误记录,并且一直在努力让Trace和日志记录功能在Azure中运行。
这是问题所在: 我启用了文件日志记录和电子邮件警报,这在我本地部署的IIS实例中运行良好。我也在NLog配置中启用了跟踪日志记录,这也是有效的(我可以看到在视频工作室的“输出”窗口中触发跟踪消息,而网站在本地处理请求)。如果我编写显式的Diagnostics.Trace调用,它也会出现在“输出”窗口中。
当我将代码部署到Azure并调用我的方法时,会出现问题。我已经在诊断部分启用了应用程序日志记录,并且还检查了日志流但是没有获取Nlog跟踪语句(但是直接的跟踪语句确实有效!)...看起来文件记录也没有也可以在Azure中工作(尽管这可能是文件夹权限)。我想知道这是我的配置转换还是别的什么?!
这让我发疯,我无法弄清楚出了什么问题。
NLog Config(在Web.Config中):
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">
<targets>
<target xsi:type="Trace" name="ETWTrace" layout="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message} Exception: ${exception:format=tostring}" />
<target name="logfile" xsi:type="File" fileName="${basedir}/App_Data/Logs/Api-${date:universalTime=true:format=yyyy-MM-dd}.txt" layout="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message} Exception: ${exception:format=tostring}" encoding="UTF-8" />
<target name="Mail" xsi:type="Mail" html="true" subject="[xDebug] Fatal Error" body="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message}" to="x@x.com" from="x@x.com" encoding="UTF-8" smtpUserName="xxxxx" enableSsl="True" smtpPassword="xxxxx" smtpAuthentication="Basic" smtpServer="smtp.sendgrid.net" smtpPort="587" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile,ETWTrace" />
<logger name="*" minlevel="Fatal" writeTo="Mail" />
</rules>
Web.Release.Config:
<nlog xdt:Transform="Replace"
xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">
<targets>
<target xsi:type="Trace" name="ETWTrace" layout="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message} Exception: ${exception:format=tostring}" />
<target name="logfile" xsi:type="File" fileName="${basedir}/App_Data/Logs/Api-${date:universalTime=true:format=yyyy-MM-dd}.txt" layout="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message} Exception: ${exception:format=tostring}" encoding="UTF-8" />
<target name="Mail" smtpDeliveryMethod="network" xsi:type="Mail" html="true" subject="[xDev] Fatal Error" body="[${longdate:universalTime=true} ${processid}:${threadid}] ${level:uppercase=true}: ${message}" to="x@xx.com" from="xx@xx.com" Encoding="UTF-8" smtpUsername="xxxx" enableSsl="True" smtpPassword="xxx" smtpAuthentication="Basic" smtpServer="smtp.sendgrid.net" smtpPort="587" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="logfile,ETWTrace" />
<logger name="*" minlevel="Fatal" writeTo="Mail" />
</rules>
</nlog>
我认为我的配置转换可能出现了问题,但是我从服务器上下载了web.config并且它看起来很好所以也许是其他潜在的东西会导致nlog调用失败?