我有一个使用某些图书馆的UWP应用。 这样的库使用log4net进行日志记录,并在多个项目中共享,不仅限于UWP。
我想通过XML配置文件中的常规confi部分配置log4net,但由于没有app.config文件,因此我无法在UWP项目中找到实现此目的的方法。
我应将以下部分放在哪里?
<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="log\mylog.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>
谢谢!
答案 0 :(得分:3)
要完成 pfx 答案,如果您使用的是netStandard,则必须使用带有附加参数Configure
的{{1}}重载。
我无法使用log4net.Repository.ILoggerRepository
并切换到ConsoleAppender
。
您不能在DebugAppender
中使用UWP中的相对路径,因为log4net将无权在应用程序的安装位置中创建文件。我认为它可以使用完整路径,但是我已经看到了一些权限问题(您应该为此激活log4net的调试模式)。
最后,我还制作了一个自定义应用程序,可将文件写入您应用程序的本地存储中。这是应该为生产使用而增强的代码。
RollingFileAppender
使用以下配置文件:
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();
}
}
}
答案 1 :(得分:2)
由于没有App.config
文件,因此您将必须以编程方式配置Log4net
。
您可以将设置存储在本地文件(或嵌入式资源)中,并在应用程序启动时读取这些设置;参考:Create and read a local file。
Log4net
的{{3}}类可以通过其Stream
重载之一将这些设置接受为FileInfo
,XmlElement
或Configure
。
log4net.Config.XmlConfigurator.Configure(XmlElement config);
log4net.Config.XmlConfigurator.Configure(Stream config);
log4net.Config.XmlConfigurator.Configure(FileInfo config);