我试图在日志上为一台机器上同时运行的每个进程提供唯一的名称。我尝试将 app.config 中的 pathFormat 设置为类似于
<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.{MachineName}-{ThreadId}-{Date}.log" />
Run Code Online (Sandbox Code Playgroud)
那行不通。
任何想法?我在文档中找不到任何内容。
能够从多个源写入输出将不需要为每个进程都记录日志。由于(目前)我坚持使用 1.5,因此我在配置滚动文件时提供了特定路径。
new LoggerConfiguration()
.ReadFrom.AppSettings(AppName)
.WriteTo.RollingFile(path)
Run Code Online (Sandbox Code Playgroud)
我只需要提供计算机名称和线程 ID 即可获取唯一的日志文件名。
目前,Serilog自带的RollingFile接收器{date}仅支持动态滚动文件的标签。
因此,如果您需要一种不同的(动态)策略来滚动(如线程 ID 等),您将编写自己的接收器(您可以分叉默认的接收器并进行更改)。
不过,对于通常不会经常更改的计算机名称,您可以不用使用环境变量COMPUTERNAME,而让 Serilog 为您扩展它。
例如
<add key="MyApp:serilog:write-to:RollingFile.pathFormat"
value="..\log\MyApp.%COMPUTERNAME%-{Date}.log" />
Run Code Online (Sandbox Code Playgroud)
当然,环境变量将在您初始化 Serilog 配置时扩展,因此如果在您的应用程序运行时机器名称发生更改,您仍将使用旧名称滚动文件,直到您重新启动应用程序(或至少在您的应用程序重新初始化 Serilog 之前)。
ps:不确定是否有帮助,但 Serilog v2.0 引入了一种跨进程共享同一日志文件的方法:
.WriteTo.RollingFile("log-{Date}.txt", shared: true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |