在接下来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输出保持顺序。