2
votes

My application is using NLog configured with NLog.config shown below. It also uses RavenDB database which by default uses active NLog settings for logging.

It produces a lot of DEBUG and INFO messages that pollute the log. I do want to log ERROR and WARN messages. All of the records created by RavenDB come from namespaces that start with Raven.

I created the rules as shown below. Basically there is a final rule that prevents INFO/DEBUG messages that come from Raven.* namespace to get written into the log file. Everything was working well until I upgraded the NuGet packages to NLog 4.0. Now all the RavenDB messages are written into the log file.

Is this a bug or there is some configuration change happened across the NLog versions?

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="file" xsi:type="AsyncWrapper" queueLimit="1000" overflowAction="Discard">
      <target
        name="file"
        xsi:type="File"
        layout="${longdate} - ${level:upperCase=true} - ${identity} - ${logger} - ${message}${onexception:inner=${newline}${exception:format=tostring}${newline}}"
        fileName="D:/Logs/AppName/${shortdate}.log" />
    </target>
  </targets>
  <rules>
    <logger name="Raven.*" writeTo="file" minlevel="Warn" final="true" />
    <logger name="*" writeTo="file" minlevel="Debug" />
  </rules>
</nlog>
1

1 Answers

5
votes

Apparently there was a logic change in NLog 4. It does not mark messages from Raven namespace with level below the Warn final any longer.

http://nlog-project.org/2015/06/09/nlog-4-has-been-released.html

So the rule would have to change to send messages in the Raven.* namespace with maxlevel="INFO" into a null target.