сбой nlog на рабочем сервере

#c# #asp.net-core #file-permissions #nlog #error-logging

#c# #asp.net-core #файл-разрешения #nlog #регистрация ошибок

Вопрос:

Я настроил свой asp.Net Приложение Core 5 с Nlog для регистрации ошибок в живой среде. До недавнего времени он работал без сбоев, когда я понял, что хостинговая компания перенастроила разрешения для папок на сервере, отказав в разрешениях на запись некоторым папкам. Я начал замечать, что больше не могу загружать файлы в некоторые папки, которые у меня были в папке 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:tempinternal-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>
 

Я буду признателен за любое руководство по решению этой проблемы.

Спасибо

Комментарии:

1. проверьте, есть ли у вашего сервера доступ к базе данных журналов и соответствующему порту. может быть блокировка брандмауэра.

2. @MehrdadDowlatabadi база данных — это всего лишь один из вариантов ведения журнала. Я предусмотрел ведение журнала в файл, а также в электронную почту, и в настоящее время ни одна из них не работает, но все они работают, когда я обслуживаю приложение со своего локального компьютера в разработке. Более того, база данных доступна для приложения, хотя

3. Включите и проверьте внутренний журнал . Он должен выдать вам правильное сообщение об ошибке.

4. @Julian не могли бы вы, пожалуйста, дать мне руководство о том, как это сделать?

5. Это описано в ссылке. Если есть что-то неясное, пожалуйста, отправьте конкретный вопрос на GitHub.