Семантическая регистрация в несколько файлов
Мне нужно регистрировать ошибки моего веб-приложения в трех разных файлах
Например:-
Dashboard --> DashboardLog.Log
Login Information --> LoginLog.Log
AAA Section --> AAALog.Log
Я пытался изменить fileName во время выполнения в соответствии с моим типом из метода "LogToRollingFlatFile". Но выдает ошибку, когда я снова обновляю страницу, говоря, что она используется другим процессом. Кажется, что он не освободил ресурсы журнала предыдущего времени, и при попытке записи снова выдает эту ошибку. Сильфон мой метод изменения пути,
public static void ChangePath(int typeId)
{
var listener = new ObservableEventListener();
listener.DisableEvents(SemanticLoggingEventSource.Log);
SemanticLoggingEventSource.Log.Dispose();
listener.EnableEvents(
SemanticLoggingEventSource.Log, EventLevel.LogAlways,
SemanticLoggingEventSource.Keywords.Perf | SemanticLoggingEventSource.Keywords.Diagnostic);
if (typeId == 1)
{
listener.LogToRollingFlatFile(
ConfigurationManager.AppSettings["DashboardLogLocation"].ToString(),
10,
"dd-M-yyyy",
RollFileExistsBehavior.Increment,
RollInterval.Hour,
null,
0,
true);
}
else if (typeId == 2)
{
listener.LogToRollingFlatFile(
ConfigurationManager.AppSettings["LoginLogLocation"].ToString(),
10,
"dd-M-yyyy",
RollFileExistsBehavior.Increment,
RollInterval.Hour,
null,
0,
true);
}
else
{
listener.LogToRollingFlatFile(
ConfigurationManager.AppSettings["AAALogLocation"].ToString(),
10,
"dd-M-yyyy",
RollFileExistsBehavior.Increment,
RollInterval.Hour,
null,
0,
true);
}
}
и вот как это будет вызвано,
SemanticLoggingUtility.ChangePath(1);
EventLogger.ErrorLog("Dashboard Error", "test description 1");
SemanticLoggingUtility.ChangePath(2);
EventLogger.ErrorLog("Login Error", "test description 2");
1 ответ
Я знаю, что это, вероятно, не тот ответ, который вы ищете, но для этого конкретного случая я думаю, что наличие нескольких файловых приемников будет наиболее подходящим (и отделенным) решением.
Просто для того, чтобы применить предыдущий оператор с разными регистраторами, это также обычная практика (как это делает Microsoft ILoggerFactory, предоставляющий разные регистраторы для разных классов).