查看当前Serilog的配置

5

在Serilog中是否有一个属性/方法,我可以(以编程方式)检查当前配置?(接收器、最低级别)

例如,如果我有以下配置:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.File("log.txt")
    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information)
    .CreateLogger();

我后续如何读取这个配置文件?

(在我的情况下,该配置是在我的应用程序之外动态创建的。)

2个回答

3

没有一种反射方式可以检查Serilog配置。


2
这真是出乎意料!所以如果你想更改配置,你需要重新创建整个配置,是吗? - Julian
在NLog中,读取和更改配置可以通过LogManager.Configuration完成。所以我正在寻找它 ;) - Julian
是的,我们做事情有所不同 :-) - Nicholas Blumhardt
1
这真的很不方便!我需要在第一次加载后将设置存储在数据库中,以防止用户搞乱配置文件。我想我必须存储整个json...为什么将这些配置以只读方式公开会成为问题?在这种情况下,“不同”=缺点。 - lentyai

1

我不得不为内置应用程序中的日志读取器做类似的事情,所以我通过安装Serilog.Settings.AppSettings并通过ConfigurationManager读取配置来解决了这个问题。

由于我启用了滚动,所以我必须创建一个帮助函数来提供日志文件的实际文件名。

public static string GetLogFileName()
{
        var filePathSetting = ConfigurationManager.AppSettings.Get("serilog:write-to:File.path");
        var rollingEnabled = ConfigurationManager.AppSettings.Get("serilog:write-to:File.rollingInterval");
        if (!string.IsNullOrEmpty(rollingEnabled))
        {
                if (rollingEnabled.Equals("Day"))
                {
                        Regex regex = new Regex(@"(\.[a-z]+$)", RegexOptions.IgnoreCase);
                        var matches = regex.Matches(filePathSetting);
                        if (matches.Count > 0)
                        {
                                filePathSetting = filePathSetting.Replace(matches[0].Value, DateTime.Now.ToString("yyyyMMdd") + matches[0].Value);
                        }
                        return filePathSetting;
                }
        }

        return filePathSetting.ToString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接