log4j

来源:互联网 发布:傻瓜进销存软件破解版 编辑:程序博客网 时间:2024/05/21 04:18

java简单的使用log4j

1 引入log4j需要的jar包 :

commons-logging:apache最早提供的日志的接口

log4j:内部把日志系统抽象封装成Logger、aperder、pattern等。


2 配置log4j.properties文件,如:

#定义输出根日志级别和名称,根据级别输出日志
log4j.rootLogger=INFO, stdout,R,D


### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=techdeal.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d- %l [TS] %p %t %c - %m%n

#1 定义新的日志logger
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
#2 定义错误日志文件名称,相对路径,该日志在tomcat的bin/logs/schoolDealError.log中
log4j.appender.D.File=logs/schoolDealError.log
#3 *只输出ERROR级别以上的日志!避免文件中日志过多
log4j.appender.D.Threshold=ERROR
#4 定义日志输出形式
log4j.appender.D.layout=org.apache.log4j.PatternLayout
#5 定义日志打印格式
log4j.appender.D.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


Log4j:

Log4j的组成:
Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。
Logger:控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制:Appenders指定了日志将打印到控制台还是文件中;而Layout则控制日志信息的显示格式。

1 日志级别

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
A:off         最高等级,用于关闭所有日志记录。
B:fatal       指出每个严重的错误事件将会导致应用程序的退出。
C:error      指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm     表明会出现潜在的错误情形。
E:info         一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug     一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all           最低等级,用于打开所有日志记录。

一般 只用error,warm,info,debug

2 appender:

   org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3 layout:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

4 打印参数:

 %m   输出代码中指定的消息
  %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   输出自应用启动到输出该log信息耗费的毫秒数 
  %c   输出所属的类目,通常就是所在类的全名 
  %t   输出产生该日志事件的线程名 
  %n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” 
  %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss
 ,SSS},输出类似:2002年10月18日  22  10  28  921 
 
  %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:
 10 )

获取自定义logger,如

在需要使用log4j的地方获取Logger实例
如下是RoleDAO类中的使用例子:
static Logger log = Logger.getLogger("DAO");
注意这里使用"DAO"标识符,那么对应的在配置文件中对应的配置信息如下:

#定义DAO Logger
log4j.logger.DAO=DEBUG,A2
#设置Appender A2的属性

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A2.file=demolog4j.appender.A2.DatePattern='.'yyyy-MM-ddlog4j.appender.A2.layout=org.apache.log4j.PatternLayoutlog4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%npublic class RoleDAO extends BaseDBObject{...static Logger log = Logger.getLogger("DAO");...public BeanCollection selectAll() throws SQLException{StringBuffer sql = new StringBuffer(SQLBUF_LEN);sql.append("SELECT * FROM " + tableName + " order by roldId");//System.out.println(sql.toString());log.debug(sql);...}...}

怎么解决:
在系统启动时执行一次PropertyConfigurator.configure("log4j.properties");
之后就不再执行。 


参考:

http://blog.csdn.net/bopzhou/article/details/6458603

http://blog.csdn.net/azheng270/article/details/2173430/

0 0