#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.