log的一些基本配置
今天看了一些log方面的东西.以前学过都忘记了...
?
首先如果自己写log,简单的用静态类就可以实现.那只是一些io上的操作,既然有现成的好用的框架,我们就使用咯...
?
首先commons-logging(jcl),是一个简单的log架包,提供一个日记的接口,同时又兼顾了其他日记的实现工具.他可以是一个
?
独立体也可以同时兼容其他的log(例如log4j).
?
JCL有两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)。
?
首先来说jcl的实现.
?
简单的方法,不需要配置文件,找到commons-logging-**.jar.把它加载到项目的classpath中.在你需要写日记的类中增加
?
private final Log log = LogFactory.getLog(getClass());log.info("11111");.....
?
?
这样的输出效果类似system.out.println("");当然这是最简单的方法..在项目初期你可以使用这种方法进行调试.
?
日记有些能动性,这方面log4j做的不错.很多的信息只需要在配置文件中修改,你可以看见的效果就完全不一样.
?
接着jcl整合log4j
?
JCL采用的记录器的不同其设置内容也不同。Log4J是默认首选记录器.
?
在classes同级目录创建一个commons-logging.properties
?
里面指定访问的记录器
?
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
?
当然这个配置文件针对log4j写与不写都没什么问题,最后你可以删除这个配置文件尝试下..
?
接着就是log4j的配置,配置文件有2种类型xml和properties,首先会寻找xml文件,没有的话寻找properties文件..
?
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="stdout" /></layout></appender><appender name="file"/></layout><param name="File" value="c:/tt.log" /><!-- 输出路径 --><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /><!--<param name="MaxBackupIndex" value="10" /> 最大数量为10个,对按日期输出没有效果(DailyRollingFileAppender) --><param name="MaxFileSize" value="10000" /><!-- 设置最大值单位为B --><param name="Append" value="true" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --></appender><root><!-- 设置接收所有输出的通道 --><priority value="info" /><!-- 输出等级 info,debug--><!--<appender-ref ref="file" /> 与前面的通道id相对应 --><appender-ref ref="stdout" /><!-- 与前面的通道id相对应 --></root></log4j:configuration>
?
?
### logger的配置 ####配置根loggerlog4j.rootLogger=info,file ### direct log messages to stdout ### (标准的终端输出)#控制台输出log4j.appender.stdout=org.apache.log4j.ConsoleAppender#自定义输出布局log4j.appender.stdout.layout=org.apache.log4j.PatternLayout#输出的格式log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file ttt.log ### (输入到文件ttt.log的配置)#输出到滚动文件log4j.appender.file=org.apache.log4j.RollingFileAppender#输出文件最大为10Mlog4j.appender.file.MaxFileSize=10MB#输出文件最大序号为10log4j.appender.file.MaxBackupIndex=10#输出文件路径log4j.appender.file.File=C:/ttt.log#自定义输出布局log4j.appender.file.layout=org.apache.log4j.PatternLayout#输出格式log4j.appender.file.layout.ConversionPattern=%d %-5p [%t] (%13F:%L) %3x - %m%n
?
上面贴的2个配置文件功能基本相似,处理在file有些不同外,大概意思是差不多的...至于哪种速度快,没有考究过,可能xml会
?
快点吧.
?
这样配置下,可以不用修改原来使用jcl的时候的任何log代码,直接就可以把你的log输出形式给换了...如果觉的不舒服,你可
?
以把log4j给删了,影响也不大.
?
备注:
每个logger都有一个日志级别,用来控制日志的输出。未分配级别的logger将自动继承它最近的父logger的日志级别。Logger的由低到高级别如下:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFFLogger的级别越低,输出的日志越详细。
?
Log4j提供了以下几个实现:? org.apache.log4j.ConsoleAppender(控制台)? org.apache.log4j.FileAppender(文件)? org.apache.log4j.DailyRollingFileAppender(每天都产生一个日志文件)? org.apache.log4j.RollingFileAppender(文件大小达到指定尺寸时产生一个新的日志文件,文件名称上会自动添加数字序号。)? org.apache.log4j.WriterAppender(将日志信息以流的格式发送到任意指定的地方)默认情况下,子logger将继承父logger的所有appenders。 rootlogger拥有目标为system.out的consoleAppender,故默认情况下,所有的logger都将继承该appender。
?
Log4j提供Layout有以下几种:? org.apache.log4j.HTMLLayout(以HTML表格形式布局)? org.apache.log4j.PatternLayout(可以灵活地指定布局模式)? org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)? org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
?
?
%m:输出代码中指定的消息。%p:输出优先级。%r:输入自应用启动到输出该log信息耗费的毫秒数。%c:输出所属的类目,通常就是所在类的全名。%t:输出产生该日志线程的线程名。%n:输出一个回车换行符。Windows平台为“\r\n”,UNIX为“\n”。%d:输出日志时间点的日期或时间,默认格式为ISO8601,推荐使用“%d{ABSOLUTE}”,这个输出格式形如:“2007-05-07 18:23:23,500”,符合中国人习惯。%l:输出日志事件发生的位置,包括类名、线程名,以及所在代码的行数。
?