Cri*_*rsi 3 c# logging log4net log4net-configuration uwp
我有一个使用我的一些库的 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="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>
Run Code Online (Sandbox Code Playgroud)
谢谢!
要完成pfx答案,如果您使用的是 netStandard,则必须使用Configure带有附加参数的重载log4net.Repository.ILoggerRepository。
我一直无法使用ConsoleAppender并切换到DebugAppender.
你不能在 UWP 中使用相对路径,RollingFileAppender因为 log4net 没有权限在你的应用程序的安装位置创建文件。我认为它可以使用完整路径,但我看到了一些权限问题(您应该为此激活 log4net 的调试模式)。
最后,我还制作了一个自定义 Appender,它在您的应用程序的本地存储中写入文件。这是应该为生产使用而增强的代码。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下配置文件:
<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>
Run Code Online (Sandbox Code Playgroud)