设置滚动文件名按进程ID唯一

本文关键字:ID 唯一 进程 滚动 文件名 设置 | 更新日期: 2023-09-27 18:04:38

我试图在日志上为一台机器上同时运行的每个进程具有唯一的名称。我试图将app.config中的pathFormat设置为类似于

的内容
<add key="MyApp:serilog:write-to:RollingFile.pathFormat" 
     value="..'log'MyApp.{MachineName}-{ThreadId}-{Date}.log" />

那没有用。

任何想法?我在文档中找不到任何东西。


如果能够从多个源写入输出,就不必为每个进程设置日志。由于(目前)我坚持使用1.5,所以在配置滚动文件时提供了一个特定的路径。

 new LoggerConfiguration()
     .ReadFrom.AppSettings(AppName)
     .WriteTo.RollingFile(path)

我只需要提供机器名称和线程Id,以获得一个唯一的日志文件名。

设置滚动文件名按进程ID唯一

目前,Serilog附带的rolllingfile接收器仅支持用于动态滚动文件的{date}标记。

因此,如果你需要一个不同的(动态)策略来滚动(如线程id等),你需要编写自己的接收器(你可以派生默认的接收器并进行更改)。

对于通常不会频繁更改的机器名,您可以使用环境变量COMPUTERNAME,并让Serilog为您展开它。

<add key="MyApp:serilog:write-to:RollingFile.pathFormat" 
     value="..'log'MyApp.%COMPUTERNAME%-{Date}.log" />

当然,环境变量将在初始化Serilog配置时展开,因此,如果在应用程序运行时机器名称发生变化,您仍将使用旧名称滚动文件,直到重新启动应用程序(或至少直到应用程序重新初始化Serilog)。


ps:不确定是否有帮助,但是Serilog v2.0引入了一种跨进程共享相同日志文件的方法:

.WriteTo.RollingFile("log-{Date}.txt", shared: true)