#c# #.net #logging #enterprise-library
#c# #.net #ведение журнала #enterprise-библиотека
Вопрос:
Есть некоторый код:
private const string FORMAT_TEXT =
"{timestamp}: [{category} ({win32ThreadId}-{threadName}) {severity}] |{title}|: {message}";
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "trace.log");
var builder = new ConfigurationSourceBuilder();
builder.ConfigureLogging()
.WithOptions.DoNotRevertImpersonation()
.LogToCategoryNamed("Category1")
.SendTo.FlatFile("MyMessages1")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter 1").UsingTemplate(FORMAT_TEXT))
.ToFile(path)
.LogToCategoryNamed("Category2")
.SendTo.FlatFile("MyMessages2")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter 2").UsingTemplate(FORMAT_TEXT))
.ToFile(path);
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
for (int i = 0; i < 10; i )
{
Logger.Write("Error message: " i.ToString(), "Category1");
Logger.Write("Error message: " i.ToString(), "Category2");
}
Console.ReadKey();
Он создает два файла журнала: трассировка.журнал для Category1 и 65a25bb0-4c42-430d-b2b7-9bd2c8ea41e1trace.журнал для Категории2. Я хочу вести журнал в один файл trace.log. Что не так?
Ответ №1:
Вы хотите использовать SharedListener, чтобы обе категории регистрировались в одном и том же прослушивателе. В вашем коде вы создаете два отдельных прослушивателя, которые оба регистрируются в одном файле (что вызывает проблемы с блокировкой файлов).
Попробуйте:
builder.ConfigureLogging()
.WithOptions.DoNotRevertImpersonation()
.LogToCategoryNamed("Category1")
.SendTo.FlatFile("MyMessages1")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter 1").UsingTemplate(FORMAT_TEXT))
.ToFile(path)
.LogToCategoryNamed("Category2")
.SendTo.SharedListenerNamed("MyMessages1");