log4net 跨平台 XML 配置

log4net cross platform XML config

我需要将我的日志文件存储在 Logs 子文件夹中。通常你会这样做我修改你 App.config 中的 FileAppender 如下:

<file type="log4net.Util.PatternString" value="Logs\MyLog.log" />

然而,这不是跨平台的,因为如果您在 linux 上 运行 这将创建一个名为 'Logs\MyLog.log' 的文件,而不是一个目录。这是因为 '\' 不是 linux.

上的路径分隔符

我们可以将其更改为“/”,但这仅适用于 linux 而不适用于 windows。

如何使用 log4net 的 XML 配置将我的日志放在跨平台工作的子文件夹中?

一个可能的解决方案是为 windows 配置文件,如果您在 Linux 上,则在配置测试之后。在 Linux 上时,您可以获得 appender 并使用替换更改 file=>value 值以 Linux 兼容:

XmlConfigurator.Configure();
if (Environment.OSVersion.Platform == PlatformID.Unix){
        var repository = LogManager.GetRepository() as Hierarchy;
        if (repository != null)
        {
            var appenders = repository.GetAppenders();
            if (appenders != null)
            {
                foreach (var appender in appenders)
                {
                    if (appender is FileAppender)
                    {
                        var fileLogAppender = appender as FileAppender;
                        fileLogAppender.File = fileLogAppender.File.Replace (@"\", Path.DirectorySeparatorChar.ToString ());
                        fileLogAppender.ActivateOptions ();
                    }
                }
            }
        }
}

另一个解决方案是这样使用它:

<file type="log4net.Util.PatternString" value=".//Logs//MyLog.log" />