Reputation: 18941
I have successfully cordoned off my own logging into its own General & Error Log files.
I have added NHibernate to the mix as i'd like to record the sql statements it generates to aid debugging - but into its own file.
With the current config I have below, the NH output is ending up in my General Log file (CommunicationsAppender) as well as it's own file (it is duplicated). How do I keep the output out of CommunicationsAppender?
<log4net>
<appender name="NHibernateAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\logs\NHibernate.log"/>
<appendToFile value="true"/>
<maximumFileSize value="1000KB"/>
<maxSizeRollBackups value="10"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger %level - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="NHibernate.SQL" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CommunicationsAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Logs\Communications Service.log"/>
<appendToFile value="true"/>
<maximumFileSize value="10000KB"/>
<maxSizeRollBackups value="10"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="WARN" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="CommunicationsLogger" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CommunicationsErrorAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Logs\Communications Service Errors.log"/>
<appendToFile value="true"/>
<maximumFileSize value="10000KB"/>
<maxSizeRollBackups value="10"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %logger - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="CommunicationsLogger" />
<acceptOnMatch value="true" />
</filter>
</appender>
<root>
<!-- Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
<priority value="ALL"/>
<!--<appender-ref ref="LogToFile"/>-->
<appender-ref ref="CommunicationsAppender" />
<appender-ref ref="CommunicationsErrorAppender" />
<appender-ref ref="NHibernateAppender" />
</root>
<logger name="NHibernate.SQL">
<level value="DEBUG"/>
<appender-ref ref="NHibernateAppender"/>
</logger>
<logger name="NHibernate">
<level value="OFF" />
</logger>
</log4net>
Upvotes: 4
Views: 2317
Reputation: 15303
Remove the NHibernate appender from your root and also add additivity="false"
to your nhibernate appender.
<root>
<!-- Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
<priority value="ALL"/>
<!--<appender-ref ref="LogToFile"/>-->
<appender-ref ref="CommunicationsAppender" />
<appender-ref ref="CommunicationsErrorAppender" />
</root>
<logger name="NHibernate.SQL" additivity="false">
Upvotes: 8