Последовательное ведение журнала с помощью Microsoft Enterprise Library LogWriter
У меня есть приложение C# .NET, использующее Enterprise Library 6.0 для ведения журнала. Я объявил один прослушиватель трассировки для ведения журнала базы данных и другой прослушиватель трассировки для ведения журнала плоских файлов. И подготовили их для обработки того же бревна категории "Общие".
В моем приложении, когда я вызываю LogWriter.Write ("Журнал испытаний", "Общие"); все хорошо, я вижу "Журнал испытаний" в базе данных и плоский файл, а также.
Но если один из них потерпит неудачу; Например, когда я вызываю LogWriter.Write ("Журнал испытаний", "Общие"); Предположим, что база данных недоступна. Я ожидаю от LogWriter просто записать данные в плоский файл.
К сожалению, я не вижу ни одного журнала, записанного как в обычном файле, так и в базе данных. Это обычно? И можно ли настроить механизм ведения журнала для последовательного ведения журнала? (например, если один из слушателей трассировки завершается неудачно, продолжайте со следующего слушателя трассировки)
Вот моя конфигурация регистрации
public static LoggingConfiguration BuildConfig()
{
string baseFilePath = @"C:\LogDirectory";
DatabaseProviderFactory factory = new DatabaseProviderFactory(new SystemConfigurationSource(false).GetSection);
DatabaseFactory.SetDatabaseProviderFactory(factory, false);
// Formatters
TextFormatter briefFormatter = new TextFormatter("Timestamp: {timestamp(local)}{newline}Message: {message}{newline}Category: {category}{newline}Priority: {priority}{newline}EventId: {eventid}{newline}ActivityId: {property(ActivityId)}{newline}Severity: {severity}{newline}Title:{title}{newline}");
TextFormatter extendedFormatter = new TextFormatter("Timestamp: {timestamp}{newline}Message: {message}{newline}Category: {category}{newline}Priority: {priority}{newline}EventId: {eventid}{newline}Severity: {severity}{newline}Title: {title}{newline}Activity ID: {property(ActivityId)}{newline}Machine: {localMachine}{newline}App Domain: {localAppDomain}{newline}ProcessId: {localProcessId}{newline}Process Name: {localProcessName}{newline}Thread Name: {threadName}{newline}Win32 ThreadId:{win32ThreadId}{newline}Extended Properties: {dictionary({key} - {value}{newline})}");
var databaseTraceListener = new FormattedDatabaseTraceListener(DatabaseFactory.CreateDatabase("DefaultDB"), "WriteLog", "AddCategory", extendedFormatter);
var flatFileTraceListener = new FlatFileTraceListener(baseFilePath + @"\FlatFile.log", "----------------------------------------", "----------------------------------------", briefFormatter);
LoggingConfiguration config = new LoggingConfiguration();
//Log Sources
config.AddLogSource("General",SourceLevels.All,true);
//Match Trace Listeners For Log Sources
config.LogSources["General"].AddTraceListener(databaseTraceListener);
config.LogSources["General"].AddTraceListener(flatFileTraceListener);
return config;
}
Здесь я делаю вход в мое приложение
public void DoSampleLogging()
{
LogWriter defaultWriter;
LoggingConfiguration loggingConfiguration;
loggingConfiguration = LoggingHelper.BuildConfig();
defaultWriter = new LogWriter(loggingConfiguration);
defaultWriter.Write("Test Log", "General");
}
1 ответ
К сожалению, такое поведение, по-видимому, умышленно. Если один слушатель терпит неудачу, другие для этой категории не обрабатываются. Смотрите ответ на этой странице для справки.