集群环境下log4j日志文件命名方式
2015-05-28 15:49
330 查看
在项目中,通过log4j可以实现对不同模块不同级别日志输出到不同的日志文件中。
以xml格式为例:
按这种方式在单机环境下可以很方便的查询日志。
但是在集群环境下,因为项目同时部署在多个机器上,log4j生成的日志文件在每台机器上都叫xxx_info.log,在开发维护的过程中很难区分那个文件是哪台服务上的,尤其在日志查询比较频繁的情况下做区分有一定的工作量。
为解决这一问题,可以在生成日志文件时增加机器标识。如100_xxx_info.log,标识ip为172.20.80.100这台机器上的。
实现这一功能需要对log4j的Appender做些改动。
通过查看log4j源码可以看出来所有的文件输出都会继承FileAppender ,修改setFile(String file)方法即可实现。
重写DailyRollingFileAppender,改继承重写后的fileappender。
以xml格式为例:
<appender name="FILE_INFO" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/usr/local/logs/xxx_info.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %p [%c] [%M]:%L - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="INFO" /> <param name="levelMax" value="INFO" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender>
按这种方式在单机环境下可以很方便的查询日志。
但是在集群环境下,因为项目同时部署在多个机器上,log4j生成的日志文件在每台机器上都叫xxx_info.log,在开发维护的过程中很难区分那个文件是哪台服务上的,尤其在日志查询比较频繁的情况下做区分有一定的工作量。
为解决这一问题,可以在生成日志文件时增加机器标识。如100_xxx_info.log,标识ip为172.20.80.100这台机器上的。
实现这一功能需要对log4j的Appender做些改动。
通过查看log4j源码可以看出来所有的文件输出都会继承FileAppender ,修改setFile(String file)方法即可实现。
重写DailyRollingFileAppender,改继承重写后的fileappender。
/** 从配置文件读取日志文件名 */ public void setFile(String file) { String val = file.trim(); int index = val.lastIndexOf('/') + 1; String path = val.substring(0, index); String name = val.substring(index); fileName = path + getIpSuffix() + "_" + name; } // 获取本机ip最后一位(双网卡内网ip) private String getIpSuffix() { String ip = null; String suffix = ""; NetworkInterface ni; try { ni = NetworkInterface.getByName("eth1"); if (ni == null) ni = NetworkInterface.getByName("eth0"); Enumeration<InetAddress> ias = ni.getInetAddresses(); for (; ias.hasMoreElements();) { InetAddress ia = ias.nextElement(); if (ia instanceof InetAddress) { ip = ia.getHostAddress(); } } if (ip == null) { InetAddress addr = InetAddress.getLocalHost(); ip = addr.getHostAddress(); } } catch (SocketException e1) { e1.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } if (ip != null) { int index = ip.lastIndexOf('.') + 1; suffix = ip.substring(index); } return suffix; }
相关文章推荐
- log4j中配置日志文件几种方式(转载)
- spark集群环境主机日志文件太多,超出了ext3文件系统一级子目录的个数默认为31998(个),准确地说是32000个,导致集群不正常
- MQ集群测试环境搭建(多节点负载均衡,共享一个kahaDB文件(nas方式))
- 在log4j中,输出另一个日志文件的配置方式
- log4j中配置日志文件几种方式
- 用Log4j自动生成日志(多种方式)输出到文件、数据库等
- spark集群环境主机日志文件太多,超出了ext3文件系统一级子目录的个数默认为31998(个),准确地说是32000个,导致集群不正常
- log4j中配置日志文件几种方式
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式:
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式,按天存放,解决catalina.out日志文件过大问题
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- log4j的日志文件保存到项目发布目录,log4j文件每天分割按日期命名
- java中使用log4j日志文件,读取配置文件的方式
- Log4j创建日志服务器 解决集群日志问题及话单文件
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- Oracle RAC 集群环境下日志文件结构
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式