log4j发送日志到远程服务器并接收,两种配置

实现多系统日志收集功能

log4j直接配置syslog就可以发送消息到远程服务器,直接配置log.properties文件或log.xml文件即可

 

pom文件中加入


			log4j
			log4j
			${log4j.version}
		
		
		
		
		
			com.alibaba
			fastjson
			1.1.41
		


		
			org.slf4j
			slf4j-api
			${slf4j.version}
		

		
			org.slf4j
			slf4j-log4j12
			${slf4j.version}
		

配置log.properties文件

第一种:

直接用log4j的jar包

#Log4j自带的SyslogAppender  默认发送到端口514
log4j.rootLogger=INFO,syslog

log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.SyslogHost=127.0.0.1
log4j.appender.syslog.Facility=LOCAL1
log4j.appender.syslog.header=true
log4j.appender.syslog.Threshold=WARN
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

默认发送到端口514,可配置其他端口

 

第二种:

需要下载jar包的,

jar包可自行下载,也可以下载我的jar点这里下载

##第三方syslog4j
log4j.rootLogger=INFO,syslog1
log4j.appender.syslog1=org.productivity.java.syslog4j.impl.log4j.Syslog4jAppender
log4j.appender.syslog1.Facility=LOCAL0
log4j.appender.syslog1.Protocol=udp
log4j.appender.syslog1.host=127.0.0.1
log4j.appender.syslog1.Port=1512
log4j.appender.syslog1.Threshold=WARN
log4j.appender.syslog1.layout=org.apache.log4j.PatternLayout

可配置端口,但是输出内容格式固定,这个比较尴尬,没办法跟第一种一样自定义输出数据格式和内容。

注意:Threshold所定义级别为日志输出的最小级别,及其以上级别都能输出。

 

以上两种是基于.properties文件的,下面是配置xml文件。

配置log.xml文件




    

    
    
        
            
        
        
            
            
            
        
    

    
    
    
        
    
    
    
    
        
        
    


    
        
        
    

需要在web.xml中配置监听


	log4jConfigLocation
	classpath:log.xml


	org.springframework.web.util.Log4jConfigListener

 

还有一种方式,通过配置logback发送。

log.xml中配置发送服务器及最低日志级别

    
        127.0.0.1
        LOCAL1
        [%thread] [%level] %logger - %msg%n 
        
            WARN
        
    

web.xml中配置

	
		logbackConfigLocation
		classpath:log.xml
	
	
		ch.qos.logback.ext.spring.web.LogbackConfigListener
	

<注:生产服务器上可以把log.xml放入WEB-INF下classes中,就不需要配置监听了>

 

都使用udp发送,

接收方法:

    public static void main(String[] args) throws SocketException {
        int port=1512;
        DatagramSocket socket= new DatagramSocket(port);
        System.out.println("UDP服务器已启动.....");
        byte[] buffer = new byte[8192];
        while (true) {
            if(socket.isClosed()){
                System.out.println("UDP已关闭");
            }
            DatagramPacket incoming = new DatagramPacket(buffer,
                    buffer.length);
            try {
                socket.receive(incoming);
                String msg = new String(incoming.getData(),0,incoming.getLength());
                System.out.println("UDP接收端端口:" + port);
                System.out.println("UDP客户端发送的内容是:" + msg);
                System.out.println("UDP客户端IP:" + incoming.getAddress());
                System.out.println("UDP客户端端口:" + incoming.getPort());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

记得先启动接收服务器再启动发送服务器,

就这么简单就实现了日志的发送、收集

实际操作中Exception信息会一条条接收,这需要在接收端判断是否属于Exception信息,然后根据一定的输出规则拼接成完整的异常信息

 

 

 

你可能感兴趣的:(java)