0%

日志打印工具类

在开发的过程中,基本上都会使用到日志打印,一般是使用sl4j再加上log4j或是logback实现。使用的时候,直接用sl4j的接口方法。

在一个类中需要打印日志的时候,需要先定义一个对象,代码如下:

1
private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);

然后再使用:

1
LOGGER.info("some info message.");

有时候打印之前还需要加上判断打印等级是否启用的代码:

1
2
3
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("some debug message.");
}

现在想要这样的一个方法,只要使用的时候,直接就用,不需要再在类中定义,打印级别也能自己判断再打印。思路是这样的,首先定义一个工具类,里面定义一个Map,以类名为key,以需要打印日志的类初始化的Logger对象为value。代码如下:

1
2
3
4
5
6
7
8
9
10
private static final Map<String, Logger> LOGGER_MAP = new HashMap<String, Logger>();

private static Logger getLogger(Class<?> clazz) {
Logger logger = LOGGER_MAP.get(clazz.getName());
if (logger == null) {
logger = LoggerFactory.getLogger(clazz);
LOGGER_MAP.put(clazz.getName(), logger);
}
return logger;
}

再在这个工具类中封装下打印日志的方法,以打印一个简单的info信息为例:

1
2
3
public static void info(Class<?> clazz, String msg) {
getLogger(clazz).info(msg);
}

在其他类中打印日志的时候不需要定义,只需要调用工具类,再把要当前类和要打印的信息传过去就可以了,如下:

1
LoggerHelper.info(Foo.class, "some info message");

打印级别控制也可写在工具类中,如下:

1
2
3
4
5
6
public static void debug(Class<?> clazz, String msg) {
Logger logger = getLogger(clazz);
if (logger.isDebugEnabled()) {
logger.debug("some debug message.")
}
}

使用的时候,直接调用就可以了:

1
LoggerHelper.info(Foo.class, "some debug message");

当然以上只是两个打印方法,需要使用同样的方法把sl4j中的所有方法封装一下。

可以参考这个类:logger-helper