1、需求背景
因为公司最近搭建一个日志集中管理平台,要求各个系统的日志都需要传送到统一的平台上,所以基于此,研究了一下log4j2的socket。
2、准备材料
需要log4j2的两个jar包:log4j-api-2.1.jar 和 log4j-core-2.1.jar 。(版本需要一直,特别是服务器上的jar 和 客户端的jar要保持一致)
3、log4j2的客户端配置
直接在 IDE中创建java工程。在根目录src下添加log4j2.xml文件。

1 <?xml version="1.0" encoding="UTF-8"?> 2 <Configuration> 3 <Appenders> 4 <Socket name="socket" host="IP" port="8086" > 5 <SerializedLayout /> 6 </Socket> 7 <!--在ide中,打印到控制台--> 8 <Console name="console" target="SYSTEM_OUT"> 9 <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> 10 </Console> 11 </Appenders> 12 <Loggers> 13 <Root level="info"> 14 <AppenderRef ref="socket"/> 15 <AppenderRef ref="console"/> 16 </Root> 17 <Logger name="app" level="info" additivity="false"> 18 <AppenderRef ref="socket" /> 19 </Logger> 20 </Loggers> 21 </Configuration>
创建客户端测试java类Log4j2SocketTest

1 import org.apache.logging.log4j.LogManager; 2 import org.apache.logging.log4j.core.Logger; 3 4 public class Log4j2SocketTest { 5 static Logger logger = (Logger) LogManager.getLogger("app"); 6 static Logger logger_default = (Logger) LogManager.getLogger(); 7 8 public static void main(String[] args) { 9 logger.debug("logger.debug...."); 10 logger.info("logger.info...."); 11 System.out.println("another"); 12 logger_default.debug("logger_default.debug"); 13 logger_default.info("logger_default.info"); 14 } 15 }
4、log4j2的服务端接收日志模拟器配置
这个只是模拟接收的服务器,作用是打印到文件中,方便我们查看服务器端收到的从客户端发来的内容。
把这三个文件放到同一个目录下:log4j-api-2.1.jar 、 log4j-core-2.1.jar 和 log4j2.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <Configuration> 3 <Appenders> 4 <!-- 控制台输出 --> 5 <File name="MyFile" fileName="D:/logs/log.log"> 6 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %C{2} (%F:%L) %L- %msg%n" /> 7 </File> 8 </Appenders> 9 <Loggers> 10 <Root level="debug"> 11 <AppenderRef ref="MyFile"/> 12 <AppenderRef ref="STDOUT"/> 13 </Root> 14 </Loggers> 15 </Configuration>
这三个文件放好之后,我们启动服务器,如下
java -cp log4j-api-2.2.jar;log4j-core-2.2.jar org.apache.logging.log4j.core.net.server.TcpSocketServer 8085 log4j2.xml
注:linux下jar之间用冒号‘:’,windows下用分好‘;’
5、这样就可以了,在ide中执行客户端的日志打印,同时会上传到服务器上。