log4j 多进程配置要注意的
多进程写日志文件
方法一:
解决log4j公用配置文件,多进程同时写同一个log文件,因存在操作系统pv操作问题, 导致部分日志丢失。解决方案是不同的进程写不同的log文件
测试于:Log4j 1.2.15 | CentOS 5.7
假设有个一个web项目,项目中同时包含一些app,这些app是是需要用java命令来启动的。
每启动一个app就相当于启动一个虚拟机,即一个进程。
问题一:如果公用项目中的log4j,那么必然多进程同时同一个log文件,存在操作系统pv操作问题,
导致部分日志丢失。
问题二:如何实现在代码,log4j等配置文件公用的情况下,不同的进程写不同的log文件?
解决方法:
- 在app 用java命令启动的时候增加-D参数。
假设是Linux 下Java启动脚本中的脚本,只需修改JAVA_OPTS值,即
JAVA_OPTS="-Xms64m -Xmx512m -Djava.awt.headless=true -Dlog4j.log.app=app1"
- 在log4j的配置文件中调用此变量
假设是Log4j 实例配置解析中的配置,需要修改log4j.appender.F.file值,即
log4j.appender.F.file = /logs/basic/${log4j.log.app}/log
假设web项目中有两个app,app1和app2
各自的启动脚本中配置为-Dlog4j.log.app=app1和-Dlog4j.log.app=app2
tomcat启动jvm并没有配置,所以log4j会默认为空,log目录效果如下
app日志会放在相应的app*目录下
web日志由于没有得到-D配置,会放在和app*目录平级的位置,当然如果需要的也可以修改tomcat bin下的catalina.sh,增加-D参数,但为了让项目和web服务器解耦,不推荐这么做。
当然有人可能会说,可以用在启动java进程时将日志重定向到指定的文件中,如
nohup java $JAVA_OPTS $MAIN_CLASS $* > /logs/basic/app1/log &
这种方法的缺点是不能实现日志的自动切割,不能避免日志不断增大甚至占满磁盘的问题。
如过此内容对您有帮助,欢迎以点击广告的形式来支持我们,但请每天不要多于一次,否则可能被识别恶意点击,导致封号。
方法二
1.log4j代码片段(log4j的配置文件支持System Property的环境变量的获取)
<appender name="FILE"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File"
value="D:/${weblogic.Name}ank.log" />
<param name="DatePattern"
value="'.'yyyy-MM-dd-HH" />
<layout
class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %c{1} %m%n" />
</layout>
</appender>
2.${weblogic.Name}对应的是JAVA启动时环境变量;
看startWebLogic.sh中的代码片段
D:\bea92\JDK150~1\bin\java -client
-Dweblogic.Name=AdminServer
如何设置JAVA启动时的环境变量:
java -D<参数>=<值>
3.使用spring中的Log4jConfigListener把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。
log4j.xml配置片段:
Java代码
- <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
- lt;param name="File" value="${webapp.root}/WEB-INF/logs/${weblogic.Name}-jrwwg.log" />
- <param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%-5p %c{1} %m%n" />
- </layout>
- </appender>
web.xml配置片段
Xml代码
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/classes/log/log4j.xml</param-value>
- </context-param>
- <!---定时扫描loj4j配置文件的变化---->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
Xml代码
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
自己实践
用方法一配置 -Dlog4j.log.app=app1 时,
在
下图中是可以实现的:
但是在
weblogic中的
server start中
配置 不起作用,如下图:
用方法二 完美的解决了问题。
log4j 多进程配置要注意的的更多相关文章
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- Log4J实用配置指南
转自:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 1 概述 本文档是针对Log4j日志工具的使用指南. ...
- Log4j XML配置
问题描述: Log4j XML配置 问题解决: (1)编写log4j.xml配置文件 注: 如上的XML文件必须以log4j.xml文件命名,否则无法读取配置文件,同样的如果 ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
- java之log4j的配置
java之log4j的配置 log4j有很多的优点,用起来很方便,就是配置起来有些麻烦,下面我介绍一下log4j的配置方法. log4j是用来记录日志的. 软件的运行过程离不开日志.日志主要用来记录系 ...
- Log4j.properties配置详细解读
Log4j.properties配置 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以 ...
- 热切换Log4j级别配置
欢迎和大家交流技术相关问题:邮箱: jiangxinnju@163.com博客园地址: http://www.cnblogs.com/jiangxinnjuGitHub地址: https://gith ...
- java日志框架log4j详细配置及与slf4j联合使用教程
最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...
随机推荐
- vue入门:(组件)
模板:(template)模板声明了数据和最终展现给用户的DOM之间的映射关系. 初始数据:(data)一个组件的初始数据状态.对于可复用的组件来说,通常是私有的状态. 接收外部参数:(props)组 ...
- ftp卡死问题
最近用org.apache.commons.net.ftp.FTPClient 写ftp的上传下载的定时任务 发现有时候线程会卡住,也不报错就一直不工作了,后来发现需要使用ftp的被动模式才行,实现 ...
- mac 下开发golang 配置
1.安装golang 见附件 2.默认安装在 /usr/local/go 目录下 3.配置环境变量: 编辑文件:vim /etc/profile,有的MAC 下没有这个文件,可以新建. 加入环境变量 ...
- mysql float 精度丢失
mysql 中保存了字段 float s=0.3 直接执行sql 查出来是 0.3 但是JPA 执行查询结果是 0.2999 换成decimal 就可以
- LeetCode3.无重复字符的最大子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- Excel种的数据类型研究【原创】【精】
因为要做一个项目,开始研究Excel种的数据类型.发现偌大的一个cnblogs竟然没人写这个,自己研究以后记录下来. 在我们通常的认识中,Excel中的数据类型有这么几种 1.常规:2.数值:3.货币 ...
- 洛谷 P2939 [USACO09FEB]改造路Revamping Trails
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
- BZOJ 1006 完美消除序列&最大势算法&弦图
K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...
- netty-4.客户端与服务端心跳
(原) 第四篇,客户端与服务端心跳 心跳事件有三种,读空闲,写空闲,读写空闲,定义在了IdleState枚举类中,分别为READER_IDLE,WRITER_IDLE,ALL_IDLE 服务端: ma ...
- Linux之yum安装LAMP环境与管理
[1] 什么是LAMP 目前世界最流行的企业建站方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP ...