在记录之前检查NLog minlevel?

时间:2016-05-30 07:25:44

标签: c# .net nlog

我想让开发人员使用NLog将对象记录为JSON。为此,我需要在发送到nLog OR之前实现一些逻辑,然后再发送到目标。

我可以构建自己的Target(TargetWithLayout),但是我找不到从配置中检查此特定目标/记录器的日志级别的方法吗?另一个缺点是我需要为我们将使用的每个目标(EventLog,File,WebService等)创建一个新的TargetWithLayout类。

另一种解决方案是在使用NLog的LogHandler中进行此操作。知道我是否应该翻译对象的唯一方法可能是从配置文件中读取所有记录器,如果它们中的任何一个设置为记录对象,那么我将序列化。但我不确定是否可以从LogHandler检查此信息(不手动执行)?

3 个答案:

答案 0 :(得分:2)

您可以使用NLog-Logger对象查询活动的日志记录规则:

if (myLogger.IsTraceEnabled)
   myLogger.Trace("Hello World");

答案 1 :(得分:1)

您可以使用NLog json布局在日志文件中编写json,无需自行检查并进行序列化:

<target name="jsonFile" xsi:type="File" fileName="${logFileNamePrefix}.json">
      <layout xsi:type="JsonLayout">
              <attribute name="time" layout="${longdate}" />
              <attribute name="level" layout="${level:upperCase=true}"/>
              <attribute name="message" layout="${message}" />
       </layout>
</target>

日志消息格式化由NLog处理,而不是自己处理。

release notes nlog

答案 2 :(得分:0)

添加一些理论;)

  

另一个缺点是我需要为我们将使用的每个目标(EventLog,File,WebService等)创建一个新的TargetWithLayout类。

这就是NLog中Layouts的原因。这些是可以在目标中使用的布局,但这些布局与目标无关。

(不要对布局渲染器,那些${..}事物感到困惑。)

有多种布局(纯文本,CSV,JSON)(请参阅list),您可以轻松添加自己的布局,类似于添加自定义目标/布局渲染器,请参阅the wiki < / p>