log4j分级别打印日志+通过socket将日志传输至日志服务器

程序运行过程中会产生大量的不同等级的日志,如果都混在同一日志文件下,如果打印级别还比较低,当程序出现问题时,会比较麻烦。

日志分级别打印

1.创建LogAppender类(进行唯一判断,只有当Threshold与priority一致时,才进行输出,从而真正实现Log4j按照级别输出日志文件。

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.Priority;

public class LogAppender extends DailyRollingFileAppender{

    Logger log=Logger.getLogger(LogAppender.class);
    @Override
    public boolean isAsSevereAsThreshold(Priority priority) {
        // 只判断是否相等,而不判断优先级
        //return super.isAsSevereAsThreshold(priority);
        return this.getThreshold().equals(priority);
    }

}

2.在log4j.properties 文件中分别指定debug,info,和error的日志输出。

 ### set log levels ###
log4j.rootLogger =  debug, stdout,  D,  E, F, G

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %-d{yyyy-MM-dd HH:mm:ss}  [ %c:%r ] - [ %p ]  %m%n

### 保存DEBUG信息到单独文件 ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D = com.cmcc.util.LogAppender
log4j.appender.D.File = D:/yanglaoLogs/yanglao_debug_log.txt
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %c:%r ] - [ %p ]  %m%n

### 保存INFO信息到单独文件 ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E = com.cmcc.util.LogAppender
log4j.appender.E.File = D:/yanglaoLogs/yanglao_info_log.txt
log4j.appender.E.Append = true
log4j.appender.E.Threshold = INFO
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存WARN信息到单独文件 ###
#log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F = com.cmcc.util.LogAppender
log4j.appender.F.File = D:/yanglaoLogs/yanglao_info_log.txt
log4j.appender.F.Append = true
log4j.appender.F.Threshold = WARN
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存ERROR信息到单独文件 ###
#log4j.appender.G = org.apache.log4j.DailyRollingFileAppender
log4j.appender.G = com.cmcc.util.LogAppender
log4j.appender.G.File = D:/yanglaoLogs/yanglao_error_log.txt
log4j.appender.G.Append = true
log4j.appender.G.Threshold = ERROR
log4j.appender.G.layout = org.apache.log4j.PatternLayout
log4j.appender.G.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

经过上述操作,3个等级的日志消息分别打印到了不同的等级文件中。


如果你需要对日志进行分析,且需要分析的日志与分析服务不在同一机器上面,那么你需要一个能远程传输日志信息的功能。

通过socket将日志传输至日志服务器

服务器环境:centos7.2

1.客户端配置
修改上述log4j.properties文件配置如下:

log4j.rootLogger =  debug, stdout,  D,  E, F, G, server

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %-d{yyyy-MM-dd HH:mm:ss}  [ %c:%r ] - [ %p ]  %m%n

### 保存DEBUG信息到单独文件 ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D = com.cmcc.util.LogAppender
log4j.appender.D.File = D:/yanglaoLogs/yanglao_debug_log.txt
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %c:%r ] - [ %p ]  %m%n

### 保存INFO信息到单独文件 ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E = com.cmcc.util.LogAppender
log4j.appender.E.File = D:/yanglaoLogs/yanglao_info_log.txt
log4j.appender.E.Append = true
log4j.appender.E.Threshold = INFO
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存WARN信息到单独文件 ###
#log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F = com.cmcc.util.LogAppender
log4j.appender.F.File = D:/yanglaoLogs/yanglao_info_log.txt
log4j.appender.F.Append = true
log4j.appender.F.Threshold = WARN
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存ERROR信息到单独文件 ###
#log4j.appender.G = org.apache.log4j.DailyRollingFileAppender
log4j.appender.G = com.cmcc.util.LogAppender
log4j.appender.G.File = D:/yanglaoLogs/yanglao_error_log.txt
log4j.appender.G.Append = true
log4j.appender.G.Threshold = ERROR
log4j.appender.G.layout = org.apache.log4j.PatternLayout
log4j.appender.G.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#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=4712
#Host name or IP address of socket server
log4j.appender.server.RemoteHost=192.168.118.130
#Define any connection delay before attempting to reconnect
log4j.appender.server.ReconnectionDelay=10000

2.服务器端配置
添加log4j-server.propertie文件(本文中将相关文件统一放置在目录/usr/local/yangalo下)如下:

 ### set log levels ###
log4j.rootLogger =  debug ,D , E ,F

