首页 > 解决方案 > 生产服务器上的 nlog 失败

问题描述

我已经使用 Nlog 设置了我的 asp.Net Core 5 应用程序,用于在 LIVE 环境中记录错误。直到最近我才意识到托管公司重新配置了服务器上文件夹的权限,拒绝了某些文件夹的写入权限,它一直运行顺利。我开始注意到我不再能够将文件上传到应用程序中 www 文件夹下的某些文件夹。

当我引起他们的注意时,他们启用了对该文件夹的写访问权限,从那时起,我可以上传文件,但我也注意到大约在同一时间,我的错误记录停止工作。在本地,我的错误日志仍然有效,但不再在生产服务器上工作。

现在我想知道错误记录是否会受到写权限审查的影响,以及我如何能够进一步解决问题,并可能向技术支持团队提出一些合理的建议,以帮助更快地解决问题。

我的Nlog配置文件如下

<?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" />
  <add assembly="NLog.MailKit" />
  </extensions>

 <!-- the targets to write to -->
 <targets>
 <!-- write logs to file  -->
 <target xsi:type="File" name="alllogs" fileName="./logs/all-logs/${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="errorlogs" fileName="./logs/error-logs/${shortdate}.log"
        layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

<!-- Database Logging target -->
<target name="db" xsi:type="Database"
        dbHost="hosteserver"
        dbDatabase="databasename"
        dbUserName="username"
        dbPassword="password">
 
  <commandText>
    insert into dbo.ErrorLogs (
    Logtime, Level, Message, Exception,
    Logger
    ) values (
    @TimeLogged, @Level, @Message, @Exception,
    @Logger
    );
  </commandText>
  <parameter name="@TimeLogged" layout="${longdate}" />
  <parameter name="@Level" layout="${level}" />
  <parameter name="@Message" layout="${message}" />
  <parameter name="@Exception" layout="${exception:tostring}" />
  <parameter name="@Logger" layout="${logger}" />
</target>

<!-- my mailkit target for email notifications on error -->
<target xsi:type="Mail"
     name="ErrorMailLogTarget"        
     subject="Error Occurred on The Application Name"
     to="myname@myemail.com"
    
     from="email@mydomain.com"
     body="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}"
     smtpUserName="email@mydomain.com"
      smtpServer="mydomain.com"
      smtpPort="587"
     timeout="20000"         
     smtpPassword="email_password"
     smtpAuthentication="basic"
     skipCertificateValidation="true"
     priority="Urgent"
   />
 </targets>

 <!-- rules to map from logger name to target -->
 <rules>
  <!--All logs, including from Microsoft-->
  <logger name="*" minlevel="Trace" writeTo="alllogs" />

<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />

<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Error" writeTo="errorlogs" />

<!-- Error Mail notification log -->
<logger name="*" minlevel="Error" writeTo="ErrorMailLogTarget" />

<!-- Database Logging Provision -->
<logger name="*" minlevel="Error" writeTo="db" />
 </rules>
 </nlog>

我将不胜感激任何解决此问题的指南。

谢谢

标签: c#asp.net-corefile-permissionsnlogerror-logging

解决方案


推荐阅读