Log4Netconfiguration日志级别

如何使Log4net仅logging信息级别日志? 这甚至可能吗? 你能设定一个门槛吗?

这是我所拥有的,并且如我所期望的那样logging了Info和以上。 有什么我可以做,只有login信息?

<logger name="BrokerCollection.Model.XmlDocumentCreationTask"> <appender-ref ref="SubmissionAppender"/> <level value="Info" /> </logger> 

在appender的定义中,我相信你可以做这样的事情:

 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO"/> <param name="LevelMax" value="INFO"/> </filter> ... </appender> 

使用threshold

例如:

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <threshold value="WARN"/> <param name="File" value="File.log" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Size" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="1024KB" /> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Server startup]&#13;&#10;" /> <param name="Footer" value="[Server shutdown]&#13;&#10;" /> <param name="ConversionPattern" value="%d %m%n" /> </layout> </appender> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <threshold value="ERROR"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread]- %message%newline" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <threshold value="INFO"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%thread] %m%n" /> </layout> </appender> 

在这个例子中,所有的INFO及以上都被发送到控制台,所有的WARN都被发送到文件,ERROR被发送到事件日志。

是。 它是用appender上的filter完成的。

这里是我通常使用的appenderconfiguration,仅限于INFO级别。

 <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="${HOMEDRIVE}\\PI.Logging\\PI.ECSignage.${COMPUTERNAME}.log" /> <appendToFile value="true" /> <maxSizeRollBackups value="30" /> <maximumFileSize value="5MB" /> <rollingStyle value="Size" /> <!--A maximum number of backup files when rolling on date/time boundaries is not supported. --> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.ffff} [%2thread] %-5level %20.20type{1}.%-25method at %-4line| (%-30.30logger) %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="INFO" /> <levelMax value="INFO" /> </filter> </appender> 

如果您想dynamic执行此操作,请执行以下操作:

 using System; using System.Collections.Generic; using System.Text; using log4net; using log4net.Config; using NUnit.Framework; namespace ExampleConsoleApplication { enum DebugLevel : int { Fatal_Msgs = 0 , Fatal_Error_Msgs = 1 , Fatal_Error_Warn_Msgs = 2 , Fatal_Error_Warn_Info_Msgs = 3 , Fatal_Error_Warn_Info_Debug_Msgs = 4 } class TestClass { private static readonly ILog logger = LogManager.GetLogger(typeof(TestClass)); static void Main ( string[] args ) { TestClass objTestClass = new TestClass (); Console.WriteLine ( " START " ); int shouldLog = 4; //CHANGE THIS FROM 0 TO 4 integer to check the functionality of the example //0 -- prints only FATAL messages //1 -- prints FATAL and ERROR messages //2 -- prints FATAL , ERROR and WARN messages //3 -- prints FATAL , ERROR , WARN and INFO messages //4 -- prints FATAL , ERROR , WARN , INFO and DEBUG messages string srtLogLevel = String.Empty; switch (shouldLog) { case (int)DebugLevel.Fatal_Msgs : srtLogLevel = "FATAL"; break; case (int)DebugLevel.Fatal_Error_Msgs: srtLogLevel = "ERROR"; break; case (int)DebugLevel.Fatal_Error_Warn_Msgs : srtLogLevel = "WARN"; break; case (int)DebugLevel.Fatal_Error_Warn_Info_Msgs : srtLogLevel = "INFO"; break; case (int)DebugLevel.Fatal_Error_Warn_Info_Debug_Msgs : srtLogLevel = "DEBUG" ; break ; default: srtLogLevel = "FATAL"; break; } objTestClass.SetLogingLevel ( srtLogLevel ); objTestClass.LogSomething (); Console.WriteLine ( " END HIT A KEY TO EXIT " ); Console.ReadLine (); } //eof method /// <summary> /// Activates debug level /// </summary> /// <sourceurl>http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx</sourceurl> private void SetLogingLevel ( string strLogLevel ) { string strChecker = "WARN_INFO_DEBUG_ERROR_FATAL" ; if (String.IsNullOrEmpty ( strLogLevel ) == true || strChecker.Contains ( strLogLevel ) == false) throw new Exception ( " The strLogLevel should be set to WARN , INFO , DEBUG ," ); log4net.Repository.ILoggerRepository[] repositories = log4net.LogManager.GetAllRepositories (); //Configure all loggers to be at the debug level. foreach (log4net.Repository.ILoggerRepository repository in repositories) { repository.Threshold = repository.LevelMap[ strLogLevel ]; log4net.Repository.Hierarchy.Hierarchy hier = (log4net.Repository.Hierarchy.Hierarchy)repository; log4net.Core.ILogger[] loggers = hier.GetCurrentLoggers (); foreach (log4net.Core.ILogger logger in loggers) { ( (log4net.Repository.Hierarchy.Logger)logger ).Level = hier.LevelMap[ strLogLevel ]; } } //Configure the root logger. log4net.Repository.Hierarchy.Hierarchy h = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository (); log4net.Repository.Hierarchy.Logger rootLogger = h.Root; rootLogger.Level = h.LevelMap[ strLogLevel ]; } private void LogSomething () { #region LoggerUsage DOMConfigurator.Configure (); //tis configures the logger logger.Debug ( "Here is a debug log." ); logger.Info ( "... and an Info log." ); logger.Warn ( "... and a warning." ); logger.Error ( "... and an error." ); logger.Fatal ( "... and a fatal error." ); #endregion LoggerUsage } } //eof class } //eof namespace 

应用程序configuration:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="LogTest2.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header] \r\n" /> <param name="Footer" value="[Footer] \r\n" /> <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> </layout> </appender> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="White" /> <backColor value="Red, HighIntensity" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.2.10.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="data source=ysg;initial catalog=DBGA_DEV;integrated security=true;persist security info=True;" /> <commandText value="INSERT INTO [DBGA_DEV].[ga].[tb_Data_Log] ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" /> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" /> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout" value="%thread" /> </parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout" value="%level" /> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout" value="%logger" /> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout" value="%messag2e" /> </parameter> </appender> <root> <level value="INFO" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="AdoNetAppender" /> <appender-ref ref="ColoredConsoleAppender" /> </root> </log4net> </configuration> 

csproj文件中的引用:

 <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath> </Reference> <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" /> 

你可以使用log4net.Filter.LevelMatchFilter。 其他选项可以在log4net教程 – filter中find

在你的appender部分添加

 <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="Info" /> <acceptOnMatch value="true" /> </filter> 

匹配默认的接受是真实的,所以你可以把它留出来,但如果你把它设置为false你可以过滤log4netfilter