您的位置:首页 > 其它

Log4j 实现日志统一管理

2017-01-30 21:44 176 查看
现 工作中遇到这样一个场景同一台 服务器上 部署了两个项目 这两个需要同时按照一种规则向同一个文件写日志。首先尝试 两个项目自己写自己的,即

两个项目都通过相同的配置文件写同一个文件。一小时更换一个文件。配置主要片段为

log4j.logger.logcase=INFO,localFile
log4j.appender.localFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.localFile.File=/home/kptech/log/orderinfo
log4j.appender.localFile.DatePattern = yyyyMMddHH'.txt'
log4j.appender.localFile.encoding=UTF-8
log4j.appender.localFile.layout=org.apache.log4j.PatternLayout


web.xml 里也要增加相应配置 并且放在springcontextlistenner之前

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


相应代码中输出

private static Logger logcase = Logger.getLogger("logcase");

logcase.info(sb.toString());


但是这样两个项目同时启动,看似没有问题 比如按照上面的配置 两个项目都可以像 orderinfo 文件里写数据。 但是到了小时切换的时候,只有一个项目能取到 像 当前日志文件orderinfo 写的权限。 另外一个只能 向 前一个小时的文件里写如 现在是14:13 那么 一个项目只会往继续orderinfo2017013011.txt 里继续写。显然这种方式行不通,当到了整点切换文件的时候只有一个能拿到对当前文件orderinfo的写权限

最后再了解了socketappender 之后决定用此方法来实现。如果是log4j 1版本建议采用最高版本1.2.7

具体实现过程有两点

1.在服务器上单独启动一个线程开启一个端口 监听日志

2.服务器上的项目配置socketappender 来写即可

具体实现过程

启动java 进程建议使用supervisor设为守护进程。
具体指令
java -cp log4j-1.2.17.jar org.apache.log4j.net.SocketServer 4560 log4jserver.properties lcf/
说明:log4jserver.properties 是此 log4j 监听进程的日志配置
lcf/ 文件夹下的配置文件默认会读取generic.lcf 文件。这是接收到客户端写请求的配置。
4560 是指定端口

log4jserver.properties


log4j.rootCategory=INFO,globalfile
log4j.logger.org.apache.log4j.net.SocketServer=INFO,serverFile
log4j.additivity.org.apache.log4j.net.SocketServer=false
log4j.appender.serverFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serverFile.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.serverFile.encoding=UTF-8
log4j.appender.serverFile.File=/home/kptech/log/log4jserver/log4jserver.log
log4j.appender.serverFile.layout=org.apache.log4j.PatternLayout
log4j.appender.serverFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss},%m %n

log4j.appender.globalfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.globalfile.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.globalfile.encoding=UTF-8
log4j.appender.globalfile.File=/home/kptech/log/global/global.log
log4j.appender.globalfile.layout=org.apache.log4j.PatternLayout
log4j.appender.globalfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss},%m %n


generic.lcf


log4j.logger.logcase=INFO,localFile
log4j.appender.localFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.localFile.File=/home/kptech/log/orderinfo
log4j.appender.localFile.DatePattern = yyyyMMddHH'.txt'
log4j.appender.localFile.encoding=UTF-8
log4j.appender.localFile.layout=org.apache.log4j.PatternLayout


项目中配置如下即可 这里只要保持 log4j.logger.logcase一致即可。

log4j.logger.logcase = INFO , orderinfo

log4j.appender.orderinfo=org.apache.log4j.net.SocketAppender

log4j.appe
a504
nder.orderinfo.Port=4560

log4j.appender.orderinfo.RemoteHost=localhost

log4j.appender.orderinfo.ReconnectionDelay=1000

log4j.appender.orderinfo.LocationInfo=true

以上实现

即成功满足了我们的需求,一小时滚动一个文件,同一物理机多个项目同时写一个文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  log4j