catchlog是什么软件_Log4net⽇志使⽤介绍
概述
Log4net 有三个主要组件:loggers,appenders 和 layouts。这三个组件⼀起⼯作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运⾏时控制信息的格式化和信息的写⼊位置(如控制台,⽂件,内存,数据库等)。过滤器(filter)帮助这些组件,控制追加器(appender)的⾏为和把对象转换成字符串的对象渲染。
如果对log4net的基本使⽤并不是很清楚,可以参考我的另⼀遍介绍:Log4net⼊门使⽤
⽇志(Loggers)
⽇志请求是通过调⽤⼀个⽇志实例的打印⽅法(log4net.ILog)完成。这些打印⽅法是Debug、Info、Warn、Error和Fatal。
根据定义,打印⽅法决定⽇志请求的等级。例如,如果 log 是⼀个⽇志器的实例,那么,语句 log.Info("..") 是等级为 INFO 的⽇志请求。
如果它的等级⼤于等于它⽇志器的等级,那么⽇志请求就被认为已启⽤。否则,请求被认为禁⽤。没有分配等级的⽇志器将从层次上继承。规则如下:
Basic Selection Rule
A log request of levelLin a logger with (either assigned or inherited, whichever is appropriate) levelK, is enabled ifL >= K.
该规则是 log4net 的核⼼。它假设等级是有序的。对于标准等级,具有 DEBUG < INFO < WARN < ERROR < FATAL。
⽤相同的参数调⽤ log4net.LogManager.GetLogger ⽅法总是返回引⽤⼀个完全相同 logger 对象。如下所⽰:
ILog x = LogManager.GetLogger("wombat");
ILog y = LogManager.GetLogger("wombat");
universalstudiox 和 y 完全引⽤⼀个相同的 logger 对象。
因此,有可能配置⼀个⽇志器,然后在代码中的任何地⽅都可以检索到相同的实例。在⽣物学上,⽗母总是先于它们的孩⼦,⽽ log4net ⽇志器可以以任何顺序创建和配置。具体地说,⼀个“⽗”⽇志器将发现和链接到它的后代,即使它在它的后代之后才实例化。
log4net 环境的配置通常是在应⽤程序初始化。优先的⽅法是读取⼀个配置⽂件。
追加器(Appenders)
已经实现的输出⽅式有:
AdoNetAppender 将⽇志记录到数据库中。可以采⽤SQL和存储过程两种⽅式。
chee是什么意思AnsiColorTerminalAppender 将⽇志⾼亮输出到ANSI终端。
AspNetTraceAppender 能⽤中Trace的⽅式查看记录的⽇志。
BufferingForwardingAppender 在输出到⼦Appenders之前先缓存⽇志事件。
ConsoleAppender 将⽇志输出到应⽤程序控制台。
EventLogAppender 将⽇志写到Windows Event Log。
FileAppender 将⽇志输出到⽂件。
ForwardingAppender 发送⽇志事件到⼦Appenders。
LocalSyslogAppender 将⽇志写到local syslog rvice (仅⽤于UNIX环境下)。
MemoryAppender 将⽇志存到内存缓冲区。
NetSendAppender 将⽇志输出到Windows Mesnger rvice.这些⽇志信息将在⽤户终端的对话框中显⽰。
OutputDebugStringAppender 将⽇志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可⽤,将忽略消息。
RemoteSyslogAppender 通过UDP⽹络协议将⽇志写到Remote syslog rvice。
RemotingAppender 通过 Remoting将⽇志写到远程接收端。
RollingFileAppender 将⽇志以回滚⽂件的形式写到⽂件中。
SmtpAppender 将⽇志写到邮件中。
SmtpPickupDirAppender 将消息以⽂件的⽅式放⼊⼀个⽬录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。TelnetAppender 客户端通过Telnet来接受⽇志事件。
TraceAppender 将⽇志写到 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
)
despiteofappender配置:
MS Access
建⽴数据表同“MS SQL Server”
appender配置:
Oracle9i
建⽴数据表:
create table log (
Datetime timestamp(3),
doubleclick>normallyThread varchar2(255),
Log_Level varchar2(255),
Logger varchar2(255),
Message varchar2(4000)
);
roomieappender配置:
SQLite
建⽴数据表:
CREATE TABLE Log (
LogId INTEGER PRIMARY KEY,
Date DATETIME NOT NULL,
Level VARCHAR(50) NOT NULL,
barleyLogger VARCHAR(255) NOT NULL,
Message TEXT DEFAULT NULL
);
appender配置:
实际上,你会发现,建⽴数据表都是差不多的,appender配置⼏乎也⼀致。如果我们每种数据库的表字段都保持⼀致,实际上,只需要改:connectionType、connectionString、commandText
postgres
IBM DB2
AspNetTraceAppender
这段配置可将⽇志信息输出到页⾯的Trace上下⽂环境。如果⽇志的级别低于WARN,会以System.Web.TraceContext.Write⽅法输出;如果级别为WARN或WARN以上则会以System.Web.Trac
eContext.Warn⽅法输出,下图中的⽇志信息的不同颜⾊可以说明这⼀点。 效果图如下:
BufferingForwardingAppender
BufferingForwardingAppender的主要作⽤是将输出到指定类型(这⾥是LogFileAppender)的Appender的⽇志信息进⾏缓存。bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些⽇志批量输出。appender-ref属性指定了缓存的Appender类型,同root节点⼀样,这⾥可以指定多个。
ColoredConsoleAppender
ColoredConsoleAppender将⽇志信息输出到控制台。默认情况下,⽇志信息被发送到控制台标准输出流。下⾯这个⽰例演⽰了如何⾼亮显⽰Error信息。
效果如图:
ConsoleAppender
ConsoleAppender将⽇志信息输出到控制台标准输出流。
EventLogAppender
EventLogAppender将⽇志写⼊本地机器的应⽤程序事件⽇志中。默认情况下,该⽇志的源(Source)是AppDomain.FriendlyName,也可以⼿动指定其它名称。
FileAppender
FileAppender将⽇志信息输出到指定的⽇志⽂件。
File指定了⽂件名称,可以使⽤相对路径,此时⽇志⽂件的位置取决于项⽬的类型(如控制台、Windows Forms、ASP等);也可以使⽤绝对路径;甚⾄可以使⽤环境变量,如。
AppendToFile指定是追加到还是覆盖掉已有的⽇志⽂件。
还可以添加如下属性来使⽤最⼩锁定模型(minimal locking model),以允许多个进程可以写⼊同⼀个⽂件。
ForwardingAppender
详情参考log4net.Appender.ForwardingAppender SDK ⽂档。ForwardingAppender可以⽤来为⼀个Appender指定⼀组约束。看下⾯这个⽰例:
在这个⽰例中,为ConsoleAppender添加了约束,Threshold为WARN。这意味着对于⼀条⽇志信息,如果直接使⽤ConsoleAppender,那么不论它是什么级别,总会进⾏输出,⽽如果使⽤这个ForwardingAppender,则只有那些WARN或WARN以上的⽇志才会发送到ConsoleAppender。
MemoryAppender
详情参考log4net.Appender.MemoryAppender SDK ⽂档。似乎不应该使⽤配置⽂件来配置MemoryAppender,但如果你⾮要这么做,看看这个⽰例(未验证):
NetSendAppender
NetSendAppender向特定⽤户的屏幕发送消息(未验证)。
OutputDebugStringAppender
下⾯这个例⼦描述了如何配置该Appender以向OutputDebugString API写⼊⽇志(未验证)。
RemotingAppender
详情参考
RollingFileAppender
详情参考log4net.Appender.RollingFileAppender SDK ⽂档。
RollingFileAppender以FileAppender为基础,与后者有着相同的配置选项。
下⾯这个例⼦演⽰了如何配置RollingFileAppender以写⼊⽂件。写⼊的⽂件名总是为(StaticLogFileName参数指定为true);根据⽂件⼤⼩(RollingStyle)来⽣成新的⽂件;最多保存有10个⽂件(MaxSizeRollBackups属性,⽽且⼀旦写满10个⽂件,就不再写⼊⽇志了),每个⽂件最⼤为10KB。这些⽂件名称为1, 2…等。
当然 ,这种⽅法也是我平时使⽤最多的⼀种⽅式,平时使⽤的配置如下:
SmtpAppender详情
SmtpAppender通过Smtp邮件服务器发送⽇志信息:
将其中的to、from、urname、password、subject、smtpHost配置正确才可能发送成功。bufferSize可将多条信息打包在⼀个邮件中,上⾯配置了512,指的是将512条⽇记⼀起打包后发送。evaluator可以对⽇志进⾏过滤。
SmtpPickupDirAppender
详情参考log4net.Appender.SmtpPickupDirAppender SDK ⽂档。
配置与SmtpAppender类似,但要把SmtpHost换为PickupDir(未验证)。
TraceAppender
详情参考log4net.Appender.TraceAppender SDK ⽂档。
TraceAppender将⽇志信息写⼊System.Diagnostics.Trace系统(出现在输出窗⼝)。
UdpAppender
下例演⽰了如何配置UdpAppender(未验证):
⽇志器可以采⽤多个追加器,在配置⽂件中,可以直接这样使⽤:
上⾯分别使⽤了“输出控制台”及“UdpAppender”追加⽅式。
筛选(Filters)
追加器可以筛选被传递给它们的事件。在配置中指定过滤器,允许更好地控制通过不同的追加器记录的事件。
控制的最简单形式是在追加器中指定阈值。
更复杂的和⾃定义事件过滤可以使⽤每个追加器中定义的过滤器链来完成。过滤器必须实现 log4net.Filter.IFilter 接⼝。
下表列出 log4net 中定义的过滤器:
过滤器可以被配置为根据匹配接受或拒绝事件。
布局(Layouts)
很多时候,⽤户不仅希望⾃定义输出⽬的地,还要定义输出格式。这是通过与追加器相关的布局(layout)来实现的。布局负责根据⽤户意愿格式化⽇志请求,⽽⼀个追加器负责发送已格式化的输出到⽬的地。 PatternLayout,是标准的 log4net 的⼀部分,让⽤户根据转换模式指定数据格式,类似于 C 语⾔ printf。
例如,带转换模式的 PatternLayout "%timestamp [%thread] %-5level %logger - %message%newline" 将会输出:
176 [main] INFO Com.Foo.Bar - Located nearest gas station.
第⼀个域是流逝毫秒时间;第⼆个域是⽇志请求的线程;第三个域⽇志语句等级,如 INFO、WARN、ERROR 等;第四个域是与⽇志请求相关的⽇志器的名称。“-”后⾯的⽂本是具体消息。
下表是 log4net 中定义的布局:
类型
描述
Renders the exception text from the logging event.
韩国英文怎么写
Formats the logging event according to a flexible t of formatting flags.
Extracts the timestamp from the logging event.
Extracts the timestamp from the logging event in Universal Time.powerful
Formats the logging event very simply: [level] - [message]
Formats the logging event as an XML element.
Formats the logging event as an XML element that complies with the log4j event dtd.
由于PatternLayout布局⾮常重要,下⾯具体再介绍:
下表是可以识别的转换模式名称:
转换模式名称
效果
a
等价于appdomain
appdomain
⽤于输出当产⽣⽇志事件时的 AppDomain 名称。
aspnet-cache
指定%aspnet-cache时输出所有 cache 项;指定%aspnet-cache{key}时只输出 key 指定的项。
该模式对 Compact Framework or Client Profile 不可⽤。
aspnet-context