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" />
我需要将我的日志文件存储在 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" />