NLog - C#
Формулировка задачи:
Добрый день!
Я явно делаю что-то не так. ранее мне посоветовали эту библиотечку для лога. я с ней свыклась, подружилась и вообще очень довольна нашим с ней сотрудничеством.
Только вот при попытке встроить её в новый проект я столкнулась с непреодолимыми трудностями. Во-первых, он отказывается работать со своим файлом конфигурации NLog.config. То бишь если я создаю программно таргеты и правила он еще работает немножечко, а вот если я оставляю только конфиг отказывается работать. А еще тестовые записи он пишет, а созданные мной отказывается. я честно проверяла код до буковки, все идентично. Это даже смешно, если бы не было так грустно.
Из NuGet я установила:
Nlog
NLog.Config
NLog.InstallNLogConfig
NLog.Schema (он установился с одним из предыдущих)
в конфиге NLog добавила
ну что может быть проще?
потом в своем проекте я создала и вот пытаюсь его использоватьи не работает (
вот так работает причем последнее сообщение упорно не выводит. А если я все тестовые записи удаляю, оставляя последнее вообще не создает файл лога(
собственно помогите пожалуйста помнять, что я делаю не такон выдает ошибку, что не может найти часть пути при записи в лог он ничего не добавит в лог только текст, а исключение проигнорирует(
это я тоже где-то в конфиге накосячила?
> layout="${longdate} ${aspnet-request:servervariable=URL} ${uppercase:${level}} ${message}" /> > > >
//error logger private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
logger.Trace("program start");
var config = new NLog.Config.LoggingConfiguration(); var logfile = new NLog.Targets.FileTarget() { FileName = "log.txt", Name = "logfile" }; config.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Debug, logfile)); NLog.LogManager.Configuration = config; // logger = LogManager.GetCurrentClassLogger(); logger.Trace("Sample trace message"); logger.Debug("Sample debug message"); logger.Info("Sample informational message"); logger.Warn("Sample warning message"); logger.Error("Sample error message"); logger.Fatal("Sample fatal error message"); logger.Trace("program start");
Ладно, с последней мистикой я разобралась, в конфиге написала минимальный уровень debug, а сама пытаюсь добавить запись trace.
Но в файле конфига-то я минимальный уровень trace указывала! почему ж он оттуда то не берет ?
Я даже добавила в конфиг "createDirs="true"" и это не помогло.
а когда я добавляю в код
//var logfile = new NLog.Targets.FileTarget() //{ // FileName = "${basedir}/logs/${level}.log", // CreateDirs = true, // Layout = "${longdate} | ${uppercase:${level}} | ${logger} | ${message}", // Name = "logfile" //};
А еще он игнорирует второе сообщение в команде! в функции logger.Trace() есть несколько перегрузок и в одной из них можно вписывать до 3-х стринговых переменных. Только вот в лог он пишет исключительно первую (
и исключения тоже не пережевывает(
если ему попробовать подать
logger.Trace(ex, "something string");
Решение задачи: «NLog»
textual
Листинг программы
<logger ... writeTo="File" />
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д