#c# #asp.net #.net #logging #nlog
#c# #asp.net #.net #ведение журнала #nlog
Вопрос:
Я работаю с Nlog в Asp.net рамочное приложение в локальной сети. У меня есть 10 разных клиентов, которые используют приложение. Моя цель — иметь разные файлы журнала, по одному для каждого клиента. Моя конфигурация Nlog:
<target name="LogFile"
xsi:type="File"
fileName="D:logs${var:idClient}.txt"
keepFileOpen="true"
archiveFileName="D:logsOld${var:idClient}_{#}.txt"
archiveDateFormat="yyyyMMdd"
archiveNumbering="Date"
archiveEvery="Day"
layout="${var:idClient}|${longdate}|${level:uppercase=true}|${callsite:fileName=false:includeSourcePath=false}|${message}"/>
</targets>
В глобальном .asax:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string idClient= string.Empty;
if (context.Session == null || context.Session["ClientId"] == null ||
string.IsNullOrEmpty(context.Session["ClientId"].ToString()))
idClient= "Client ID Default";
else
idClient= System.Web.HttpContext.Current.Session["ClientId"]?.ToString();
NLog.LogManager.Configuration.Variables["idClient"] = idClient;
}
Моя проблема в том, что старое имя файла не имеет того же идентификатора клиента, что и исходный файл журнала. Как я могу сохранить тот же идентификатор клиента и добавить только данные?
Спасибо.
Комментарии:
1. Привет, Люк, что такое «старое имя файла» и «исходный файл журнала»? Попробуйте лучше объяснить вашу проблему, возможно, на примере, чтобы помочь сообществу помочь вам
Ответ №1:
Переменные конфигурации NLog являются глобальными для всего приложения. Не стоит изменять их для каждого запроса, если вы не обещаете выполнять только один запрос одновременно.
Вместо этого рассмотрите возможность добавления NLog.Web-nuget-package в ваш проект и измените свой filetarget, чтобы использовать этот макет имени файла:
<extensions>
<add assembly="NLog.Web"/>
</extensions>
<targets>
<target name="LogFile" xsi:type="File"
fileName="D:logs${aspnet-session:ClientId:whenEmpty=DefaultClientId}.txt" />
</targets>
Смотрите также https://github.com/NLog/NLog/wiki/AspNetSession-layout-renderer