Posted on 2008-12-22 18:28
巴西木 阅读(1219)
评论(0) 编辑 收藏 引用 所属分类:
Java
首先认识一下log4j:
一.Log4j的基本概念
1.Logger: 日志记录器.
日志的级别 级别越低 日志记录将更详细
级别有(由高到底)off,fatal,error,warn,info,debug,all 级别高的可覆盖级别低的日志输出
2.Appender: 输出端 指定日志输出到那个地方.一个Logger可以有多个Appender输出端,每个Appender输出端也可以被多个Logger使用.
常用的输出端有:
ConsoleAppender 将日志输出到控制台
org.apache.log4j.rolling.RollingFileAppender 可指定文件和日期的输出端
WriterAppender 将日志以流格式发送到任何指定的地方
JDBCAppender 通过JDBC把日志输出到数据库中
3.Layout: 日志格式化
log4j有三种Layout:
HTMLLayout 格式化日志输出为HTML表格;
PatternLayout 根据指定的格式(ConversionPattern)格式化日志输出(常用)
SimpleLayout 以非常简单的方式输出
二.配置
1. log4j的配置文件 log4j.xml
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE configuration >
3<configuration xmlns='http://logging.apache.org/' debug="true">
4
5 <!-- 把日志输出到控制台中 -->
6 <appender name="console" class="org.apache.log4j.ConsoleAppender">
7 <layout class="org.apache.log4j.PatternLayout">
8 <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) %m%n" />
9 </layout>
10 </appender>
11
12 <!-- 把日志按日期输出到日期日志文件中 -->
13 <appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
14 <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
15 <param name="FileNamePattern" value="${catalina.home}/log4jlogs/mywebsite.%d{yyyy-MM-dd}.log.zip" />
16 </rollingPolicy>
17 <layout class="org.apache.log4j.PatternLayout">
18 <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} %p [%t] %C{2} (%F:%L) - %m%n" />
19 </layout>
20 </appender>
21
22
23 <!-- 终端日志文件 -->
24 <appender name="terminal-logger" class="org.apache.log4j.DailyRollingFileAppender">
25 <param name="File" value="${catalina.home}/logs/kiosks/TerminalService.log" />
26 <param name="Append" value="true" />
27 <layout class="org.apache.log4j.PatternLayout">
28 <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [%p] [%t] (%F:%L): %m%n" />
29 </layout>
30 <filter class="org.apache.log4j.varia.LevelRangeFilter">
31 <param name="levelMin" value="INFO" />
32 <param name="AcceptOnMatch" value="true" />
33 </filter>
34 </appender>
35 <logger name="com.macaufly.kiosks">
36 <level value="INFO" />
37 <appender-ref ref="terminal-logger" />
38 </logger>
39
40
41 <!-- 设置接收所有输出的通道(但在logger中定义的级别在这里不起作用) -->
42 <root>
43 <level value="debug" /><!-- 设置级别 -->
44 <appender-ref ref="console" />
45 </root>
46 <!--
47 设置域名限制,即 com.dchaoxiong.studentmanage.servlets
48 包及以下的日志均输出到下面指定的通道(appender-ref)中
49 -->
50 <logger name="com.dchaoxiong.studentmanage.servlets">
51 <level value="debug" /> <!-- 设置级别 -->
52 <appender-ref ref="ROLL" /><!-- 与前面的通道id相对应 -->
53 </logger>
54</configuration>
2. 把该配置文件放在工程的类路径下
3.private Logger logger = Logger.getLogger(ClassName.class);取得loger类
在log4j中定义了5个级别的日志等级:
ERROR - A definite problem (最少)
WARN - Likely a problem, but can live with it
INFO - Common notifications, lifecycle stuff
DEBUG - Low volume debug
TRACE - High volume debug (最多)
今天解决的问题是如何不让jboss在后台打出过多的信息:
开始还以为是自己的log4j打出来的,居然连hibernate连数据库的密码都打出来,狂汗;
后来改了一通自己的log4j.xml,一点作用都没起,一查,原来自己的log4j都没有启用,瀑布汗;
于是,把矛头指向jboss,搜索“log4j”,出来三个log4j.xml,其中有一个在defaul下面的应该是我用到的;
修改一通,把org.hibernate的设置为error,噢耶,小功告成。
总结一下:
1.jboss里面默认带了log4j的
2.据说,如果项目中也启用log4j,可能会和jboss的冲突;
3.jboss中的log4j也不知道是哪个版本的,我们平常使用的<logger>元素在那里是要用<category>的;
4.想把项目的log输出到file,而其他的都依然console&file,还没成功,ps:只是现在还没成功,最终应该是没有问题的。
最后,Aramil提供了一个文档,也许能解决更多疑惑:JBossLog4j.zip