夕辞

Apache log4j学习-通用规则 | 夕辞夕辞

Apache log4j学习-通用规则

在接下来Apache log4j学习中,代码逻辑有一些通用的规则,在这里先列出下。

 

规则1:系统属性的打印使用封装后的System.err.pritln方法。

鉴于Log4j有级别限制日志输出,为了对比系统一些属性和最终效果区别,使用系统输出方法并且以红色文字来标识于普通log4j在控制台输出的区别,封装代码如下:

package com.zhuzhuodong.share.log4j.util;

import org.apache.log4j.Logger;

public class SystemUtil {

    static String PREFIX = "# SERR: ";//打印前缀

    //打印信息
    public static void systemErrPrintln(String msg) {
        try {
            Thread.currentThread().sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.err.println(PREFIX + msg);
        try {
            Thread.currentThread().sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //打印logger level和最终level
    public static void systemErrPrintlnLogLevel(Logger logger) {
        systemErrPrintln("logger:" + logger.getName() + "\tlevel:" + logger.getLevel() + "\teffectiveLevel:" + logger.getEffectiveLevel());
    }

}

日志同时打印logger当前分配级别和继承到的级别

PS:可能注意到中间有当前线程sleep 50毫秒的操作,这个是因为默认log4j都是输出到控制台,但log4j的输出是由相关控制线程输出,会使控制台日志不像我们想象的那么有序,因此,为了在控制台日志上看出先后顺序,在系统输出前后都sleep 50毫秒以保证和log4j输出保持顺序。

回到顶部