NLog 重命名旧文件更改原始文件名

NLog rename old file changing the original file name

我正在局域网环境中的 Asp.net 框架应用程序中使用 Nlog。 我有 10 个不同的客户使用该应用程序。我的目标是拥有不同的日志文件,每个客户端一个。我的 Nlog 配置是:

<target name="LogFile"
    xsi:type="File"
    fileName="D:\logs${var:idClient}.txt"
    keepFileOpen="true"
    archiveFileName="D:\logs\Old${var:idClient}_{#}.txt"
    archiveDateFormat="yyyyMMdd"
    archiveNumbering="Date"
    archiveEvery="Day"
    layout="${var:idClient}|${longdate}|${level:uppercase=true}|${callsite:fileName=false:includeSourcePath=false}|${message}"/>
</targets>

在Global.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;
}

我的问题是旧文件名与原始日志文件的客户端 ID 不同。如何保持相同的客户端 ID 并仅添加数据?

谢谢。

NLog 配置变量是整个应用程序的全局变量。为每个请求修改它们不是一个好主意,除非你承诺一次只有一个请求。

而是考虑将 NLog.Web-nuget-package 添加到您的项目并更改您的文件目标以使用此 FileName-layout:

    <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