log4j通过SocketAppender将日志内容发送到远程服务器

通过log4j可以实现将日志内容发送到其他服务器,其他机器可以再对日志做统一处理,比如发送邮件,发送短信,日志分析等等。具体demo如下:

1. 客户端代码

         客户端代码分为log4j的配置文件,和客户端记录log4j日志类

        log4j.xml内容如下

      

  
  
  
        
                
             
          


         
         
         
         
         

         
         


         
         

  
         
         
   
 

  测试类如下

   

public class Log4JSocketAppenderTest
{
    public static void main(String[] args) throws Exception
    {
        //发送日志记录时间
        long runTime = 1000 * 60 * 1;
        DOMConfigurator.configure(Log4JSocketAppenderTest.class.getResource("log4j.xml"));
        Logger remoteLogger = LogManager.getLogger("testRemote2");
        long i = 0;
        String sendInfo = "the send info is ";
        long old = System.currentTimeMillis();
        while (true)
        {
            System.out.println("send info begin:  " + sendInfo + i);
            remoteLogger.info(sendInfo + i);
            i++;
            //每3秒记录一次日志
            Thread.sleep(1000 * 3);
            long now = System.currentTimeMillis();
            if((now - old) > runTime)
            {
                break;
            }
        }
    }
}

 


2.  服务端代码

     服务端代码是监听对应的端口,并接收log4j发过来的内容 

  


import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.log4j.Logger;

public class LogSocketServer implements Runnable
{
    private static final Logger logger = Logger.getLogger(LogSocketServer.class);
    
    public void run()
    {
        logger.debug("begin call listen log info .....");
        ServerSocket serverSocket;
        Socket socket = null;
        try
        {   
            //如果没有配置端口  则抛出异常
            serverSocket = new ServerSocket(4445);
            
            while (true) {   
                
             logger.info("Waiting to accept a new client.");   
   
                socket = serverSocket.accept();   
   
                InetAddress inetAddress = socket.getInetAddress();   
   
                logger.debug("Connected to client at " + inetAddress);   
   
                logger.debug("Starting new socket node.");   
   
                new Thread(new LogSocketNode(socket)).start();   
   
            }   
        }
        catch (Exception e) 
        {   
            logger.error("error in liston info  ", e);  
        }   
   
    }
}

 
 

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;public class LogSocketNode implements Runnable {
      
     Socket socket;  
     ObjectInputStream ois;  
     static Logger logger = Logger.getLogger(LogSocketNode.class);  
     public LogSocketNode(Socket socket) {  
         this.socket = socket;  
         try {  
             ois = new ObjectInputStream(new BufferedInputStream(  
                     socket.getInputStream()));  
         } catch (Exception e) {  
             logger.error("Could not open ObjectInputStream to " + socket, e);  
         }  
     }  
   
   
     public void run() {  
         LoggingEvent event;  
         try {  
             if (ois != null) {  
                 while (true) {  
                     // read an event from the wire   
                      event = (LoggingEvent) ois.readObject();  
                      System.out.println("get log info is : " + event.getMessage());  
                 }  
   
             }  
   
         } catch (java.io.EOFException e) {  
   
             logger.error("Caught java.io.EOFException closing conneciton.");  
   
         } catch (java.net.SocketException e) {  
   
             logger.error("Caught java.net.SocketException closing conneciton.");  
   
         } catch (IOException e) {  
   
             logger.error("Caught java.io.IOException: " + e);  
   
             logger.error("Closing connection.");  
   
         } catch (Exception e) {  
   
             logger.error("Unexpected exception. Closing conneciton.", e);  
   
         } finally {  
   
             if (ois != null) {  
   
                 try {  
                     logger.debug("begin close ois");
                     ois.close(); 
                     logger.debug("end close ois");
   
                 } catch (Exception e) {  
   
                     logger.error("Could not close connection.", e);  
   
                 }  
   
             }  
   
             if (socket != null) {  
   
                 try {  
                  logger.debug("begin close socket");
                     socket.close();  
                     logger.debug("end close socket");
   
                 } catch (IOException ex) {  
                     logger.error("socket close error ", ex);
                 }  
   
             }  
   
         }  
   
     }  
   }


你可能感兴趣的:(java)