应用场景
我们一般使用的 layout,默认是 org.apache.log4j.PatternLayout
。
如果这个类无法满足我们的需求,我们可以自己定义
简单的例子
我们自己定义了一个属性 prefix,并且在执行默认的 fomart 之后,执行我们的字符串处理。
package layout;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
/**
* @author binbin.hou
* date 2019/1/28
*/
public class MyLayout extends PatternLayout {
/**
* 自定义参数
*/
private String prefix;
@Override
public String format(LoggingEvent event) {
String message = super.format(event);
return prefix+message;
}
/**
* 自定义日志信息处理方法
* @param message 原始信息
* @return 处理后的结果
*/
private String myMessageFomrat(final String message) {
return prefix+message;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
}
如何使用
prefix 是我们自己定义的一个前缀,过会儿我们可以在 log4j.xml 配置使用。
<!-- 设置日志输出的样式 -->
<layout class="org.apache.log4j.PatternLayout">
<!-- 设置日志输出的格式 -->
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
<param name="prefix" value="自定义前缀-"/>
</layout>
日志输出
自定义[2019-01-28 13:55:19:400] [INFO ] [method:Log4jDemo.main(Log4jDemo.java:14)]
[2]-my level is INFO
自定义[2019-01-28 13:55:19:404] [WARN ] [method:Log4jDemo.main(Log4jDemo.java:15)]
[3]-my level is WARN
自定义[2019-01-28 13:55:19:404] [ERROR] [method:Log4jDemo.main(Log4jDemo.java:16)]
[4]-my level is ERROR
发现这个字符串已经放在每一个的前面了。
思考
这个简单的功能可以干嘛呢?
可以通过日志对信息进行脱敏。