首页 > 代码库 > Log4net_配置
Log4net_配置
Log4net 有三个主要组件:loggers,appenders 和 layouts。这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信息的写入位置(如控制台,文件,内存,数据库等)。过滤器(filter)帮助这些组件,控制追加器(appender)的行为和把对象转换成字符串的对象渲染。
日志(Loggers)等级
该规则是 log4net 的核心。它假设等级是有序的。对于标准等级,具有 DEBUG < INFO < WARN < ERROR < FATAL。
用相同的参数调用 log4net.LogManager.GetLogger 方法总是返回引用一个完全相同 logger 对象。如下所示:
ILog x = LogManager.GetLogger("wombat");
ILog y = LogManager.GetLogger("wombat");
x 和 y 完全引用一个相同的 logger 对象。
因此,有可能配置一个日志器,然后在代码中的任何地方都可以检索到相同的实例。在生物学上,父母总是先于它们的孩子,而 log4net 日志器可以以任何顺序创建和配置。具体地说,一个“父”日志器将发现和链接到它的后代,即使它在它的后代之后才实例化。
log4net 环境的配置通常是在应用程序初始化。优先的方法是读取一个配置文件。
追加器(Appenders)
已经实现的输出方式有:
- AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。
- AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。
- AspNetTraceAppender 能用asp.net中Trace的方式查看记录的日志。
- BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。
- ConsoleAppender 将日志输出到应用程序控制台。
- EventLogAppender 将日志写到Windows Event Log。
- FileAppender 将日志输出到文件。
- ForwardingAppender 发送日志事件到子Appenders。
- LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。
- MemoryAppender 将日志存到内存缓冲区。
- NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
- OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。
- RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。
- RemotingAppender 通过.NET Remoting将日志写到远程接收端。
- RollingFileAppender 将日志以回滚文件的形式写到文件中。
- SmtpAppender 将日志写到邮件中。
- SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。
- TelnetAppender 客户端通过Telnet来接受日志事件。
- TraceAppender 将日志写到.NET trace 系统。
- UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。
AdoNetAppender:
MS SQL Server:
CREATE TABLE [dbo].[Log] ( [Id] [int] IDENTITY (1, 1) NOT NULL, [Date] [datetime] NOT NULL, [Thread] [varchar] (255) NOT NULL, [Level] [varchar] (50) NOT NULL, [Logger] [varchar] (255) NOT NULL, [Message] [varchar] (4000) NOT NULL, [Exception] [varchar] (2000) NULL )
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value=http://www.mamicode.com/"100" /> <connectionType value=http://www.mamicode.com/"System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value=http://www.mamicode.com/"data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" /> <commandText value=http://www.mamicode.com/"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> <parameter> <parameterName value=http://www.mamicode.com/"@log_date" /> <dbType value=http://www.mamicode.com/"DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@thread" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%thread" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@log_level" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%level" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@logger" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%logger" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@message" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%message" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@exception" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender>
MS Access:
<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value=http://www.mamicode.com/"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\log\access.mdb;User Id=;Password=;" /> <commandText value=http://www.mamicode.com/"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" /> <parameter> <parameterName value=http://www.mamicode.com/"@log_date" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%date" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@thread" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%thread" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@log_level" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%level" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@logger" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%logger" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@message" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"1024" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%message" /> </layout> </parameter> </appender>
Oracle9i:
create table log ( Datetime timestamp(3), Thread varchar2(255), Log_Level varchar2(255), Logger varchar2(255), Message varchar2(4000) );
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> <connectionType value=http://www.mamicode.com/"System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value=http://www.mamicode.com/"data source=[mydatabase];User ID=[user];Password=[password]" /> <commandText value=http://www.mamicode.com/"INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" /> <bufferSize value=http://www.mamicode.com/"128" /> <parameter> <parameterName value=http://www.mamicode.com/":log_date" /> <dbType value=http://www.mamicode.com/"DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value=http://www.mamicode.com/":thread" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%thread" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/":log_level" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%level" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/":logger" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%logger" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/":message" /> <dbType value=http://www.mamicode.com/"String" /> <size value=http://www.mamicode.com/"4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%message" /> </layout> </parameter> </appender>
SQLite:
CREATE TABLE Log ( LogId INTEGER PRIMARY KEY, Date DATETIME NOT NULL, Level VARCHAR(50) NOT NULL, Logger VARCHAR(255) NOT NULL, Message TEXT DEFAULT NULL );
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value=http://www.mamicode.com/"100" /> <connectionType value=http://www.mamicode.com/"Finisar.SQLite.SQLiteConnection, SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c" /> <connectionString value=http://www.mamicode.com/"Data Source=c:\\inetpub\\wwwroot\\logs\\log4net.db;Version=3;" /> <commandText value=http://www.mamicode.com/"INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" /> <parameter> <parameterName value=http://www.mamicode.com/"@Date" /> <dbType value=http://www.mamicode.com/"DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@Level" /> <dbType value=http://www.mamicode.com/"String" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%level" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@Logger" /> <dbType value=http://www.mamicode.com/"String" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%logger" /> </layout> </parameter> <parameter> <parameterName value=http://www.mamicode.com/"@Message" /> <dbType value=http://www.mamicode.com/"String" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=http://www.mamicode.com/"%message" /> </layout> </parameter> </appender>
实际上,你会发现,建立数据表都是差不多的,appender配置几乎也一致。如果我们每种数据库的表字段都保持一致,实际上,只需要改:connectionType、connectionString、commandText
<connectionType value="http://www.mamicode.com/Npgsql.NpgsqlConnection, Npgsql" /> <connectionString value="http://www.mamicode.com/Server=localhost;Port=5432;Database=pp_log;User Id=postgres;Password=123;" /> <commandText value="http://www.mamicode.com/INSERT INTO log (date,thread,level,logger,message,exception) VALUES (:log_date, :thread, :log_level,:logger, :message, :exception)" />
AspNetTraceAppender:
这段配置可将日志信息输出到页面的Trace上下文环境。如果日志的级别低于WARN,会以System.Web.TraceContext.Write方法输出;如果级别为WARN或WARN以上则会以System.Web.TraceContext.Warn方法输出,下图中的日志信息的不同颜色可以说明这一点。 效果图如下:
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="http://www.mamicode.com/%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
BufferingForwardingAppender :
BufferingForwardingAppender的主要作用是将输出到指定类型(这里是LogFileAppender)的Appender的日志信息进行缓存。bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些日志批量输出。appender-ref属性指定了缓存的Appender类型,同root节点一样,这里可以指定多个。
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > <bufferSize value="http://www.mamicode.com/5"/> <lossy value="http://www.mamicode.com/true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="http://www.mamicode.com/WARN"/> </evaluator> <appender-ref ref="LogFileAppender" /> <appender-ref ref="AspNetTraceAppender" /> </appender>
ColoredConsoleAppender:
ColoredConsoleAppender将日志信息输出到控制台。默认情况下,日志信息被发送到控制台标准输出流。下面这个示例演示了如何高亮显示Error信息。
<!-- 控制台前台显示日志 --> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="http://www.mamicode.com/ERROR" /> <foreColor value="http://www.mamicode.com/Red, HighIntensity" /> </mapping> <mapping> <level value="http://www.mamicode.com/Info" /> <foreColor value="http://www.mamicode.com/Green" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="http://www.mamicode.com/%n%date{HH:mm:ss,fff} [%-5level] %m" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="http://www.mamicode.com/Info" /> <param name="LevelMax" value="http://www.mamicode.com/Fatal" /> </filter> </appender>
ConsoleAppender:
ConsoleAppender将日志信息输出到控制台标准输出流。
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <target value="http://www.mamicode.com/Console.Error" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="http://www.mamicode.com/%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
EventLogAppender:
EventLogAppender将日志写入本地机器的应用程序事件日志中。默认情况下,该日志的源(Source)是AppDomain.FriendlyName,也可以手动指定其它名称。
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="http://www.mamicode.com/%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender>
FileAppender:
FileAppender将日志信息输出到指定的日志文件。
File指定了文件名称,可以使用相对路径,此时日志文件的位置取决于项目的类型(如控制台、Windows Forms、ASP.NET等);也可以使用绝对路径;甚至可以使用环境变量,如<file value="http://www.mamicode.com/${TMP}/log-file.txt" />。
AppendToFile指定是追加到还是覆盖掉已有的日志文件。
还可以添加如下属性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="http://www.mamicode.com/WebUtilClient.log" /> <param name="AppendToFile" value="http://www.mamicode.com/true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="http://www.mamicode.com/%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <param name= "File" value= http://www.mamicode.com/"D:\App_Log\Servicelog\TestLog\"/> <!--是否是向文件中追加日志--> <param name= "AppendToFile" value= http://www.mamicode.com/"true"/> <!--log保留天数--> <param name= "MaxSizeRollBackups" value= http://www.mamicode.com/"10"/> <!--日志文件名是否是固定不变的--> <param name= "StaticLogFileName" value= http://www.mamicode.com/"false"/> <!--日志文件名格式为:2008-08-31.log--> <param name= "DatePattern" value= http://www.mamicode.com/"yyyy-MM-dd".read.log""/> <!--日志根据日期滚动--> <param name= "RollingStyle" value= http://www.mamicode.com/"Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value=http://www.mamicode.com/"%d [%t] %-5p %c - %m%n %loggername" /> </layout> </appender>
日志器可以采用多个追加器,在配置文件中,可以直接这样使用:
<root> <level value="http://www.mamicode.com/ALL" /> <appender-ref ref="ColoredConsoleAppender" /> <appender-ref ref="UdpAppender" /> </root>
Log4net_配置