以编程方式配置NLog

时间:2018-09-06 06:44:46

标签: c# logging nlog

我有这四个参数,它们不向数据库返回任何内容: 为什么会发生这种情况以及如何解决?

这是完整的代码:

https://www.codepile.net/pile/z1lol0Gb

数据库在这里:

https://www.codepile.net/pile/01JgbjXV

我的代码的一部分

var dbTarget = new DatabaseTarget ();
dbTarget.ConnectionString = @"data source=.;initial catalog=Database5;user id=App;password=App;";
dbTarget.CommandText =
    @"insert into Logs (Level,CallSite,Type,Message,StackTrace,InnerException,AdditionalInfo) values (
         @level,
         @callSite,
         @type,
         @message,
         @stackTrace,
         @innerException,
         @additionalInfo
         );";
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@level", new NLog.Layouts.SimpleLayout ("${level}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@callSite", new NLog.Layouts.SimpleLayout ("${callsite}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@type", new NLog.Layouts.SimpleLayout ("${exception:format=type}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@message", new NLog.Layouts.SimpleLayout ("${exception:format=message}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@stackTrace", new NLog.Layouts.SimpleLayout ("${${exception:format=stackTrace}}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@innerException", new NLog.Layouts.SimpleLayout ("${exception:format=:innerFormat=ShortType,Message,Method:MaxInnerExceptionLevel=1:InnerExceptionSeparator}")));
dbTarget.Parameters.Add (new DatabaseParameterInfo ("@additionalInfo", new NLog.Layouts.SimpleLayout ("${message}")));

我具有与此处相同的数据库:

https://knightcodes.com/.net/2016/05/25/logging-to-a-database-wth-nlog.html

这就是他们在数据库中的外观

enter image description here

数据库应如下所示: enter image description here

2 个答案:

答案 0 :(得分:0)

内部异常可以为空,因此您的数据库中可以具有空值(但是,如果存在内部异常,则必须验证它是否将保存)。至于其他属性,我认为没有人可以帮助您提供您提供的样品。问题似乎在于异常处理和使用记录器。 但是,我无法通过您的示例进行验证。 Here是一个看起来与您相似的问题。您还可以阅读有关layour renderer的信息,并在NLog Wiki上寻找答案。如果尚未执行此操作,请考虑使用NLog config文件将与配置有关的所有内容都放在一个位置。

答案 1 :(得分:0)

您需要正确记录您的异常。

您的代码显示:

Logger logger1 = LogManager.GetLogger ("Logger1");
// Log something..
logger1.Error("Test Logger1");

但是Exception应该是第一个参数,请参见How to log exceptions in NLog

Logger logger1 = LogManager.GetLogger ("Logger1");
// Log something..
logger1.Error(new Exception("my error"), "Test Logger1");