Как войти в несколько целей с различными уровнями ведения журнала, используя NLog? - PullRequest
1 голос
/ 27 октября 2011

Я сталкиваюсь с той же проблемой, описанной там: Другой вопрос о переполнении стека

Мне нужно войти в файл и вызвать метод. Проблема состоит в том, что существует много сообщений регистрации уровня отладки, которые более детализированы. Мне нужно, чтобы они вошли в файл. Но метод должен получать только сообщения журнала выше уровня отладки.

Таким образом, SplitGroupTarget не полностью отвечает моим требованиям. Есть ли какие-либо решения или обходные пути для этой проблемы?

Кроме того, я нашел эту запись на форуме NLog с похожей проблемой в 2006 году, но пока без ответа: NLog Forum

РЕДАКТИРОВАТЬ1: Я забыл упомянуть, что я хочу настроить это программно. В соответствии с вашим ответом я попытался сделать это следующим образом, но регистрируется только последняя цель.

SimpleConfigurator.ConfigureForTargetLogging(methodCallTarget, LogLevel.Debug);
SimpleConfigurator.ConfigureForTargetLogging(fileTarget, LogLevel.Debug);

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Я только что нашел решение для программной регистрации нескольких целей.

Я просто не использую SimpleConfigurator, а LogManager, чтобы установить NLog.LoggingConfiguration для его свойства.

Итак, я получил следующий фрагмент кода:

// define the targets
// ......

// create configuration object and set previously created targets
LoggingConfiguration configuration = new LoggingConfiguration();
configuration.AddTarget("methodCall", methodCallTarget);
configuration.AddTarget("logfile", fileTarget);

// create logging rules where i can specify the minimum log levels
// and add them to the configuration objects LoggingRules Enumerable.
LoggingRule logFileRule = new LoggingRule("*", NLog.LogLevel.Debug, fileTarget);
configuration.LoggingRules.Add(logFileRule);

LoggingRule methodCallRule = new LoggingRule("*", NLog.LogLevel.Info, methodCallTarget);
configuration.LoggingRules.Add(methodCallRule);

// Finally set the configuration object to the LogManagers Configuration property
LogManager.Configuration = configuration;

Спасибо за ваши ответы!

1 голос
/ 03 июля 2012

SimpleConfigurator перезаписывает все существующие правила.В вашем примере у вас было 2 вызова, поэтому первая цель была отброшена.Вместо этого вам следует вручную добавить цель и правило ведения журнала .

0 голосов
/ 27 октября 2011

Вы должны иметь возможность указать один и тот же регистратор и отправить его двум разным целям.

Предполагая, что вы настроили цели "f1" для файла и "m1" для метода, вы должны настроить регистраторы следующим образом:

<logger name="*" minlevel="Trace" writeTo="f1" />  
<logger name="*" minlevel="Debug" writeTo="m1" />  

Это должно отправить все сообщения журнала цели файла, f1, и все сообщения отладки и более поздние версии цели метода, m1.

Также см. Этот вопрос и ответы на него для получения дополнительной информации о настройке NLog. Вы можете найти что-то полезное.

Я только что гуглил и нашел этот пост, который, кажется, описывает вашу проблему и решение:

http://nlog -forum.1685105.n2.nabble.com / Programatic-конфигурации-оф-мишеней, и-правила-td1685349.html

Может быть, это поможет.

...