我的 NLog 记录没有保存。我在哪里可以看到我的 NLog 保存失败?
My NLog record is not saving. Where can I see my save failures for NLog?
我有 2 个 NLog 数据库目标。第一个一直在工作。当我检查数据库中的 table 时,我刚刚添加的第二个似乎没有保存。但是,我没有例外地查看调试。有什么我可以打开的吗?或者我需要看什么地方?
如果有任何 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);
Is there something I can turn on?
抛出异常
您可以启用 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";
查看有关内部日志的更多信息here
阅读更多
问题不是你混淆了目标名称,而是这一行:
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-targets-for-output
但我想如果有一个采用 minlevel 和 target 的 AddRule 方法会更好。
我有 2 个 NLog 数据库目标。第一个一直在工作。当我检查数据库中的 table 时,我刚刚添加的第二个似乎没有保存。但是,我没有例外地查看调试。有什么我可以打开的吗?或者我需要看什么地方?
如果有任何 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);
Is there something I can turn on?
抛出异常
您可以启用 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";
查看有关内部日志的更多信息here
阅读更多
问题不是你混淆了目标名称,而是这一行:
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-targets-for-output
但我想如果有一个采用 minlevel 和 target 的 AddRule 方法会更好。