Моя запись NLog не сохраняется. Где я могу увидеть свои ошибки сохранения для NLog? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть 2 цели базы данных NLog. Первый работал. Второй, который я только что добавил, кажется, не сохраняется, когда я проверяю таблицу в базе данных ... Однако я не получаю исключения для проверки отладки ... Есть ли что-то, что я могу включить? Или где-то мне нужно искать?

Может быть, если есть какие-нибудь эксперты NLog, они могут увидеть простую ошибку, которую я, возможно, сделал? Вот мой код для создания конфигурации NLog:

 // nlog config (ExceptionTracking)
            LogManager.ThrowExceptions = true;
            // Using NLog.Common
            InternalLogger.LogLevel = LogLevel.Warn;
            InternalLogger.LogFile = @"c:\log.txt";

            var config = new LoggingConfiguration();
            var dbTarget = new DatabaseTarget()
            {
                Name = "ExceptionTracking",
                ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["NLogConnection"].ConnectionString,
                CommandText = "INSERT INTO Common.ExceptionTracking ( ApplicationID,  Url,  IP,  Referrer,  UserName,  ExceptionDescription,  Action,  Controller,  InsertedBy,  InsertedDate) " +
                                                            "VALUES (@ApplicationID, @Url, @IP, @Referrer, @UserName, @ExceptionDescription, @Action, @Controller, @InsertedBy, @InsertedDate);"
            };

            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@ApplicationID", Layout = "${appsetting:name=AppID:default=null}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Url", Layout = "${aspnet-Request-Url}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@IP", Layout = "${aspnet-Request-IP}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Referrer", Layout = "${aspnet-Request-Referrer}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@UserName", Layout = "${identity:authType=false:isAuthenticated=false}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@ExceptionDescription", Layout = "${exception:tostring}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Action", Layout = "${aspnet-MVC-Action}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Controller", Layout = "${aspnet-MVC-Controller}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@InsertedBy", Layout = "${gdc:BEMSID}" });
            dbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@InsertedDate", Layout = "${date}" });

            config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, dbTarget));


            // Add another NLog Target (ChangeTracking)
            var changeTrackingDbTarget = new DatabaseTarget()
            {
                Name = "ChangeTracking",
                ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["NLogConnection"].ConnectionString,
                CommandText = "INSERT INTO Common.ChangeTracking ( ApplicationID,  UserName,  Name,  EntityName,  PropertyName,  PrimaryKeyValue,  OldValue,  NewValue, DateChanged) " +
                                                            "VALUES (@ApplicationID, @UserName, @Name, @EntityName, @PropertyName, @PrimaryKeyValue, @OldValue, @NewValue, @DateChanged);"
            };

            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@ApplicationID", Layout = "${appsetting:name=AppID:default=null}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@UserName", Layout = "${identity:authType=false:isAuthenticated=false}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@Name", Layout = "${event-properties:item=name}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@EntityName", Layout = "${event-properties:item=entityname}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@PropertyName", Layout = "${event-properties:item=propname}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@PrimaryKeyValue", Layout = "${event-properties:item=primarykey}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@OldValue", Layout = "${event-properties:item=oldvalue}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@NewValue", Layout = "${event-properties:item=newvalue}" });
            changeTrackingDbTarget.Parameters.Add(new DatabaseParameterInfo() { Name = "@DateChanged", Layout = "${date}" });

            config.LoggingRules.Add(new LoggingRule("*", LogLevel.Off, changeTrackingDbTarget));

            LogManager.Configuration = config;
            LogManager.Configuration.AddTarget("ExceptionTracking", dbTarget);
            LogManager.Configuration.AddTarget("ChangeTracking", changeTrackingDbTarget);
        }

Вот код, который пытается фактически создать журнал:

private static Logger _logger = LogManager.GetLogger("ChangeTracking");
                        LogEventInfo changeEvent = new LogEventInfo(LogLevel.Info, "ChangeTracking", "A change event has been fired");
                        changeEvent.Properties["Name"] = "Jake";
                        changeEvent.Properties["EntityName"] = "test";
                        changeEvent.Properties["PropertyName"] = "test property name";
                        changeEvent.Properties["PrimaryKeyValue"] = "test";
                        changeEvent.Properties["OldValue"] = "test";
                        changeEvent.Properties["NewValue"] = "test";
                        _logger.Log(changeEvent);

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Есть ли что-то, что я могу включить?

throwExceptions

Можно включить, что NLog будет генерировать исключения. Конфиг:

<nlog throwExceptions="true" >

Или в коде:

LogManager.ThrowExceptions = true

Внутренний журнал

Вы можете включить внутренний журнал. Это покажет журнал внутри NLog. В этом случае должно быть достаточно предупреждения (и верхнего).

Конфиг:

<nlog internalLogFile="c:\log.txt" internalLogLevel="Warn">

в коде:

// Using NLog.Common
InternalLogger.LogLevel = LogLevel.Warn;
InternalLogger.LogFile = @"c:\log.txt";

Подробнее о внутреннем журнале здесь

Подробнее

Также имеется руководство по устранению неполадок для NLog

0 голосов
/ 13 февраля 2020

Проблема не в том, что вы перепутали имена целей, а в следующую строку:

config.LoggingRules.Add(new LoggingRule("*", LogLevel.Off, changeTrackingDbTarget));

Обратите внимание, как вы выбрали LogLevel.Off. Возможно, стоит рассмотреть возможность использования этого вместо:

config.AddRule(LogLevel.Trace, LogLevel.Fatal, changeTrackingDbTarget);

См. Также: https://github.com/nlog/nlog/wiki/Tutorial#configure -nlog-target-for-output

Но я думаю, было бы неплохо иметь метод AddRule, который принимает minlevel и target.

...