如何通过进程ID设置滚动文件名唯一
How to set the rolling file name to be unique by process ID
我试图在一台机器上同时为每个进程 运行 在日志中设置唯一的名称。我试图将 app.config 中的 pathFormat 设置为类似于
的内容
<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.{MachineName}-{ThreadId}-{Date}.log" />
那没用。
有什么想法吗?我在文档中找不到任何内容。
如果能够从多个源写入输出,那么就没有必要为每个进程都创建一个日志。由于(目前)我坚持使用 1.5,因此我在配置 Rolling 文件时提供了一个特定的路径。
new LoggerConfiguration()
.ReadFrom.AppSettings(AppName)
.WriteTo.RollingFile(path)
我只需要提供机器名称和线程 ID 即可获得唯一的日志文件名称。
目前Serilog自带的RollingFile sink只支持动态滚动文件的{date}
标签
因此,如果您需要不同的(动态)策略来滚动(如线程 ID 等),您将编写自己的接收器(您可以 fork the default one 并进行更改)。
不过对于通常不会经常更改的机器名称,您可以使用环境变量 COMPUTERNAME
并让 Serilog 为您扩展它。
例如
<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.%COMPUTERNAME%-{Date}.log" />
当然,环境变量会在您初始化 Serilog 配置时扩展,因此如果在您的应用 运行 期间机器名称发生变化,您仍将使用旧版本滚动文件名称,直到您重新启动您的应用程序(或至少直到您的应用程序重新初始化 Serilog)。
ps:不确定是否是 helps,但 Serilog v2.0 引入了一种跨进程共享同一日志文件的方法:
.WriteTo.RollingFile("log-{Date}.txt", shared: true)
我试图在一台机器上同时为每个进程 运行 在日志中设置唯一的名称。我试图将 app.config 中的 pathFormat 设置为类似于
的内容<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.{MachineName}-{ThreadId}-{Date}.log" />
那没用。
有什么想法吗?我在文档中找不到任何内容。
如果能够从多个源写入输出,那么就没有必要为每个进程都创建一个日志。由于(目前)我坚持使用 1.5,因此我在配置 Rolling 文件时提供了一个特定的路径。
new LoggerConfiguration()
.ReadFrom.AppSettings(AppName)
.WriteTo.RollingFile(path)
我只需要提供机器名称和线程 ID 即可获得唯一的日志文件名称。
目前Serilog自带的RollingFile sink只支持动态滚动文件的{date}
标签
因此,如果您需要不同的(动态)策略来滚动(如线程 ID 等),您将编写自己的接收器(您可以 fork the default one 并进行更改)。
不过对于通常不会经常更改的机器名称,您可以使用环境变量 COMPUTERNAME
并让 Serilog 为您扩展它。
例如
<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.%COMPUTERNAME%-{Date}.log" />
当然,环境变量会在您初始化 Serilog 配置时扩展,因此如果在您的应用 运行 期间机器名称发生变化,您仍将使用旧版本滚动文件名称,直到您重新启动您的应用程序(或至少直到您的应用程序重新初始化 Serilog)。
ps:不确定是否是 helps,但 Serilog v2.0 引入了一种跨进程共享同一日志文件的方法:
.WriteTo.RollingFile("log-{Date}.txt", shared: true)