方法一、 解决的办法自然是用相对路径代替绝对路径,其实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系统的环境变量中设置。之所以这样,你可以看看tomcat\bin\catalina.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 FileInputStream(filePath); 
                props.load(istream); 
                istream.close(); 
                //toPrint(props.getProperty("log4j.appender.file.File")); 
                String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径 
                props.setProperty("log4j.appender.file.File",logFile); 
                PropertyConfigurator.configure(props);//装入log4j配置信息 
            } catch (IOException e) { 
                toPrint("Could not read configuration file [" + filePath + "]."); 
                toPrint("Ignoring configuration file [" + filePath + "]."); 
                return; 
            } 
        }

public static void toPrint(String content) { 
            System.out.println(content); 
        } 

实际上log4j的配置文件log4j.properties如为默认名,可放置在JVM能读到的classpath里的任意地方,一般是放在WEB- INF/classes目录下。当log4j的配置文件不再是默认名,则需要另外加载并给出参数,如上 “ropertyConfigurator.configure(props);//装入log4j配置信息”

(2).Web.xml中的配置

log4j-init 
        Log4jInit

log4j 
          WEB-INF/classes/log4j.properties

注意:上面的load-on-startup设为0,以便在Web容器启动时即装入该Servlet。log4j.properties文件放在根的properties子目录中,也可以把它放在其它目录中。应该把.properties文件集中存放,这样方便管理。 
(3).log4j.properties中即可配置log4j.appender.file.File为当前应用的相对路径.

Log4j入门使用教程 http://www.linuxidc.com/Linux/2013-06/85223.htm

Hibernate配置Log4j显示SQL参数 http://www.linuxidc.com/Linux/2013-03/81870.htm

Log4j学习笔记(1)_Log4j 基础&配置项解析 http://www.linuxidc.com/Linux/2013-03/80586.htm

Log4j学习笔记(2)_Log4j配置示例&Spring集成Log4j http://www.linuxidc.com/Linux/2013-03/80587.htm

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-09/106571p2.htm

-Dlog4j.configuration=log4j-config_folder/log4j.xml
 
它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,
也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。
 
 
 

Log4j中配置日志文件相对路径的更多相关文章

  1. Spring MVC 搭建过程中web.xml配置引入文件的路径问题

    为啥要说一下这么low的问题,因为我是一个比较low的人,哈哈.本来我技术有限,没事干自己撘个环境找找乐趣,结果被各种基础问题,弄的一脸蒙蔽.算了不多说,直接说问题. 1.首先说一下java编译后的文 ...

  2. Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空

    SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logg ...

  3. Iis 日志文件默认路径

    Iis 日志文件默认路径: C:\WINDOWS\system32\LogFiles

  4. Linux批量清空当前目录中的日志文件

    在Linux中,有时需要批量清空当前目录中的日志文件,同时还要保留日志文件. 其实一行shell命令就可以搞定,一起来看看吧. 在当前目录下,键入如下命令: for i in `find . -nam ...

  5. 在IIS6中配置html文件以ASPX方式工作

    在IIS6中配置html文件以ASPX方式工作 由于IIS6的安全不断提高,如果你需要设置html文件以ASPX文件方式被执行.仅仅设置应用程序映射是不够的,还 需要修改一些其他设置. 如果你只修改了 ...

  6. SQL Server 2008 R2 清空数据库中ldf日志文件

    /************************************************************ * Sql Server 2008 R2 清空数据库中ldf日志文件 * 将 ...

  7. log4j配置日志文件log4j.appender.R.File相对路径方法

    方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...

  8. log4j自动生成日志文件配置

    生成文件到默认位置: #生成日志文件 #log4j.appender.systemFile=org.apache.log4j.RollingFileAppender #按天生成 log4j.appen ...

  9. 如何关闭log4j中配置的spring或者hibernate的日志信息

    通常在建立一个web项目的时候,我们通常需要为其配置日志,以便了解启动过程中发生了什么,如果启动过程中发生了错误,则可以很方便的查看错误的信息,但是在项目部署到服务器上时,打印日志信息,需要耗费大量的 ...

随机推荐

  1. java泛型探索——介绍篇

    1. 泛型出现前后代码对比 先来看看泛型出现前,代码是这么写的: List words = new ArrayList(); words.add("Hello "); words. ...

  2. jQuery css操作

    jQuery操作css的元素样式 1.访问匹配元素的样式属性 来个小案例: <div id="div" style="width:200px;height:200p ...

  3. redis集群安装部署

    (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 192.168.1.160:7000 192. ...

  4. 解析HTML

                                                    解析HTML 一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源 ...

  5. js算法集合(一) 水仙花数 及拓展(自幂数的判断)

    js算法集合(一) ★ 最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法, ...

  6. yaf学习之——生成yaf示例框架

    windows 下面的生成yaf示例框架 1,下载 https://github.com/laruence/yaf 2,解压以后得到yaf-master文件夹 3,cmd命令窗口cd到上面解压的文件夹 ...

  7. B507实验室打印机连接方法

    一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...

  8. C++构造函数虚函数例题

    虚函数: #include <iostream> class A { public: A ():m_iVal() { test(); } virtual void func() { std ...

  9. Android相机是如何获取到图像的

    在研究zxing的过程中,脑袋中一直有个疑惑,那个相机并没有拍照,它是怎么获取图像的 带着这个疑惑查看Camera源码 Camera源码中有这样一个接口: public interface Previ ...

  10. 移动前端meta

    <!-- 页面描述 --> <meta name="description" content="不超过150个字符"/> <!-- ...