log4j.xml配置文件中引入变量
2015-09-18 13:25
295 查看
Boss最初建议,修改Tomcat的启动脚本,在里面增加变量配置,比如“-Dlog4jOutputPath=c:/log4j”。
我一听,就不太赞成这种做法了。对于开发与运维都是一拨人,经常需要和其它开发人员交流的情况,修改Tomcat自身的配置比较麻烦。
为什么这么说呢?
Tomcat是系统级的程序,而我们的代码是应用级的程序。开发者,对自己的应用程序,一般是掌控度非常高的,但是对于Tomcat等不是自己写的系统程序,把控度比较低。Tomcat的随便一行启动代码,不小心改错了,就启动不了了。
修改Tomcat还有坏处,本地开发、线上部署、交接给其它客户,还得让客户去修改Tomcat这个和咱们的程序无关的配置,是不科学的。
我的建议是,把这些配置,放在外围,写入个文件,比如startupTomcat.sh,在启动的时候指定参数。每个人都可以很灵活地修改log4j等配置参数。
初步商议,我们采用这种做法。
总结下:
启动的时候,增加VM参数,-Dlog4jOutputPath=c:/log4j----------------------------------------------------------------------------------------------------------
第2种做法,适合开发和运维都是同一人的情况,把log4j的变量,放在Web.xml里,部署的时候,需要手动修改这个变量。
log4j配置
可在web.xml中配置log4j.xml的位置,参数名称为:log4jXmlPath。
也可以,配置log4j的日志输出位置的目录,参数名称为:log4jOutputPath。
注意:这2个参数都必须输入绝对地址,如果log4jXmlPath没有值,或者对应的文件不存在,将把classpath下的log4j.xml作为默认配置文件。如果再找不到,将报错,log4j配置失败。
如果log4jOutputPath没有值,或者对应的文件不存在,将把classpath下的log4j文件夹作为默认的输出目录。
Author:fansunion@qq.com 2015年1月8日
Java代码 Log4jInit.java
----------------------------------------------------------------------------------------------------------
我一听,就不太赞成这种做法了。对于开发与运维都是一拨人,经常需要和其它开发人员交流的情况,修改Tomcat自身的配置比较麻烦。
为什么这么说呢?
Tomcat是系统级的程序,而我们的代码是应用级的程序。开发者,对自己的应用程序,一般是掌控度非常高的,但是对于Tomcat等不是自己写的系统程序,把控度比较低。Tomcat的随便一行启动代码,不小心改错了,就启动不了了。
修改Tomcat还有坏处,本地开发、线上部署、交接给其它客户,还得让客户去修改Tomcat这个和咱们的程序无关的配置,是不科学的。
我的建议是,把这些配置,放在外围,写入个文件,比如startupTomcat.sh,在启动的时候指定参数。每个人都可以很灵活地修改log4j等配置参数。
初步商议,我们采用这种做法。
总结下:
<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${log4jOutputPath}/front/default.log" /><!-- 设置日志输出文件名 --> </appender>
启动的时候,增加VM参数,-Dlog4jOutputPath=c:/log4j----------------------------------------------------------------------------------------------------------
第2种做法,适合开发和运维都是同一人的情况,把log4j的变量,放在Web.xml里,部署的时候,需要手动修改这个变量。
log4j配置
可在web.xml中配置log4j.xml的位置,参数名称为:log4jXmlPath。
也可以,配置log4j的日志输出位置的目录,参数名称为:log4jOutputPath。
<servlet> <servlet-name>Log4jInit</servlet-name> <servlet-class>cn.fansunion.common.web.Log4jInit</servlet-class> <init-param> <param-name>log4jXmlPath</param-name> <param-value>C:/log4j.xml</param-value> </init-param> <init-param> <param-name>log4jOutputPath</param-name> <param-value>C:/log4j/xiaolei2</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>
注意:这2个参数都必须输入绝对地址,如果log4jXmlPath没有值,或者对应的文件不存在,将把classpath下的log4j.xml作为默认配置文件。如果再找不到,将报错,log4j配置失败。
如果log4jOutputPath没有值,或者对应的文件不存在,将把classpath下的log4j文件夹作为默认的输出目录。
Author:fansunion@qq.com 2015年1月8日
Java代码 Log4jInit.java
public class Log4jInit extends HttpServlet { private static final long serialVersionUID = 1L; public void init(ServletConfig config) throws ServletException { // 从web.xml中找到log4j的输出目录 String log4jOutputPath = config.getInitParameter("log4jOutputPath"); // 默认的日志输出位置 if (StringUtils.isBlank(log4jOutputPath)) { log4jOutputPath = Log4jInit.class.getClassLoader().getResource("") .getFile() + "/log4j"; } File log4jOutputPathFile = new File(log4jOutputPath); // 如果输出文件不存在,手动创建 boolean log4xmlFileExists = log4jOutputPathFile.exists(); if (!log4xmlFileExists) { System.out.println(log4jOutputPathFile.mkdirs()); } // log4j.xml文件中的变量是在这里设置的 System.setProperty("log4jOutputPath", log4jOutputPath); // 从web.xml中找到log4j.xml的输出目录 String log4jXmlPath = config.getInitParameter("log4jXmlPath"); boolean exist = false; // 如果在web.xml手动配置,log4jXmlPath应该使用绝对地址,否则,就使用默认的位置和文件名就行 if (StringUtils.isNotBlank(log4jXmlPath)) { File file = new File(log4jXmlPath); exist = file.exists(); } // log4jXmlPath默认位于classpath下log4j.xml if (!exist) { URL resource = Log4jInit.class.getClassLoader().getResource( "log4j.xml"); if (resource != null) { log4jXmlPath = resource.getFile(); } } DOMConfigurator.configure(log4jXmlPath); } }
----------------------------------------------------------------------------------------------------------
相关文章推荐
- unity3d实现插件快速开发对话系统
- java 学习系列 自我认识
- Ubuntu下Eclipse集成Android ADT后logcat只显示Level一列
- Jenins插件修改-TestLink
- mac上校验文件的 md5 sha-1
- Mongodb怎样删除重复记录
- iOS自定义控件
- Thrift学习笔记
- 修改 SVN 账户密码的方法
- MeasureSpec
- ios9 适配
- android_Pull解析xml
- cannot open file "mfc42u.lib"
- Ubuntu之安装 samba 服务器
- 抽象依赖原则
- bzoj1648:奶牛野餐
- 删除oracle重复数据
- 【Mockplus教程】重命名
- sublime text3自定义快捷键
- isMemberOfClass的使用举例isKindOfClass的应用举例