Log4j2 TcpSocketServer 日志集中打印
2017-08-23 19:44
363 查看
在网上找了好久都是基于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集中进行日志管理了。记录下来整个过程。欢迎拍砖。。。。
具体步骤:
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集中进行日志管理了。记录下来整个过程。欢迎拍砖。。。。
相关文章推荐
- 应用程序开发——网络编程(InetAddress、TCP、UDP、Socket与ServerSocket、DatagramPacket与DatagramSocket、URL)
- Berkeley Socket API – Creating a TCP/IP Server in C
- 基于libuv实现tcp客户端和服务端(支持监听1000多个端口;打印客户端服务端socket;固定端口连接)
- log4j分级别打印日志+通过socket将日志传输至日志服务器
- socket 编程入门教程(一)TCP server 端:6、创建“通讯 ”嵌套字
- windows redis 连接错误Creating Server TCP listening socket 127.0.0.1:637 9: bind: No error
- Java学习笔记 TCP中的Socket与ServerSocker
- creating server tcp listening socket 127.0.0.1:6379: bind No error
- socket 编程入门教程(一)TCP server 端:5、创建监听嵌套字
- 启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
- 在EM中修改Server日志打印级别
- 没有任何关闭socket的日志,客户端和服务端进程都在, 网络连接完好, 为什么进行某操作后好好的tcp连接莫名其妙地断了呢?
- 使用QTcpSocket和QTcpServer进行TCP编程
- Qt一步步搭建TcpServer1——封装QTcpServer,QTcpSocket
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- C socket TCP/UDP client/server example codes
- 基于QTcpSocket和QTcpServer的Tcp通讯以及QDataStream序列化数据
- Linux下Socket编程之TCP Server端
- redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
- socket 编程入门教程(一)TCP server 端:6、创建“通讯 ”嵌套字