我是靠谱客的博主 英俊音响,最近开发中收集的这篇文章主要介绍log4j发送日志到远程服务器并接收,两种配置实现多系统日志收集功能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实现多系统日志收集功能

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

 

pom文件中加入

<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		
		
		<!-- 格式化对象,方便输出日志 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.1.41</version>
		</dependency>


		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

配置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文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration>
<log4j:configuration>
    <!--web.xml配置Log4jConfigListener-->

    <!--控制台输出-->
    <appender name="SYSLOG" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"  value="%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n"></param>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="INFO" />
            <param name="levelMax" value="fatal" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>

    <!--默认发送本地514端口-->
    <appender name="SYSLOGout" class="org.apache.log4j.net.SyslogAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"  value="%-d{yyyy-MM-dd HH:mm:ss} - [ %p ]  %m%n"></param>
    </layout>
    <param name="SyslogHost" value="127.0.0.1"/>
    <param name="Facility" value="LOCAL1"/>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="levelMin" value="WARN" />
        <param name="levelMax" value="fatal" />
    </filter>
</appender>

    <root level="INFO">
        <appender-ref ref="SYSLOG"/>
        <appender-ref ref="SYSLOGout"/>
    </root>
</log4j:configuration>

需要在web.xml中配置监听

<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>classpath:log.xml</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

 

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

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

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>127.0.0.1</syslogHost>
        <facility>LOCAL1</facility>
        <suffixPattern>[%thread] [%level] %logger - %msg%n </suffixPattern>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>

web.xml中配置

	<context-param>
		<param-name>logbackConfigLocation</param-name>
		<param-value>classpath:log.xml</param-value>
	</context-param>
	<listener>
		<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
	</listener>

<注:生产服务器上可以把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信息,然后根据一定的输出规则拼接成完整的异常信息

 

 

 

最后

以上就是英俊音响为你收集整理的log4j发送日志到远程服务器并接收,两种配置实现多系统日志收集功能的全部内容,希望文章能够帮你解决log4j发送日志到远程服务器并接收,两种配置实现多系统日志收集功能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部