Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# log4net跨平台XML配置_C#_.net_Linux_Mono_Log4net - Fatal编程技术网

C# log4net跨平台XML配置

C# log4net跨平台XML配置,c#,.net,linux,mono,log4net,C#,.net,Linux,Mono,Log4net,我需要将日志文件存储在日志子文件夹中。通常,在App.config中修改FileAppender时,您会执行以下操作: <file type="log4net.Util.PatternString" value="Logs\MyLog.log" /> 但是,这不是跨平台的,因为如果在linux上运行,它将创建一个名为“Logs\MyLog.log”的文件,而不是一个目录。这是因为“\”在linux上不是路径分隔符 我们可以将其更改为“/”,但这只适用于linux,而不适用于wi

我需要将日志文件存储在日志子文件夹中。通常,在App.config中修改FileAppender时,您会执行以下操作:

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

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

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


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

一个可能的解决方案是,如果您在Linux上,您可以为windows配置文件,而不是在配置测试之后。在Linux上,您可以获取appender并使用replace将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 ();
                    }
                }
            }
        }
}

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


请解释一下它是如何在平台窗口和linux中工作的?它只是工作,我在mono中有一个项目,它对log4net使用相同的配置文件,并将日志文件毫无问题地保存在“Logs”目录中。我相信这是由于mono能够在代码中找到目录分隔符时转换目录分隔符而起作用的-有关更多信息,请参阅。如果您硬编码
C:\
部分,就会出现问题,这可以通过使用相对位置来解决。