Для завершения ответа pfx , если вы используете netStandard, вам придется использовать перегрузки Configure
с дополнительным параметром log4net.Repository.ILoggerRepository
.
Я не смог использовать ConsoleAppender
и переключиться на DebugAppender
.
Вы не можете использовать относительный путь в UWP с RollingFileAppender
, так как log4net не будет иметь разрешения на создание файла в месте установки вашего приложения. Я думаю, что он мог бы работать с полным путем, но я видел некоторые проблемы с разрешениями (вы должны активировать режим отладки log4net для этого).
Наконец, я также создал Custom Appender , который записывает файл в Local Storage вашего приложения. Вот код, который должен быть улучшен для производственного использования.
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>