### 保存DEBUG信息到单独文件 ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D = com.cmcc.util.LogAppender
log4j.appender.D.File = /usr/local/log4j_yanglao/yanglao_debug_log.txt
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %c:%r ] - [ %p ]  %m%n

### 保存ERROR信息到单独文件 ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E = com.cmcc.util.LogAppender
log4j.appender.E.File = /usr/local/log4j_yanglao/yanglao_error_log.txt
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


### 保存INFO信息到单独文件 ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F = com.cmcc.util.LogAppender
log4j.appender.F.File = /usr/local/log4j_yanglao/yanglao_info_log.txt
log4j.appender.F.Append = true
log4j.appender.F.Threshold = info
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

服务端 端口开放(4712)

firewall-cmd --zone=public --add-port=4712/tcp --permanent
firewall-cmd --reload 
firewall-cmd --list-ports 查看开放端口

将log4j-1.2.12.jar(将上文中的com.cmcc.util.LogAppender的class文件放入log4j-1.2.12.jar中或使用xml配置,xml配置文件在文末)放置在同一目录下,并编辑脚本log4j-server-start.sh

java -classpath /usr/local/log4j_yanglao/log4j-1.2.12.jar org.apache.log4j.net.SimpleSocketServer 4712 /usr/local/log4j_yanglao/log4j-server.properties &

添加可执行权限

chmod +x log4j-server-start.sh

添加开机自启

vim /etc/rc.local

在文件末尾追加下列内容

/usr/local/log4j_yanglao/log4j-server-start.sh

添加可执行权限

chmod +x /etc/rc.d/rc.local

至此,配置结束

附:
xml配置文件

   
   
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>   


    <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">  
        <param name="File" value="/usr/local/yanglao/debug.log"/>  
        <param name="Append" value="true"/>   
        <param name="MaxFileSize" value="1024KB"/>   
        <param name="MaxBackupIndex" value="1"/> 
        <layout class="org.apache.log4j.PatternLayout">   
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c:%r] - [%p] %m%n"/>   
        layout>   
        <filter class="org.apache.log4j.varia.LevelRangeFilter">   
            <param name="LevelMin" value="DEBUG" />   
            <param name="LevelMax" value="DEBUG" />   
        filter>   
    appender>   

    <appender name="INFO" class="org.apache.log4j.RollingFileAppender">   
        <param name="File" value="/usr/local/yanglao/info.log"/>   
        <param name="Append" value="true"/>   
        <param name="MaxFileSize" value="1024KB"/>   
        <param name="MaxBackupIndex" value="1"/>   
        <layout class="org.apache.log4j.PatternLayout">   
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c:%r] - [%p] %m%n"/>   
        layout>   
        <filter class="org.apache.log4j.varia.LevelRangeFilter">   
            <param name="LevelMin" value="INFO" />   
            <param name="LevelMax" value="INFO" />   
        filter>   
    appender>   

    <appender name="WARN" class="org.apache.log4j.RollingFileAppender">   
        <param name="File" value="/usr/local/yanglao/warn.log"/>   
        <param name="Append" value="true"/>   
        <param name="MaxFileSize" value="1024KB"/>   
        <param name="MaxBackupIndex" value="1"/>   
        <layout class="org.apache.log4j.PatternLayout">   
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c:%r] - [%p] %m%n"/>   
        layout>   
        <filter class="org.apache.log4j.varia.LevelRangeFilter">   
            <param name="LevelMin" value="WARN" />   
            <param name="LevelMax" value="WARN" />   
        filter>   
    appender>   

    <appender name="ERROR" class="org.apache.log4j.RollingFileAppender">   
        <param name="File" value="/usr/local/yanglao/error.log"/>   
        <param name="Append" value="true"/>   
        <param name="MaxFileSize" value="1024KB"/>   
        <param name="MaxBackupIndex" value="1"/>   
        <layout class="org.apache.log4j.PatternLayout">   
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%c:%r] - [%p] %m%n"/>   
        layout>   
        <filter class="org.apache.log4j.varia.LevelRangeFilter">   
            <param name="LevelMin" value="ERROR" />   
            <param name="LevelMax" value="ERROR" />   
        filter>   
    appender>   

    <root>   
        <priority value="debug"/>   
        <appender-ref ref="DEBUG"/>   
        <appender-ref ref="INFO"/>   
        <appender-ref ref="WARN"/>   
        <appender-ref ref="ERROR"/>   
    root>   
log4j:configuration>  

你可能感兴趣的:(java,linux)