在网上找了好久都是基于log4j1的,官方网站也只是提到了客户端的配置,搞了好久终于做了一个基于log4j2的日志集中访问的日志服务器。(网上其它都是copy来copy去的,本示例绝对全网首发)
具体步骤:
1。引入log4j-api-2.1.jar;log4j-core-2.1.jar两个jar包
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.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
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以上级别的
8.总结::
到此已经成功使用log4j2集中进行日志管理了。记录下来整个过程。欢迎拍砖。。。。