Log4j的简单教程

一、概述

Log4j是一个开源的项目,早在JDK1.4之前就开始流行起来了,起源于1996年的EU SEMPER项目,威龙简单灵活的方式追踪程序运行情况,该项目决定编写一套日志系统API,经过无数次的改进和优化,改API从EU SEMPER项目中脱离出来,成为了我们后来的Log4j。

Log4j的组织曾经建议JDK1.4中使用Log4j作为其log的api,但是那时候JDK1.4已经将近完成,sun公司拒绝了它。但是作为JAVA开发的人都知道,JDK自带的LOG API形同鸡肋,最广泛使用的还是Log4j。同事JDK log与Log4j的api完全不同,彼此不能方便替换,Apache为了解决这一问题,推出了commans logging组件。它的作用就是当存在Log4j的时候会把输出原封不动的交给log4j,如果没有,它会吧相应的输出转换为JDK logging输出。

所以,在我们日常使用中,我们经常会使用到,commons-logging的jar包。

二、LOG4J日志类型

ALL、TRACE(跟踪)、DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、FITAL(致命)、OFF

注意:高级别的日志会屏蔽低级别的日志

三、配置文件

Log4j的默认配置文件为log4j.properties,启动时会默认加载classpath下的log4j.properties,如果不使用默认的log4j.properties文件,可以 使用PropertyConfiguration指定配置文件路径。

1、配置文件的写法

配置根记录器
作用:所有的logger都会沿用rootLogger的配置

基本格式:log4j.rootLogger=[日志级别],[日志输出地]……..

日志级别:ALL、TRACE(跟踪)、DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、FITAL(致命)、OFF
日志输出地:自定义,可多个

示范:

log4j.rootLogger=ERROR,A,B,C

覆盖根记录配置
(1)针对某个类:
作用:对某个类的配置修改,不再沿用rootLooger配置
基本写法:log4j.logger.包名.类名=[日志级别],[日志输出地]…….
示范:

log4j.logger.com.zxm.test.TestLog = DEBUG

(2)针对某个包:
作用:对整个包下面所有的类的配置修改,不再沿用rootLooger配置
基本写法:log4j.category.包名=[日志级别],[日志输出地]…….

log4j.category.com.zxm.test = INFO

配置常用输出地、布局、常用配置
比如在.rootLogger设置的输出地有A(控制台),B(文件),C(JDBC数据库)
(1)A输出到控制台

log4j.rootLogger=ERROR,A

#输出到控制台的实现类
log4j.appender.A=org.apache.log4j.ConsoleAppender

#DEBUG以上级别时候输出
#log4j.appender.A.Threshold=DEBUG 

#编码方式
#log4j.appender.A.Encoding=UTF-8 

#是否立即输出
#log4j.appender.A.ImmediateFlush=true 

#使用System.error输出
#log4j.appender.A.Target=System.error 

#日志布局
log4j.appender.A.layout=org.apache.log4j.PatternLayout

#日志输出自定义格式
log4j.appender.A.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS}[%C]-[%p] %m%n

关于自定义输出格式:
Log4j的简单教程_第1张图片

(2)B输出到文件
注意:输出到文件的实现有这么几种
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

log4j.rootLogger=ERROR,B

#输出到文件的指定类
log4j.appender.B=org.apache.log4j.FileAppender

#输出到文件的地址
log4j.appender.B.file=D:\\mylog.log

#是否追加文件
log4j.appender.B.Append=true

#日志布局
log4j.appender.B.layout=org.apache.log4j.PatternLayout

#日志输出自定义格式
log4j.appender.B.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS}[%C]-[%M]-[%p] %m%n

还有一种 输出到HTML,也是输出到文件,只需要修改日志的布局

log4j.rootLogger=ERROR,B

log4j.appender.B=org.apache.log4j.FileAppender

log4j.appender.B.file=D:\\mylog.html

log4j.appender.B.Append=true

#日志布局
log4j.appender.B.layout=org.apache.log4j.HTMLLayout

结果如下:
Log4j的简单教程_第2张图片
(3)C输出到JDBC数据库

log4j.rootLogger=ERROR,C

#输出到数据库的实现
log4j.appender.C=org.apache.log4j.jdbc.JDBCAppender

#设置输出级别
log4j.appender.C.Threshold=ERROR

#数据库地址
log4j.appender.C.URL=jdbc:mysql://localhost:3306/log4j

#数据库链接驱动
log4j.appender.C.driver=com.mysql.jdbc.Driver

#连接数据库的用户名
log4j.appender.C.user=root

#连接数据库的密码
log4j.appender.C.password=root

#连接数据库的sql语句
log4j.appender.C.sql=INSERT INTO logs (date, priority, message, classname) VALUES ('%d', '%p', '%m', '%c');

#日志布局
log4j.appender.C.layout=org.apache.log4j.PatternLayout

#日志输出自定义格式
log4j.appender.C.layout.ConversionPattern=%m

示范:java代码:

package com.zxm.test;

import org.apache.log4j.Logger;

public class TestLog {
    private Logger log = Logger.getLogger(TestLog.class);
    public void test(){
        log.error("hello word");
    }


    public static void main(String[] args) {
        TestLog testLog =  new TestLog();
        testLog.test();
    }
}

创建数据库:

CREATE TABLE logs (
    id INT(11) NOT NULL AUTO_INCREMENT,
    date VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_bin',
    priority VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_bin',
    message TEXT NULL COLLATE 'utf8_bin',
    classname VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_bin',
    PRIMARY KEY (id),
    INDEX id (id)

结果:
这里写图片描述

你可能感兴趣的:(log4j)