1、pom依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2、服务端配置log4j-server.properties
#Define a narrow log category. A category like debug will produce some extra logs also from server itself
log4j.rootLogger=ERROR, file
#Define how the socket server should store the log events
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=application-error.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d] [%t] [%m]%n
3、服务端监听
socket方式
ServerSocket socket = new ServerSocket(5000);
while (true){
logger.info("dfsdfsfsf");
Socket client = socket.accept();
Thread t = new Thread(new LogRunner(client));
t.start();
}
4、服务端开启线程
package com.yy.domain;
/**
* Created by yanyong on 2020/6/3.
*/
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.LinkedList;
import java.util.Queue;
public class LogRunner implements Runnable{
private static final Logger logger = Logger.getLogger(LogRunner.class);
private ObjectInputStream ois;
public static Queue<String> queue = new LinkedList<String>();
public LogRunner(Socket client) {
try {
this.ois = new ObjectInputStream(client.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true) {
Object obj= ois.readObject();
System.out.println(obj.toString());
LoggingEvent event = (LoggingEvent) ois.readObject();
System.out.println(event.getLoggerName()+":"+event.getMessage());
queue.offer(event.getMessage().toString());
System.out.println("queue" + queue);
System.out.println("queuesize" + queue.size());
}
}catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
5、客户端配置log4j-peoperties
#Define the log4j configuration for local application
log4j.rootLogger=ERROR, server
#We will use socket appender
log4j.appender.server=org.apache.log4j.net.SocketAppender
#Port where socket server will be listening for the log events
log4j.appender.server.Port=5000
#Host name or IP address of socket server
log4j.appender.server.RemoteHost=localhost
#Define any connection delay before attempting to reconnect
log4j.appender.server.ReconnectionDelay=10000
6、客户端输出日志
private static final Logger logger = LoggerFactory.getLogger(xx.class);
logger.error("test");
7、客户端使用websocket推送前端
websocket推送日志到前端
8、log4j推送到本地系统,再推送到前端
log4j推送到本地系统,再推送到前端
9、github源码
源码下载