log是每个应用必备的功能,log4j是其中使用很多的一个:
logger.info("something happend");
Log4j不仅仅能log String
可能有人认为log4j只能log一般的String,其实不然,log4j也能log一般的Object:
logger.info(new Hello("kiwi", "Good morning"));
但是这个时候,显示的是:
0 [main] INFO org.kiwi - org.kiwi.Hello@f5e12
因为,在log中,调用的是对象的toString方法,而我们没有overrideHello这个类的toString方法。
Log4j如何自定义log中Object的显示方式
一种方法,当然是最直接的override Hello的toString方法,但是这样,我们讲log的显示逻辑放到Hello本身,这样必然不是很好。
另一种可选的方法就是使用log4j ObjectRenderer:
public class HelloRenderer implements ObjectRenderer {
@Override
public String doRender(Object o) {
Hello hello = (Hello) o;
return hello.getUser() + ": " + hello.getMessage();
}
}
配置log4j.properties:
log4j.renderer.org.kiwi.Hello=org.kiwi.HelloRenderer
这个配置的意思就是,当log org.kiwi.Hello的时候,我们将会使用org.kiwi.HelloRenderer进行render,再用render以后的字符串写到log中
搞定!
0 [main] INFO org.kiwi - kiwi: Good morning
提示:
Log4j中String对象是不可render的,如果想要改变String的显示,可以考虑自定义Layout