在服務器集羣中,若是想要集中管理服務器上的日誌,能夠使用log4j提供的一個遠程日誌Appender--SocketAppender。且若是須要按不一樣的業務,也可自定義存放到不一樣的文件中。具體log4j的配置及代碼以下:java
服務器端:node
log4j.propertiesapache
log4j.log4j.rootLogger= INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.myTest1= DEBUG, test1 log4j.appender.test1=org.apache.log4j.FileAppender log4j.appender.test1.File=D:/log/test1.log log4j.appender.test1.layout=org.apache.log4j.PatternLayout log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.myTest2= DEBUG, test2 log4j.appender.test2=org.apache.log4j.FileAppender log4j.appender.test2.File=D:/log/test2.log log4j.appender.test2.layout=org.apache.log4j.PatternLayout log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n
服務器代碼:服務器
package com.yss.demo.log2; import java.net.InetAddress; public class Server extends Thread { private static final int DEFAULT_PORT = 4560; private final int port; public Server(int port) { this.port = port; } public Server() { this(DEFAULT_PORT); } @Override public final void run() { try { Logger cat = Logger.getLogger(Server.class); cat.info("Listening on port " + port); ServerSocket serverSocket = new ServerSocket(port); while (true) { cat.info("Waiting to accept a new client."); Socket socket = serverSocket.accept(); InetAddress inetAddress = socket.getInetAddress(); cat.info("Connected to client at " + inetAddress); LoggerRepository h = LogManager.getLoggerRepository(); cat.info("Starting new socket node."); // TODO: can we use information in the socket to record the client host? new Thread(new SocketNode(socket, h)).start(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new Server().start(); } }
客戶端:app
log4j.propertiessocket
log4j.rootLogger=info,socket log4j.appender.socket=org.apache.log4j.net.SocketAppender log4j.appender.socket.RemoteHost=localhost log4j.appender.socket.Port=4560 log4j.appender.socket.LocationInfo=true
客戶端代碼:ide
import org.apache.log4j.Logger; public class Client { public static void main(String[] args) throws Exception { Logger logger = Logger.getLogger("myTest1"); logger.info("wwwwwww11111111"); Logger logger2 = Logger.getLogger("myTest2"); logger2.info("wwwwwww2222222"); } }
log4j默認使用的配置是類路徑下的log4j.properties,若是客戶端和服務器端代碼在同一個項目下時,就須要分別爲各自的log4j配置文件從新命名,以示區分,並在獲取Logger以前使用
PropertyConfigurator.configure("Log4JConfig_client.properties");this
這種方式加載指定的配置文件,這樣纔可以使各自的代碼、配置生效。spa