首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

集群环境上log4j日志文件命名方式

2012-10-07 
集群环境下log4j日志文件命名方式在项目中,通过log4j可以实现对不同模块不同级别日志输出到不同的日志文件

集群环境下log4j日志文件命名方式

在项目中,通过log4j可以实现对不同模块不同级别日志输出到不同的日志文件中。
以xml格式为例:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->集群环境上log4j日志文件命名方式<appender?name="FILE_INFO"?class="org.apache.log4j.RollingFileAppender">
集群环境上log4j日志文件命名方式????<param?name="File"?value="/usr/local/logs/xxx_info.log"/>
集群环境上log4j日志文件命名方式????<layout?class="org.apache.log4j.PatternLayout">
集群环境上log4j日志文件命名方式????????<param?name="ConversionPattern"?value="%d?%p?[%c]?[%M]:%L?-?%m%n"/>
集群环境上log4j日志文件命名方式????</layout>
集群环境上log4j日志文件命名方式????<filter?class="org.apache.log4j.varia.LevelRangeFilter">
集群环境上log4j日志文件命名方式????????<param?name="levelMin"?value="INFO"?/>
集群环境上log4j日志文件命名方式????????<param?name="levelMax"?value="INFO"?/>
集群环境上log4j日志文件命名方式????????<param?name="AcceptOnMatch"?value="true"?/>
集群环境上log4j日志文件命名方式????</filter>
集群环境上log4j日志文件命名方式</appender>

按这种方式在单机环境下可以很方便的查询日志。
但是在集群环境下,因为项目同时部署在多个机器上,log4j生成的日志文件在每台机器上都叫xxx_info.log,在开发维护的过程中很难区分那个文件是哪台服务上的,尤其在日志查询比较频繁的情况下做区分有一定的工作量。
??? 为解决这一问题,可以在生成日志文件时增加机器标识。如100_xxx_info.log,标识ip为172.20.80.100这台机器上的。
实现这一功能需要对log4j的Appender做些改动。
通过查看log4j源码可以看出来所有的文件输出都会继承FileAppender ,修改setFile(String file)方法即可实现。
重写DailyRollingFileAppender,改继承重写后的fileappender。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式/**?*//**?从配置文件读取日志文件名?*/
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????public?void?setFile(String?file)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????String?val?=?file.trim();
集群环境上log4j日志文件命名方式????????int?index?=?val.lastIndexOf('/')?+?1;
集群环境上log4j日志文件命名方式????????String?path?=?val.substring(0,?index);
集群环境上log4j日志文件命名方式????????String?name?=?val.substring(index);
集群环境上log4j日志文件命名方式????????fileName?=?path?+?getIpSuffix()?+?"_"?+?name;
集群环境上log4j日志文件命名方式????}
集群环境上log4j日志文件命名方式
集群环境上log4j日志文件命名方式????//?获取本机ip最后一位(双网卡内网ip)
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????private?String?getIpSuffix()?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????String?ip?=?null;
集群环境上log4j日志文件命名方式????????String?suffix?=?"";
集群环境上log4j日志文件命名方式????????NetworkInterface?ni;
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????try?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????ni?=?NetworkInterface.getByName("eth1");
集群环境上log4j日志文件命名方式????????????if?(ni?==?null)
集群环境上log4j日志文件命名方式????????????????ni?=?NetworkInterface.getByName("eth0");
集群环境上log4j日志文件命名方式????????????Enumeration<InetAddress>?ias?=?ni.getInetAddresses();
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????????for?(;?ias.hasMoreElements();)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????????InetAddress?ia?=?ias.nextElement();
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????????????if?(ia?instanceof?InetAddress)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????????????ip?=?ia.getHostAddress();
集群环境上log4j日志文件命名方式????????????????}
集群环境上log4j日志文件命名方式????????????}
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????????if?(ip?==?null)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????????InetAddress?addr?=?InetAddress.getLocalHost();
集群环境上log4j日志文件命名方式????????????????ip?=?addr.getHostAddress();
集群环境上log4j日志文件命名方式????????????}
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????}?catch?(SocketException?e1)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????e1.printStackTrace();
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????}?catch?(UnknownHostException?e)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????e.printStackTrace();
集群环境上log4j日志文件命名方式????????}
集群环境上log4j日志文件命名方式集群环境上log4j日志文件命名方式????????if?(ip?!=?null)?集群环境上log4j日志文件命名方式{
集群环境上log4j日志文件命名方式????????????int?index?=?ip.lastIndexOf('.')?+?1;
集群环境上log4j日志文件命名方式????????????suffix?=?ip.substring(index);
集群环境上log4j日志文件命名方式????????}
集群环境上log4j日志文件命名方式????????return?suffix;
集群环境上log4j日志文件命名方式????}

热点排行