前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Log4j日志集中管理

Log4j日志集中管理

作者头像
奋飛
发布2019-08-15 16:38:17
1.1K0
发布2019-08-15 16:38:17
举报
文章被收录于专栏:Super 前端Super 前端

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://ligang.blog.csdn.net/article/details/43068071

最近遇到这样一个问题,公司线上有中、日、美三种语言的项目,隶属于不同的三台服务器,且每个项目都通过双节点配置,现想实现日志的统一管理,即将所有日志输入到同一台服务器上,然后进行统一记录、管理、分析。最终,通过log4j的SocketAppender进行了实现:

一、客户端的配置:

客户端的配置比较简单,只需要告诉log4j需要监听哪个远程服务器的哪个端口即可。直接在log4j.properties里直接配置就好。

代码语言:javascript
复制
#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服务器IP
serverIP = 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 = false
log4j.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=WARN
log4j.logger.org.apache.commons=WARN
log4j.logger.org.apache.struts=WARN
log4j.logger.org.springframework=WARN
log4j.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.log
log4j.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.SocketAppender
log4j.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 文件:

代码语言:javascript
复制
#!/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进行控制日志的输入。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年01月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、客户端的配置:
  • 二、日志服务器的配置:
  • 三、javaweb端:
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档