如何在UWP应用程序中通过log4net配置日志记录



我有一个UWP应用程序,它使用了我的一些库。这些库使用log4net进行日志记录,并在许多项目中共享,而不仅仅是UWP。

我想通过XML配置文件中常见的confi部分来配置log4net,但在UWP项目中找不到这样做的方法,因为没有app.config文件。

我应该把下面的部分放在哪里?

<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="logmylog.log" />
<appendToFile value="true" />
<maximumFileSize value="2000KB" />
<maxSizeRollBackups value="20" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
</log4net>

谢谢!

若要完成pfx答案,如果使用的是netStandard,则必须使用带有附加参数log4net.Repository.ILoggerRepositoryConfigure重载。

我还没能使用ConsoleAppender和切换到DebugAppender

您不能将UWP中的相对路径与RollingFileAppender一起使用,因为log4net将无权在应用程序的安装位置创建文件。我认为它可以使用完整路径,但我看到了一些权限问题(您应该为此激活log4net的调试模式(。

最后,我还制作了一个自定义附件,它将文件写入应用程序的本地存储中。以下是应该为生产使用而增强的代码。

namespace AppWithLog4net
{
public class LocalStorageFileAppender : log4net.Appender.TextWriterAppender
{
private Stream m_stream;
public LocalStorageFileAppender() : base() {  }
protected override void PrepareWriter()
{
IAsyncOperation<Windows.Storage.StorageFile> task = Windows.Storage.ApplicationData.Current.LocalCacheFolder.CreateFileAsync("localStorage.log", 
      Windows.Storage.CreationCollisionOption.GenerateUniqueName);
Windows.Storage.StorageFile file = task.GetAwaiter().GetResult();
m_stream = file.OpenStreamForWriteAsync().Result;
QuietWriter = new log4net.Util.QuietTextWriter(new StreamWriter(m_stream, Encoding.UTF8), ErrorHandler);
WriteHeader();
}
protected override void Reset()
{
m_stream.Dispose();
m_stream = null;
base.Reset();
}
}
}

使用以下配置文件:

<log4net debug="true">
<appender name="Console" type="log4net.Appender.DebugAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<appender name="LocalStorageFile" type="AppWithLog4net.LocalStorageFileAppender, AppWithLog4net">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LocalStorageFile" />
</root>
</log4net>

因为没有App.config文件,所以必须以编程方式配置Log4net

您可以将设置存储在本地文件(或嵌入式资源(中,并在应用程序启动时读取这些设置;引用:创建并读取本地文件。

Log4netXmlConfigurator类可以通过其Configure重载之一接受这些设置作为StreamFileInfoXmlElement

log4net.Config.XmlConfigurator.Configure(XmlElement config);
log4net.Config.XmlConfigurator.Configure(Stream config);
log4net.Config.XmlConfigurator.Configure(FileInfo config);

最新更新