Log4j

一.项目导入log4j.jar包


二.在项目src下添加log4j.properties配置文件

log4j.properties基本格式如下:

log4j.rootLogger=[level①],appenderName,appenderName2          
log4j.appender.appenderName=?②
log4j.appender.appenderName.layout=?③                      
log4j.appender.appenderName.layout.ConversionPattern=?④   

 ①:日志记录的优先级,共有五种从高到低为

log.fatal("致命");//FATAL
log.error("错误");//ERROR
log.warn("警告");//WARN
log.info("信息");//INFO
log.debug("调试");//DEBUG
log.trace("跟踪");//TRACE

②:日志输出地点,Log4j提供了以下几种

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

注如果输出地点为:

org.apache.log4j.ConsoleAppender需在②下面添加一行代码
log4j.appender.one.Target = System.out

org.apache.log4j.FileAppender需在②下面添加二行代码
log4j.appender.one.File=文件地址
log4j.appender.D.Append = true        (true添加日志, false重写日志)

org.apache.log4j.DailyRollingFileAppender需在②下面添加一行代码
log4j.appender.zhangsanLog.DatePattern = 日志文件生成的间隔
  日志文件生成的间隔
    ’.’yyyy-MM:          每月
    ’.’yyyy-ww:          每周
    ’.’yyyy-MM-dd:       每天
    ’.’yyyy-MM-dd-a:     每天两次
    ’.’yyyy-MM-dd-HH:    每小时
    ’.’yyyy-MM-dd-HH-mm: 每分钟

org.apache.log4j.RollingFileAppender需在②下面添加二行代码
log4j.appender.zhangsanLog.MaxFileSize = 2KB     (当日志文件大于2KB时新建日志文件)
log4j.appender.zhangsanLog.MaxBackupIndex = 5    (最大日志文件数)

③:日志输出格式,Log4j提供了以下几种

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

④:日志打印参数,如下

%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},输出类似:2002年10月18日 22:10:28
%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )

三.使用log4j 例:

Logger logger = Logger.getLogger(Package.class);
logger.debug("This is debug.");
logger.info("This is info.");
logger.warn("This is warn.");
logger.error("This is error.");
logger.fatal("This is fatal.");

四.log4j.properties配置文件实例

log4j.rootLogger=debug,one,two
log4j.appender.one=org.apache.log4j.ConsoleAppender
log4j.appender.one.Target =System.out
log4j.appender.one.layout=org.apache.log4j.PatternLayout
log4j.appender.one.layout.ConversionPattern=%d{yyyy MM dd HH:mm:ss}%m
log4j.appender.two=org.apache.log4j.FileAppender
log4j.appender.two.File=d:log4jTest.txt
log4j.appender.two.Append=true
log4j.appender.two.Threshold=INFO    /*输出INFO级别及以上的日志*/
log4j.appender.two.layout=org.apache.log4j.PatternLayout
log4j.appender.two.layout.ConversionPattern=%d{yyyy MM dd HH:mm:ss}%m

五.log4j多线程管理多日志文件

首先根据需求,可以很明确的得出多日志文件说明日志的输出地点不同,而前文总结出日志输出地点只有5个:

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

而这5类都隐式实现了org.apache.log4j.Appender接口

当要使用log4j打印日志时要实例化Logger类,而查看源码可以发现这个类中含有一个addAppender(Appender newAppender)方法。至此可以很容易理解log4j后台工作了,当我们配置好log4j.properties文件后,实例化Logger类时后台会解析log4j.properties文件,把该文件中的数据解析成日志输出类(ConsoleAppender、FileAppender、DailyRollingFileAppender、RollingFileAppender、WriterAppender)。使用addAppender(Appender newAppender)添加到Logger类实例中,最后根据日志输出优先级、输出地点、输出格式、打印参数等配置来实现日志记录

理解了log4j后台工作后,写个实例实践一下(这里只用DailyRollingFileAppender类测试,其它类雷同)

public static void main(String[] args) throws InterruptedException {
    for(int x = 0; x < 5; x++){
        Thread my = new Thread(new MyThread());
            my.start();
    }
}

class MyThread implements Runnable{
    public void run() {
        Logger log = Logger.getLogger(test2.class);
        try {
            DailyRollingFileAppender tfa = new DailyRollingFileAppender(new PatternLayout("%d{yyyy MM dd HH:mm:ss}%m"), 
					Thread.currentThread() + "测试.txt",  "'.'yyyy-MM-dd");
            tfa.setThreshold(Level.INFO);
			
            log.addAppender(tfa);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.debug(Thread.currentThread().getName()+" -----debug\n");
        log.info(Thread.currentThread().getName()+" -----info\n");
    }
}

上面代码功能想来不难理解,但要注意因为我们使用getLogger方法实例化了Logger类,所有如果你配置了log4j.properties文件,Logger实体类中会包含log4j.properties文件配置的输出类。使用Logger类构造方法实例化没有用过,自动跳过!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值