C# log4net跨平台XML配置
我需要将日志文件存储在日志子文件夹中。通常,在App.config中修改FileAppender时,您会执行以下操作: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
<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:\
部分,就会出现问题,这可以通过使用相对位置来解决。