Log4j 实现日志统一管理
2017-01-30 21:44
176 查看
现 工作中遇到这样一个场景同一台 服务器上 部署了两个项目 这两个需要同时按照一种规则向同一个文件写日志。首先尝试 两个项目自己写自己的,即
两个项目都通过相同的配置文件写同一个文件。一小时更换一个文件。配置主要片段为
web.xml 里也要增加相应配置 并且放在springcontextlistenner之前
相应代码中输出
但是这样两个项目同时启动,看似没有问题 比如按照上面的配置 两个项目都可以像 orderinfo 文件里写数据。 但是到了小时切换的时候,只有一个项目能取到 像 当前日志文件orderinfo 写的权限。 另外一个只能 向 前一个小时的文件里写如 现在是14:13 那么 一个项目只会往继续orderinfo2017013011.txt 里继续写。显然这种方式行不通,当到了整点切换文件的时候只有一个能拿到对当前文件orderinfo的写权限
最后再了解了socketappender 之后决定用此方法来实现。如果是log4j 1版本建议采用最高版本1.2.7
具体实现过程有两点
1.在服务器上单独启动一个线程开启一个端口 监听日志
2.服务器上的项目配置socketappender 来写即可
具体实现过程
项目中配置如下即可 这里只要保持 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.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实现统一日志管理
- log4j 实现日志管理
- 利用log4j+mongodb实现分布式系统中日志统一管理
- log4j 实现日志管理
- MongoDB log4j 日志整合,统一管理
- Spring Boot 整合 log4j 实现日志管理
- 利用log4j+mongodb实现分布式系统中日志统一管理
- 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理
- springboot【20】日志管理之log4j实现http请求日志入mongodb
- 使用log4j在javaweb中实现日志管理
- 利用log4j+mongodb实现分布式系统中日志统一管理
- 自定义Appender ,实现输出log4j日志到GUI
- JAVA:LOG4J,方便的日志管理
- Log4j日志管理系统简单使用说明
- Log4j日志管理系统简单使用说明
- Log4j日志管理系统简单使用说明
- Log4j来管理我们的日志
- log4j配置相对路径实现日志记录
- Log4j来管理我们的日志
- commons-logging和Log4j 日志管理