Log4j快速使用
1.工程目录:
在src下Log4j.proerties配置文件会自动读取
2.log4jExample.java
package log4jTest;
import org.apache.log4j.Logger;
public class Log4jExample {
static Logger log = Logger.getLogger(Log4jExample.class.getName());
public static void main(String[] args){
log.debug("Hello!!!");
}
}
3.log4j.properties配置
log4j.rootLogger = debug,a1,a2 //最低级别,两个appender对象
# console
log4j.appender.a1 = org.apache.log4j.ConsoleAppender //输出源控制台
log4j.appender.a1.Target = System.out
log4j.appender.a1.layout = org.apache.log4j.PatternLayout //输出格式
log4j.appender.a1.layout.ConversionPattern = [%-5p]%d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
#file
log4j.appender.a2 = org.apache.log4j.DailyRollingFileAppender //输出源文件夹
log4j.appender.a2.File = logs/log4j.log
log4j.appender.a2.Append = true //输出
log4j.appender.a2.Threshold = DEBUG //阈值,debug以上输出
log4j.appender.a2.layout = org.apache.log4j.PatternLayout
log4j.appender.a2.layout.ConversionPattern = %-d{yyyy-MM-mm HH:mm:ss} [%t:%r] - [%p] %m%n
4.结果:在console下输出:*****(省略)*****hello!!!同时会在log文件下新建log4j.log文件,文件内输出:2017-01-33 11:33:55 [main:0] - [DEBUG] Hello!!!
5.重点在于配置文件
logger可输出级别:
ALL 所有级别,包括定制级别。 DEBUG 指明细致的事件信息,对调试应用最有用。 ERROR 指明错误事件,但应用可能还能继续运行。 FATAL 指明非常严重的错误事件,可能会导致应用终止执行。 INFO 指明描述信息,从粗粒度上描述了应用运行过程。 OFF 最高级别,用于关闭日志。 TRACE 比 DEBUG 级别的粒度更细。 WARN 指明潜在的有害状况。
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
1.配置最低级别,并声明appender对象
2.分别设置appender对象的属性值
6.日志格式
所有
Layout
对象从
Appender
对象那里接收一个
LoggingEvent
对象,然后从
LoggingEvent
对象那里获取信息,并使用恰当的
ObjectRenderer
对象获取该信息的字符串形式。
7.xml配置log4j
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Log4j:configuration SYSTEM "Log4j.dtd">
<Log4j:configuration>
<appender name="FILE" class="org.apache.Log4j.FileAppender">
<param name="file" value="${log}/log.out"/>
<param name="immediateFlush" value="true"/>
<param name="threshold" value="debug"/>
<param name="append" value="false"/>
<layout class="org.apache.Log4j.PatternLayout">
<param name="conversionPattern" value="%m%n"/>
</layout>
</appender>
<logger name="Log4j.rootLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="FILE"/>
</logger>
</Log4j:configuration>
8.扩展
org.apache.Log4j. RollingFileAppender:
maxFileSize 这是文件大小的关键值,大于该值时,文件会回滚。该值默认为 10 MB。 maxBackupIndex 该值表示备份文件的个数,默认为 1。
每个日志文件最大为 10 MB,maxBackupIndex=2, 如果超过该最大值,则会生成一个新的日志文件。由于 maxBackupIndex
的值为 2,当第二个文件的大小超过最大值时,会擦去第一个日志文件的内容,所有的日志都回滚至第一个日志文件。
org.apache.Log4j.DailyRollingFileAppender:
DatePattern 该属性表明什么时间回滚文件,以及文件的命名约定。缺省情况下,在每天午夜回滚文件。
DatePattern 描述 '.' yyyy-MM 在本月末,下月初回滚文件。 '.' yyyy-MM-dd 在每天午夜回滚文件,这是缺省值。 '.' yyyy-MM-dd-a 在每天中午和午夜回滚文件。 '.' yyyy-MM-dd-HH 在每个整点回滚文件。 '.' yyyy-MM-dd-HH-mm 每分钟回滚文件。 '.' yyyy-ww 根据地域,在每周的第一天回滚。
org.apache.Log4j.jdbc.JDBCAppender:
属性 描述 bufferSize 设置缓冲区大小,缺省为 1。 driver 以字符串形式设置驱动类,如果未设置,缺省为 sun.jdbc.odbc.JdbcOdbcDriver 。 layout 设置 layout,缺省为 org.apache.Log4j.PatternLayout 。 password 设置数据库密码。 sql 设置每次日志事件触发时需要执行的 SQL 语句,该语句可以是 INSERT、UPDATE 或 DELETE。 URL 设置 JDBC URL. user 设置数据库用户名。
建表
CREATE TABLE LOGS
(USER_ID VARCHAR(20) NOT NULL,
DATED DATE NOT NULL,
LOGGER VARCHAR(50) NOT NULL,
LEVEL VARCHAR(10) NOT NULL,
MESSAGE VARCHAR(1000) NOT NULL
);
Log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')
USER_ID | DATED | LOGGER | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
| | 2010-05-13 | Log4jExample | DEBUG | Debug |
这里 x 用来输出和生成日志事件线程相关联的嵌套诊断上下文(NDC),我们使用 NDC 在处理多个客户端的服务器端来区分客户端,具体请查阅 Log4j 手册。
转换字符 含义 c 使用它为输出的日志事件分类,比如对于分类 "a.b.c",模式 %c{2} 会输出 "b.c" 。 C 使用它输出发起记录日志请求的类的全名。比如对于类 "org.apache.xyz.SomeClass",模式 %C{1} 会输出 "SomeClass"。 d 使用它输出记录日志的日期,比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。 F 在记录日志时,使用它输出文件名。 l 用它输出生成日志的调用者的地域信息。 L 使用它输出发起日志请求的行号。 m 使用它输出和日志事件关联的,由应用提供的信息。 M 使用它输出发起日志请求的方法名。 n 输出平台相关的换行符。 p 输出日志事件的优先级。 r 使用它输出从构建布局到生成日志事件所花费的时间,以毫秒为单位。 t 输出生成日志事件的线程名。 x 输出和生成日志事件线程相关的 NDC (嵌套诊断上下文)。 X 该字符后跟 MDC 键,比如 X{clientIP} 会输出保存在 MDC 中键 clientIP 对应的值。 % 百分号, %% 会输出一个 %。
格式修饰符 左对齐 最小宽度 最大宽度 注释 %20c 否 20 无 如果列名少于 20 个字符,左边使用空格补齐。 %-20c 是 20 无 如果列名少于 20 个字符,右边使用空格补齐。 %.30c 不适用 无 30 如果列名长于 30 个字符,从开头剪除。 %20.30c 否 20 30 如果列名少于 20 个字符,左边使用空格补齐,如果列名长于 30 个字符,从开头剪除。 %-20.30c 是 20 30 如果列名少于 20 个字符,右边使用空格补齐,如果列名长于 30 个字符,从开头剪除。