Log4j2 TcpSocketServer 日志集中打印

时间:2021-01-25 21:48:54

  在网上找了好久都是基于log4j1的,官方网站也只是提到了客户端的配置,搞了好久终于做了一个基于log4j2的日志集中访问的日志服务器。(网上其它都是copy来copy去的,本示例绝对全网首发)

具体步骤:

1。引入log4j-api-2.1.jar;log4j-core-2.1.jar两个jar包

Log4j2 TcpSocketServer 日志集中打印

2.配置log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <!-- Appenders 输出目的地 -->
  <Appenders>
  <!-- 配置日志输出文件名字     追加读写     host地址  端口    -->
    <Socket name="system" host="localHost" port="5001" >
    <!-- 输出格式  序列布局-->
    <SerializedLayout />
<!--   <PatternLayout pattern=" [%t] %-5level %logger{36} %L- %msg%n" /> -->
<!--       <PatternLayout pattern=" [%t] %-5level %logger{36} %L- %msg%n" />   -->
    </Socket>
    <!-- 控制台输出 -->
    <Console name="STDOUT" target="SYSTEM_OUT">
    <!-- 输出格式  布局-->
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
  <!-- debug级别 -->
    <Root level="debug">
      <AppenderRef ref="system"/>
      <AppenderRef ref="STDOUT"/>
    </Root>
    <Logger name="apiall" level="info" additivity="false">
<AppenderRef ref="system" />
</Logger>
  </Loggers>
</Configuration>


3.配置log4j2的服务器端,创建画横线的3个文件即可。

log4j-api-2.1.jar

log4j-core-2.1.jar

Log4j2 TcpSocketServer 日志集中打印
log4j2.xml
4.配置服务器端的log4j2.xml(当然可以改为其它名字) 。 我这里是输出到D:/logs/log4j2test.log文件里了。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <!-- Appenders 输出目的地 -->
  <Appenders>
    <!-- 控制台输出 -->
    <Console name="STDOUT" target="SYSTEM_OUT">
    <!-- 输出格式  布局-->
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
<File name="MyFile" fileName="D:/logs/log4j2test.log">  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %C{2} (%F:%L) %L- %msg%n" />  
    </File> 
  </Appenders>
  <Loggers>
  <!-- debug级别 -->
    <Root level="debug">
      <AppenderRef ref="MyFile"/>
      <AppenderRef ref="STDOUT"/>
    </Root>
    <Logger name="apiall" level="ERROR" additivity="false">
<AppenderRef ref="MyFile" />
</Logger>
  </Loggers>
</Configuration>


5. 执行服务器端Main函数 开启进程  5001端口(一定要与客户端对应)

java -cp log4j-api-2.1.jar;log4j-core-2.1.jar org.apache.logging.log4j.core.net.server.TcpSocketServer 5001 log4j2.xml

Log4j2 TcpSocketServer 日志集中打印

6.编写客户端测试类,并执行


package com.atzy.log;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;


public class Log4j2RemoteTest {
static Logger logger = (Logger) LogManager.getLogger ("apiall");
public static void main(String[] args) {
logger.error("this is log4j2 remote test error");
logger.debug("this is log4j2 remote test debug");
logger.info("this is log4j2 remote test info");
logger.trace("this is log4j2 remote test trace");
}


}

7.查看日志输出 。因为我设置的info级别的所以只打印了info以上级别的

Log4j2 TcpSocketServer 日志集中打印

8.总结::

到此已经成功使用log4j2集中进行日志管理了。记录下来整个过程。欢迎拍砖。。。。