Мне нужно изменить макет моего файла журнала при записи записей журнала из аспекта. Скорее всего, мне понадобится изменить и другие настройки во времени.
Я создал две FileTargets, которые создают макет, как мне нужно.
LoggingConfiguration config = new LoggingConfiguration();
LoggingConfiguration aspectConfig = new LoggingConfiguration();
FileTarget fileTarget = new FileTarget();
fileTarget.Name = "fileTarget";
fileTarget.Layout = "${longdate} ${machineName} ${callsite} ${message} ${exception:format=tostring}";
fileTarget.FileName = String.Format("{0}Admin.log", Config.DatabasePath);
fileTarget.KeepFileOpen = false;
FileTarget aspectTarget = new FileTarget();
aspectTarget.Name = "aspectTarget";
aspectTarget.Layout = "${longdate} ${machineName} ${message} ${exception:format=tostring}";
aspectTarget.FileName = String.Format("{0}Admin.log", Config.DatabasePath);
aspectTarget.KeepFileOpen = false;
LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
config.LoggingRules.Add(rule2);
LoggingRule aspectRule = new LoggingRule("aspects", LogLevel.Trace, aspectTarget);
aspectConfig.LoggingRules.Add(aspectRule);
LogManager.Configuration = config;
Могут быть и другие изменения / отличия, но это не относится к моменту на этом этапе.
Использование следующих параметров прекрасно работает для конфигурации «по умолчанию» или «*», т. Е. С использованием:
var log = LogManager.GetCurrentClassLogger();
log.Fatal("##########################################");
То, что я хочу сделать, это иметь возможность использовать 'aspectRule' вместо правила по умолчанию '*', вызвав logger и указав 'aspectRule'.
Я думал, что это будет работать:
var log = LogManager.GetLogger("aspects");
log.Fatal("########################################");
все хорошо, но я не понимаю, как определить новый Logger, называемый «аспектами», особенно потому, что в коде я даже не создаю Logger, называемый «*»: -)
Обратите внимание, что я не использую XML-файл конфигурации и мне нужно решение для программного использования.
Есть идеи?
EDIT:
Мне нужно написать 1 запись в журнале, как в этом примере:
if (someCondition)
logger.Fatal("#############"); // use layout in fileTarget
else
logger.Fatal("##############"); // use layout in aspectTarget