我正在尝试在日志上为计算机上同时运行的每个进程创建唯一名称。我尝试将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)
我只需要提供Machine Name和Thread Id来获取唯一的日志文件名。
答案 0 :(得分:2)
目前,Serilog附带的RollingFile sink仅支持动态滚动文件的{date}
标记。
因此,如果你需要一个不同的(动态)策略来滚动(比如线程ID等),你就可以编写自己的接收器(你可以fork the default one并进行更改)。
虽然机器名称通常不会经常更改,但您可以使用环境变量COMPUTERNAME
,让Serilog为您扩展它。
e.g。
<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)