log4j 相对路径 引出的问题及解决办法
2012-05-21 21:47
281 查看
为了便于我们的移植,我们在启动Server的时候,通常会加入一个参数:-Dlog4j.home=XXX,然后在配置log4j的时候,可以使用相对路径,如:
然后,日志就会输入到我们想要的地方,或许因为是文档上介绍是这样介绍的,我们可能没有疑问。但是,我们换另外一种思路来想?如果没有添加这样启动参数,而直接调用会是什么样的结果?答案就是:启动的时候会报 XXX/XXX.log找不到类似错误。
尝试另外一种办法:如果定义相同名称的环境变量如何?答案仍然是相同的错误。我们在想,log4j是否没有提供环境变量的读取?找呀找呀,找到一篇文章介绍到,可以通过修改log4j的源码,以达到能够使用环境变量的目的。
于是,将看过的源代码进行修改:参照
修改 log4j 代码 以支持在 log4j.properties 设置环境变量
下面也将相应的代码列出来:(添加函数getEnvProperty)
同时在函数添加相应的调用:public static String substVars(String val, Properties props)
注意:下面代码的先后顺序,决定着启动参数与环境变量的先后顺序
这样就可以解决系统环境变量没有办法使用的问题,但是这里有两个问题可以思考一下:
1、getProperty与getenv 的区别?可以参考JAVA帮助手册
Oracle帮助文档
2、为什么log4j没有在代码中添加获取系统环境变量?其实也很显然,系统环境变更是针对当前主机的所有Server,而-Dlog4j.home只针对当前Server,符合编程的最小权限化。
log4j.appender.E.File = ${log4j.home}/XXX/XXX.log
然后,日志就会输入到我们想要的地方,或许因为是文档上介绍是这样介绍的,我们可能没有疑问。但是,我们换另外一种思路来想?如果没有添加这样启动参数,而直接调用会是什么样的结果?答案就是:启动的时候会报 XXX/XXX.log找不到类似错误。
尝试另外一种办法:如果定义相同名称的环境变量如何?答案仍然是相同的错误。我们在想,log4j是否没有提供环境变量的读取?找呀找呀,找到一篇文章介绍到,可以通过修改log4j的源码,以达到能够使用环境变量的目的。
于是,将看过的源代码进行修改:参照
修改 log4j 代码 以支持在 log4j.properties 设置环境变量
下面也将相应的代码列出来:(添加函数getEnvProperty)
public static String getEnvProperty(String key, String def) { try { String value = System.getenv(key); if (value == null) { value = def; } return value; } catch(Throwable e) { // MS-Java throws com.ms.security.SecurityExceptionEx LogLog.debug("Was not allowed to read system property \""+key+"\"."); return def; } }
同时在函数添加相应的调用:public static String substVars(String val, Properties props)
注意:下面代码的先后顺序,决定着启动参数与环境变量的先后顺序
String replacement = getSystemProperty(key, null); // then try in environment properties if (replacement == null) { replacement = getEnvProperty(key, null); } // then try props parameter if(replacement == null && props != null) { replacement = props.getProperty(key); }
这样就可以解决系统环境变量没有办法使用的问题,但是这里有两个问题可以思考一下:
1、getProperty与getenv 的区别?可以参考JAVA帮助手册
Oracle帮助文档
2、为什么log4j没有在代码中添加获取系统环境变量?其实也很显然,系统环境变更是针对当前主机的所有Server,而-Dlog4j.home只针对当前Server,符合编程的最小权限化。
相关文章推荐
- 用log4j解决java相对路径问题
- 在JAVA WEB项目中,JSP中的图片无法显示,绝对路径和相对路径问题的解决办法。
- cocos2dx3.2 使用SimpleAudioEngine时不能播放音频解决办法(中文路径问题)
- CEF3加载本地HTML文件时中文路径乱码的问题解决办法.
- springMVC静态资源路径问题解决办法
- mvc 解决StyleBundle中 图片绝对路径 装换成相对路径的问题 CssRewriteUrlTransform
- Log4j日志记录的相对路径问题与打印HQL
- struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
- IE8上传文件时获取文件本地路径问题(C:\fakepath\……)的解决办法
- 由OpenSessionInViewFilter报错引出的spring3.0事务配置问题及解决办法
- 解决idea web 配置相对路径问题
- 解决多层级加载时的相对路径问题
- linux下Python各种关于路径问题的解决办法
- kettle-engine.jar与 log4j.jar包冲突问题解决办法
- base标签和JSP声明变量解决文件相对路径和绝对路径问题
- 解决asp.net 连接access中的相对路径问题
- [转]解决PHP相对目录问题最有效的办法
- SDK Manager 打不开, "系统找不到指定路径 " "Unable to access jarfile lib\archquery.jar"问题的解决办法
- 纯资源DLL编写 及相对路径问题解决
- asp.net2.0解决相对路径出错的问题,ResolveUrl的用法(转)