NLog переименовать старый файл, изменив исходное имя файла

#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