Log Exception с использованием NLog - PullRequest
0 голосов
/ 10 января 2019

На вики-странице NLog я обнаружил, что Страница описывает, как регистрировать исключения. Но на странице они упомянули что-то подобное для достижения этой функции.

<nlog> 
  <targets> 
    <target name="f" type="File" 
            layout="${longdate} ${message} ${exception:format=tostring}"/> 
  </targets> 
  <rules> 
    <logger name="*" writeTo="f"/> 
  </rules> 
</nlog>

Я динамически создаю файл конфигурации и не уверен, как внедрить вышеуказанную конфигурацию в мой код.

Код для конфигурации

public class NLogManager : ILogManager
{
        public NLogManager()
        {
            var config = new LoggingConfiguration();

            var consoleTarget = new ConsoleTarget();
            config.AddTarget("console", consoleTarget);

            var consoleRule = new LoggingRule("*", LogLevel.Trace, consoleTarget);
            config.LoggingRules.Add(consoleRule);

            var fileTarget = new FileTarget();
            string folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            fileTarget.FileName = Path.Combine(folder, "Log.txt");
            config.AddTarget("file", fileTarget);

            var fileRule = new LoggingRule("*", LogLevel.Warn, fileTarget);
            config.LoggingRules.Add(fileRule);

            LogManager.Configuration = config;
        }

        public ILogger GetLog([System.Runtime.CompilerServices.CallerFilePath] string callerFilePath = "")
        {
            string fileName = callerFilePath;

            if (fileName.Contains("/"))
            {
                fileName = fileName.Substring(fileName.LastIndexOf("/", StringComparison.CurrentCultureIgnoreCase) + 1);
            }

            var logger = LogManager.GetLogger(fileName);
            return new NLogLogger(logger);
        }
    }

Может кто-нибудь подсказать мне, как я могу настроить это динамически?

1 Ответ

0 голосов
/ 10 января 2019

Вам необходимо установить свойство Layout для (файла) Target:

fileTarget.Layout = "${longdate} ${message} ${exception:format=tostring}";

примечание: макет по умолчанию - ${longdate}|${level:uppercase=true}|${logger}|${message} и не будет включать исключение, как вы можете видеть. Это будет изменено в NLog 5 или 6: https://github.com/NLog/NLog/issues/1292

...