log4j日志改json格式自定义输出内容源码及说明
最近项目需要接入日志管理平台,要求需要将项目log4j日志格式改为json,没系研究过log4j的我一时间还真被难住了,功夫不负有心人最后还是被我实现了。
本人借鉴三劫散仙发表的技术篇https://blog.csdn.net/u010454030/article/details/77994616文中引用的jsonevent-layout源码进行了分析和对log4j的进一步对接实现,话不多说,上代码:
1、所需maven依赖
maven 项目需要pom.xml引入依赖(非maven项目需要自行搜索对应jar包添加到lib):
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>asm</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
2、添加工具类到项目中
HostData.java
该类用于获取主机名称。
import java.net.InetAddress;
import java.net.UnknownHostException;
public class HostData {
public String hostName;
public String getHostName() {
return this.hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public HostData() {
try {
this.hostName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException var2) {
this.setHostIp("unknown-host");
}
}
}
JSONEventLayoutV1.java
该类中可使用this.logstashEvent.put(“自定义字段”,“***”);进行追加输出内容:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
import net.minidev.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.FastDateFormat;
import