Log4j日志集中管理

来源:互联网 发布:找工作软件软件靠谱 编辑:程序博客网 时间:2024/05/16 19:17
最近遇到这样一个问题,公司线上有中、日、美三种语言的项目,隶属于不同的三台服务器,且每个项目都通过双节点配置,现想实现日志的统一管理,即将所有日志输入到同一台服务器上,然后进行统一记录、管理、分析。最终,通过log4j的SocketAppender进行了实现:

一、客户端的配置:

客户端的配置比较简单,只需要告诉log4j需要监听哪个远程服务器的哪个端口即可。直接在log4j.properties里直接配置就好。
#linux 环境下的日志保存路径LOG_PATH = /data/ligang/#windows 环境下的日志保存路径#LOG_PATH = e:/ligang/#上线时需确保LOG_PATH为Linux环境下的路径 #输出打印格式sqlLogFormat = %d{yyyy-MM-dd HH:mm:ss}- %p %t %c (line:%L) : %n%m%n#SQL-LOG的文件大小sqlMaxFileSize = 5MB #SQL-LOG文件翻滚数量sqlMaxBackupIndex=100#--------------------------------------------------------------#Log4j Client Configure , Log4j 客户端配置#SQLLog服务器阀值级别sqlServerThreshold = INFO#Remote Server IP  远程Log服务器IPserverIP = 172.17.3.135#Remote Server Port 远程Log 服务器端口serverPort = 12444 #The LocationInfo option takes a boolean value.#If true, the information sent to the remote host will include location information. #开启打印位置信息locationInfo = true#The ReconnectionDelay option takes a positive integer representing#the number of milliseconds to wait between each failed connection attempt to the server.#Setting this option to zero turns off reconnection capability.#10seconds #当链接不上服务器时,10秒后会尝试连接。 当为0时,不会重复连接reconnectionDelay = 10000#--------------------------------------------------------------#root log root主日志,所有日志都会打印到rootCategory。除非其他日志对象设置了 additivity = falselog4j.rootCategory=INFO, console, rootLog# 给主日志添加一个控制台输出打印的对象log4j.appender.console=org.apache.log4j.ConsoleAppender# 控制台中输出打印的格式log4j.appender.console.layout=org.apache.log4j.PatternLayout# 控制台输出打印的每一行样式log4j.appender.console.layout.ConversionPattern= %p - [%t] %C.%M : %m%n # 给主日志添加一个向文件输出打印的对象# RollingFileAppender 按文件大小翻滚。 DailyRollingFileAppender 按日期翻滚。 此配置都使用了前者.log4j.appender.rootLog=org.apache.log4j.RollingFileAppender# 日志输出路径log4j.appender.rootLog.File=${LOG_PATH}root-Log/root-log.log# 格式log4j.appender.rootLog.layout=org.apache.log4j.PatternLayout# 每一行打印的样式,此处参数按照C语言中的打印规则。log4j.appender.rootLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}- %p %t %c (line:%L) - %m%n%n# 日志文件大小log4j.appender.rootLog.MaxFileSize=102400KB# 翻滚日志保存的个数log4j.appender.rootLog.MaxBackupIndex=20 # 设置 com.ptengine包下的DEBUG级别及以上可以打印输出log4j.logger.com.ptengine=INFO# 设置该包下的 WARN 级别及以上可以打印输出log4j.logger.com.opensymphony.oscache=WARNlog4j.logger.org.apache.commons=WARNlog4j.logger.org.apache.struts=WARNlog4j.logger.org.springframework=WARNlog4j.logger.org.apache.velocity=WARN#--------------------------------------------------------------#allSQL log 此日志保存所有关于 insert、update、delete的SQL语句。#无论这个表存在与否,只要系统执行了更新SQL都会被打印到此日志。#--------------------------------------------------------------#用户表userSQL log# user --> 配置名称。可通过此名称获得一个Log对象。 要与表名保持一致。# userSQL 配置项 ,userServer userlog在log4j服务器的配置log4j.logger.user = INFO,userSQL,userServer# 不在root日志中输出log4j.additivity.user = false# 为userSQL配置一个向日志文件输出的对象log4j.appender.userSQL=org.apache.log4j.RollingFileAppender# 日志文件的路径,在添加新表配置的时候需保持此格式user-SQL/user-SQL-log.loglog4j.appender.userSQL.File=${LOG_PATH}table/user-SQL/user-SQL-log.log# 日志文件内容输出格式log4j.appender.userSQL.layout=org.apache.log4j.PatternLayout# 每一行日志的输出样式log4j.appender.userSQL.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}- %p %t %c (line:%L) : %n%m%n# 日志文件大小,到达5120kb后,日志会向将内容翻滚到其他文件中log4j.appender.userSQL.MaxFileSize=5120KB# 保存翻滚的文件数量log4j.appender.userSQL.MaxBackupIndex=100#Log4j的服务器日志配置log4j.appender.userServer=org.apache.log4j.net.SocketAppenderlog4j.appender.userServer.RemoteHost=${serverIP}log4j.appender.userServer.Port=${serverPort}log4j.appender.userServer.LocationInfo=${locationInfo}log4j.appender.userServer.ReconnectionDelay=${reconnectionDelay}log4j.appender.userServer.Threshold = ${sqlServerThreshold}#其他需加日志的表同user表一样配置

二、日志服务器的配置:

日志服务器需要单独启动一个java进程,接收客户端给自己发送的socket请求。Log4j提供了org.apache.log4j.net.SocketServer类,直接运行其main函数就行了。需要一直后台运行,所以在这用到了startup、shutdown俩个shell脚本。将log4j-server-12444上传到/opt目录下并解压。
运行/opt/log4j-server-12444/startup.sh  启动服务。
运行/opt/log4j-server-12444/shutdown.sh  停止服务。
catalina.sh 文件:
#!/bin/bash #当前脚本所在绝对路径basepath=`dirname $0`"/"#端口 LISTEN_PORT=12444#服务端log4j配置文件 SERVER_CONFIG="$basepath"conf/log4jserver.properties#客户端的配置 CLIENT_CONFIG_DIR="$basepath"conf/lcf/   #Java程序所在的目录(classes的上一级目录) APP_HOME="$basepath"lib#需要启动的Java主程序(main方法类) APP_MAINCLASS=org.apache.log4j.net.SocketServer     #拼凑完整的classpath参数,包括指定lib目录下所有的jar CLASSPATH=$APP_HOME/log4j-1.2.17.jar  #JDK所在路径 JAVA_HOME=/opt/jdk1.6.0_25#执行程序启动所使用的系统用户RUNNING_USER=ligang    #java虚拟机启动参数 JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"
log4j的服务器,也需要一个服务器段的配置文件,这里用的是conf/log4jserver.properties,其中一些配置与客户端的配置文件大同小异(就是web项目中的log4j.properties),主要的是服务器端配置客户端的log。
配置文件在conf/lcf/generic.lcf,里面的配置与web中的一样,只是没有root根日志。
      log的配置名称要与web中的一致,否则会导致服务器端的日志无法打印。
      在web中新加SQL表log的时候,需要在服务器的generic.lcf中加上。

三、javaweb端:

通过org.apache.commons.logging.Log和org.apache.commons.logging.LogFactory进行控制日志的输入。

1 0
原创粉丝点击