我们正在尝试完全从log4net切换到Serilog。但是,这部分功能似乎丢失了。我需要的是能够获取库类内部日志文件的位置。这对于我们的桌面Click-Once应用程序很重要,因为该位置在不同的OS和不同的用户上是不同的。当用户需要访问日志时,我们可以将他定向到正确的文件夹。 这里提出了非常类似的问题: Read current Serilog's configuration 但是我无法相信没有办法从Serilog获得这些信息。我不需要更改该配置-只需阅读即可。在log4net中,我们可以做到:
log4net.LogManager.GetAllRepositories()
然后
repository.Root.Appenders.OfType<FileAppender>
请告诉我当前LoggerConfiguration有某种后门,或者是否存在获取当前File-Sink的文件路径的其他方法。
答案 0 :(得分:2)
Serilog不会公开已配置的接收器列表,因此,如果您真的想从实时Serilog配置中获取此信息,则当前唯一的选择是使用Reflection。
您可以在此答案上看到一个示例:
也就是说,鉴于您要做的就是知道要写入日志文件的路径,因此在设置Serilog日志管道时,可以在应用程序开始时轻松存储该内容。
如果在代码中配置文件路径,则可以将该信息存储在整个应用程序可以访问的静态属性中。如果您从appSettings.json
或App.config
获取文件夹路径,则可以从那里读取信息。
如果您的配置中包含环境变量,则可以通过扩展这些环境变量来获得与Serilog相同的值,例如Environment.ExpandEnvironmentVariables("%LogPath%\\AppName.log")