如何按进程ID

时间:2016-08-29 17:28:01

标签: c# serilog

我正在尝试在日志上为计算机上同时运行的每个进程创建唯一名称。我尝试将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来获取唯一的日志文件名。

1 个答案:

答案 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)