log4j中配置日志文件相对路径方法分析

 

方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log
其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty ("WORKDIR", WORKDIR);设置好根路径,此操作可通过一初始的servlet进行。

方法二、可以使用服务器环境变量
log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其中的${catalina.home}并非windows系统的环境变量,这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样,你可以看看tomcatbincatalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中

方法三、通过servlet初始化init()方法中加载file属性实现相对路径
具体实现:做一个servlet,在系统加载的时候,就把properties的文件读到一个properties文件中.那个file的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),让后把这个properties对象设置到propertyConfig中去,这样就初始化了log的设置.在后面的使用中就用不着再配置了
一般在我们开发项目过程中,log4j日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,目前我采用了动态改变日志路径方法来实现相对路径保存日志文件
(1).在项目启动时,装入初始化类:
public class Log4jInit extends HttpServlet {
         static Logger logger = Logger.getLogger(Log4jInit.class);
         public Log4jInit() {
         }

         public void init(ServletConfig config) throws ServletException {
             String prefix = config.getServletContext().getRealPath("/");
             String file = config.getInitParameter("log4j");
             String filePath = prefix + file;
             Properties props = new Properties();
             try {
                 FileInputStream istream = new FileInputSt

时间: 2024-09-20 05:33:49

log4j中配置日志文件相对路径方法分析的相关文章

xcode中获取js文件的路径方法(推荐)_javascript技巧

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"click" ofType:@"js"]; 理论上这样是应该能获取click.js的路径的,但是返回的确是null. 解决方法是: 项目的TARGETS-->Build Phases 在Compile Sources中 ,去掉你的js文件 在Copy Bundle Resources中,加上你的js文件 原理应该就是改之前Xcode默认把

log4j2 日志 配置-log4j2中如何设置日志文件的路径

问题描述 log4j2中如何设置日志文件的路径 例如我现在想在代码中指定好日志文件为c:log.log,可以让日志在没有配置文件的情况下也能写到文件里

log4j如何让日志文件输出到相对于classpath的相对路径

问题描述 输出日志到文件,我用的是相对路径,类似这种格式./xxx/test.log.结果我发现这个路径在linux下得到的不是相对class的路径,而是我启动程序的根目录,我没用使用类似tomcat这样的容器,就是直接用java -jar命令启动的程序,结果得到的路径却是我当前所在的路径,到底怎么能让它把日志放在classpath相对路径 解决方案 在程序启动时获取classpath路径,用System.setProperty(log_path,classpath)把值设置到一个变量中,在lo

在.net中读写config文件的各种方法

原文 http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collection config文件 - 读与写 读写 .net framework中已经定义的节点 xml配置文件 xml配置文件 - CDATA xml文件读写注意事项 配置

path-在tomcat的conf的server.xml中配置应用的虚拟路径为什么不行

问题描述 在tomcat的conf的server.xml中配置应用的虚拟路径为什么不行 但是如果直接放到webapps中就能够打开了,这是怎么回事呢? 解决方案 ew 当转义字符处理了? 解决方案二: 除了设置路径还要把原来的默认发布目录下的文件拷贝一份到你设置的虚拟目录下 解决方案三: 所谓的虚拟目录指的是tomcat会将那个目录当成项目来发布 解决方案四: tomcat虚拟目录设置 在tomcat6版本中: 1.[官方文档]本人不推荐. 在tomcatconf下server.xml中找到 u

详解在.net中读写config文件的各种方法_实用技巧

今天谈谈在.net中读写config文件的各种方法. 在这篇博客中,我将介绍各种配置文件的读写操作. 由于内容较为直观,因此没有过多的空道理,只有实实在在的演示代码, 目的只为了再现实战开发中的各种场景.希望大家能喜欢. 通常,我们在.NET开发过程中,会接触二种类型的配置文件:config文件,xml文件. 今天的博客示例也将介绍这二大类的配置文件的各类操作. 在config文件中,我将主要演示如何创建自己的自定义的配置节点,而不是介绍如何使用appSetting . 请明:本文所说的conf

过滤Android工程中多余资源文件的解决方法_Android

本文以实例讲述了过滤Android工程中多余资源文件的解决方法,很有实用价值!具体描述如下: 很多开发人员在Android项目开发过程中经常会遇到这样的情况:界面开发人员发布了一个新版本的资源包,不过有的图片名称改了,有的图片删掉了,可是在实现的时候开发人员只是把新的资源覆盖到原来的资源文件夹中,随着版本的发布,在drawable或values中积累的无用资源越来越多,直到最后发布正式版的时候再想要删除这些多余的文件,于是不得不一个一个文件检查看是否有用,再决定要不要删除之. 有鉴于此,很有必要

log4j每天生成日志文件

问题描述 log4j每天生成日志文件 我在本机配置的log4j,是可以第天生成日志文件的,但我把项目部署到win server 2008以后,就不会每天生成了,而是每天追加到第一次启动时生成的日志文件里面,不知道是咋回事呢,权限那些也是正常的,下面是我的log4j配置: #日志级别INFO,输出到控制台.文件 log4j.rootLogger=INFO,CONSOLE,FILE #控制台输出配置 log4j.appender.CONSOLE=org.apache.log4j.ConsoleApp

thinkPHP中配置的读取与C方法详解_php实例

本文实例讲述了thinkPHP中配置的读取与C方法.分享给大家供大家参考,具体如下: 1.项目公共配置 Conf/config.php 内容如下 <?php /** *项目公共配置 *@package *@author **/ return array( 'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay', 'APP_AUTOLOAD_PATH' =>