过滤以不记录特定 class 的日志记录条目
filter to not log logging entries of particular class
我为我的应用程序配置了 adonet 附加程序和滚动文件附加程序。我想要的是我的 adonetappender 上的一个过滤器,通过它我可以忽略特定 class 上的日志记录。 class 具有我的文件附加程序所需的多级调试。所以我不能改变水平,必须通过过滤器省略。
我的日志记录配置如下
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="..\Logs\Logfile.txt" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p %-5property{_App} %-5property{_Node} [%2t] %5c{1}.%M - %m%n" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<immediateFlush value="true" />
<bufferSize value="0" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<connectionString value="data source=localhost;initial catalog=logging_db;User ID=root;Password=" />
<commandText value="INSERT INTO system_log(appname, action, level)
VALUES(@appname, @action,@level);" />
<parameter>
<parameterName value="appname" />
<dbType value="String" />
<size value="32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="My Web Service" />
</layout>
</parameter>
<parameter>
<parameterName value="action" />
<dbType value="String" />
<size value="150" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%c{1}" />
</layout>
</parameter>
<parameter>
<parameterName value="level" />
<dbType value="String" />
<size value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
我的 class 名字是 MyNameSpace.Business.ConditionCompare
在我的 class log4net 对象中声明为
private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
您没有在配置中显示您的文件附加程序,但您需要做的是定义一个记录器,它通过指定 additivity="false"
覆盖根目录中定义的附加程序:这允许记录器选择哪些附加程序使用。正如您所说,您想要完全停止记录到数据库,您可以告诉记录器只使用文件附加程序:
编辑:在 root
元素下添加:
<logger name="MyNameSpace.Business.ConditionCompare" additivity="false">
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
我为我的应用程序配置了 adonet 附加程序和滚动文件附加程序。我想要的是我的 adonetappender 上的一个过滤器,通过它我可以忽略特定 class 上的日志记录。 class 具有我的文件附加程序所需的多级调试。所以我不能改变水平,必须通过过滤器省略。 我的日志记录配置如下
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="..\Logs\Logfile.txt" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p %-5property{_App} %-5property{_Node} [%2t] %5c{1}.%M - %m%n" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<immediateFlush value="true" />
<bufferSize value="0" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<connectionString value="data source=localhost;initial catalog=logging_db;User ID=root;Password=" />
<commandText value="INSERT INTO system_log(appname, action, level)
VALUES(@appname, @action,@level);" />
<parameter>
<parameterName value="appname" />
<dbType value="String" />
<size value="32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="My Web Service" />
</layout>
</parameter>
<parameter>
<parameterName value="action" />
<dbType value="String" />
<size value="150" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%c{1}" />
</layout>
</parameter>
<parameter>
<parameterName value="level" />
<dbType value="String" />
<size value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
我的 class 名字是 MyNameSpace.Business.ConditionCompare 在我的 class log4net 对象中声明为
private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
您没有在配置中显示您的文件附加程序,但您需要做的是定义一个记录器,它通过指定 additivity="false"
覆盖根目录中定义的附加程序:这允许记录器选择哪些附加程序使用。正如您所说,您想要完全停止记录到数据库,您可以告诉记录器只使用文件附加程序:
编辑:在 root
元素下添加:
<logger name="MyNameSpace.Business.ConditionCompare" additivity="false">
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</logger>