C# 我的NLog记录没有保存。在哪里可以看到NLog的保存失败?

C# 我的NLog记录没有保存。在哪里可以看到NLog的保存失败?,c#,asp.net-mvc,entity-framework,nlog,C#,Asp.net Mvc,Entity Framework,Nlog,我有2个NLog数据库目标。第一个已经开始工作了。当我检查数据库中的表时,刚才添加的第二个似乎没有保存。。但是,在调试时我也没有例外。。有什么我可以打开的吗?或者我需要找个地方 也许如果有任何NLog专家,他们可以看到我可能犯的一个简单错误?以下是我创建NLog配置的代码: // nlog config (ExceptionTracking) LogManager.ThrowExceptions = true; // Using NLog.Com

我有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);
有什么我可以打开的吗

通过例外 您可以启用NLog将抛出异常。配置:


或在代码中:

LogManager.throweexceptions=true
内部日志 您可以启用内部日志。这将通过NLog在内部显示日志。在这种情况下,警告(和上限)就足够了

配置:


代码:

//使用NLog.Common
InternalLogger.LogLevel=LogLevel.Warn;
InternalLogger.LogFile=@“c:\log.txt”;
请参阅有关内部日志的更多信息

阅读更多
还有一个

问题不在于你混淆了目标名称,而是这一行:

config.LoggingRules.Add(new LoggingRule("*", LogLevel.Off, changeTrackingDbTarget));
注意您是如何选择了
LogLevel.Off
。也许可以考虑用这个词:< /P>
config.AddRule(LogLevel.Trace, LogLevel.Fatal, changeTrackingDbTarget);
另见:


但是我想最好有一个AddRule方法,它需要minlevel和target。

旁注:我建议先创建包含所有目标和规则的配置,然后将其分配给
LogManager.Configuration
LogManager.Configuration
的setter将为设置NlogDo做一些工作,我需要下面一行?config.LoggingRules.Add(新的LoggingRule(“*”,LogLevel.Off,changeTrackingDbTarget));我只想要一个新的目标,我不关心日志级别。每个目标都需要一个(共享)规则。否则日志将不会结束到目标。请参阅,在设置LogManager.Configuration=config之前,如何首先创建目标?我得到一个错误,LogManager.Configuration为null。。。我必须先设置LogManager.Configuration,然后才能正确添加target()。我尝试添加:LogManager.ThrowExceptions=true;LogManager.throwconfigeexceptions=true;InternalLogger.LogLevel=LogLevel.Warn;InternalLogger.LogFile=@“C:\log.txt”;但是我没有看到任何创建的文本文件,或者控制台异常。。知道我做错了什么吗?我把它放在这行下面:LogManager.Configuration.AddTarget(“ChangeTracking”,changeTrackingDbTarget);尽快启用内部日志记录。在进行任何配置之前,请先重写日志等。例如,
main
中的第一行。