log4net跨平台XML配置

时间:2015-05-11 05:32:50

标签: c# .net linux mono log4net

我需要将我的日志文件存储在Logs子文件夹中。通常你会按照以下方式修改App.config中的FileAppender:

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

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

我们可以将其更改为'/',但这只适用于Linux而不适用于Windows。

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

2 个答案:

答案 0 :(得分:1)

一个可能的解决方案是,您可以为Windows配置文件,而不是在配置测试之后,如果您在Linux上。在Linux上,您可以获取appender并使用替换为Linux兼容来更改file =&gt;值:

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 ();
                    }
                }
            }
        }
}

答案 1 :(得分:1)

另一种解决方案是使用它:

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