建议直接使用jvm中定义的变量或者操作系统的环境变量。

log4j.appender.logfile.File=${user.dir}/logs/app.log,使用tomcat容器时${user.dir}对应tomcat的bin目录;
log4j.appender.logfile.File=${user.home}/logs/app.log,${user.home}对应操作系统当前用户目录;
log4j.appender.logfile.File=${webApp.root}/logs/app.log,${webApp.root}对应当前应用根目录;

log4j.appender.E.File = ${catalina.base}/logs/error.log

System.getProperty(..)方法可以得到的变量也是可以的,比如说user.dir等与操作系统相关的变量会默认加载进来。

另外,利用启动参数-D也可以手动加入系统参数.

比如可以这样:

在程序启动时获取classpath路径,用System.setProperty(log_path,classpath)把值设置到一个变量中,在log4j.property的日志文件中路径前面加上${log_path}/

// 初始化日志路径
String rootPath = PathUtil.getPath();
System.setProperty("log_path",rootPath);

陷阱tips:

附:

    public static void main(String args[]){
Properties properties = System.getProperties();
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
java.runtime.name:Java(TM) SE Runtime Environment
sun.boot.library.path:C:\Program Files\Java\jdk1.8.0_11\jre\bin
java.vm.version:25.11-b03
java.vm.vendor:Oracle Corporation
java.vendor.url:http://java.oracle.com/
path.separator:;
java.vm.name:Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg:sun.io
user.country:CN
user.script:
sun.java.launcher:SUN_STANDARD
sun.os.patch.level:
java.vm.specification.name:Java Virtual Machine Specification
user.dir:F:\workspace2
java.runtime.version:1.8.0_11-b12
java.awt.graphicsenv:sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs:C:\Program Files\Java\jdk1.8.0_11\jre\lib\endorsed
os.arch:amd64
java.io.tmpdir:C:\Users\AppData\Local\Temp\
line.separator: java.vm.specification.vendor:Oracle Corporation
user.variant:
os.name:Windows 8.1
sun.jnu.encoding:GBK
java.library.path:C:\Program Files\Java\jdk1.8.0_11\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;F:\oracle;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\tools\apache-maven-3.1.0\bin;C:\Program Files\Java\jdk1.8.0_11\bin;C:\Users\qing\AppData\Roaming\npm;D:\Program Files\TortoiseSVN\bin;D:\Program Files\SlikSvn\bin;D:\Program Files\nodejs\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;D:\Program Files\MATLAB\R2016b\runtime\win64;D:\Program Files\MATLAB\R2016b\bin;D:\Program Files\MATLAB\R2016b\polyspace\bin;C:\Users\qing\AppData\Roaming\npm;C:\Users\qing\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\HMA! Pro VPN\bin;.
java.specification.name:Java Platform API Specification
java.class.version:52.0
sun.management.compiler:HotSpot 64-Bit Tiered Compilers
os.version:6.3
user.home:C:\Users\qi
user.timezone:Asia/Shanghai
java.awt.printerjob:sun.awt.windows.WPrinterJob
file.encoding:UTF-8
java.specification.version:1.8
java.class.path:C:\Program Files\Java\jdk1.8.0_11\jre\lib\charsets.jar;……省略
user.name:qing
java.vm.specification.version:1.8
sun.java.command:com.sung.risk.client.Test
java.home:C:\Program Files\Java\jdk1.8.0_11\jre
sun.arch.data.model:64
user.language:zh
java.specification.vendor:Oracle Corporation
awt.toolkit:sun.awt.windows.WToolkit
java.vm.info:mixed mode
java.version:1.8.0_11
java.ext.dirs:C:\Program Files\Java\jdk1.8.0_11\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path:C:\Program Files\Java\jdk1.8.0_11\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_11\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_11\jre\classes
java.vendor:Oracle Corporation
file.separator:\
java.vendor.url.bug:http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding:UnicodeLittle
sun.cpu.endian:little
sun.desktop:windows
sun.cpu.isalist:amd64

log4j将日志文件输出到相对路径的更多相关文章

  1. log4j 将日志文件输出到web-inf下的解决办法

    参考链接:http://blog.csdn.net/chenfengdejuanlian/article/details/70738995 只需要配置好即可,用的时候直接在代码中获得记录器记录,监听器 ...

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

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

  3. 使用log4j配置不同文件输出不同内容

    敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...

  4. log4j输出多个自定义日志文件,动态配置路径

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  5. Java - 自动配置log4j的日志文件路径

    目录 1 日志路径带来的痛点 2 log4j.properties文件的配置 3 彻底解决痛点 3.1 单独的Java程序包 (非Java Web项目) 3.2 Web项目 4 附录 - 获取当前项目 ...

  6. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  7. Log4j 2X 日志文件路径问题

    关于路径问题网上说啥的都有,但是也不能说人家错,只能说不适合你这个. 一开始,我用的   ${webapp.root} <RollingFile name="rollingFileSy ...

  8. log4j日志文件输出保存

    og4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=app.log log4j.appe ...

  9. 使用logback.xml配置来实现日志文件输出

    转自:http://sungang-1120.iteye.com/blog/2104296 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback- ...

随机推荐

  1. js获取元素的滚动高度,和距离顶部的高度

    jq: 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 $(doc ...

  2. fastjson从1.1.41升级到1.2.28的坑

    最近因为fastjson安全漏洞,升级jar包时,踩了一些坑. 新版本FastJsonHttpMessageConverter初始化,默认设置MediaType为*/* 背景: 使用Spring Re ...

  3. @Controller 类中初始化问题解决办法

    在Controller类中常常遇到有些参数需要初始化,甚至有些只允许初始化一次,而Controller类不像servelet类可以调用init()函数进行初始化,这里想到的办法是设置标记值,让初始化部 ...

  4. 智能合约语言 Solidity 教程系列7 - 以太单位及时间单位

    这是Solidity教程系列文章第7篇介绍以太单位及时间单位,系列带你全面深入理解Solidity语言. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所 ...

  5. PHP之防御sql注入攻击的方式

    长期以来,web的安全性存在着巨大的争议与挑战.其中,sql注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们php大法天生弱类型的机制,总是让黑客有机可乘,绕过防御 ...

  6. 转载NodePort,LoadBalancer还是Ingress?我该如何选择 - kubernetes

    原文:http://mp.weixin.qq.com/s/dHaiX3H421jBhnzgCCsktg ClusterIP ClusterIP服务是Kuberntets的默认服务.它在集群内部生成一个 ...

  7. java创建运行以及项目结构

    一 创建java project 再src下添加class,选择一个class添加main方法作为程序的入口 二.项目结构: src下添加不同的包,命名方法为com.jikexueyuan.hello ...

  8. 关于css选择器中有小数点的标签获取

    需求说明 因为项目中章节配置的时候有小数点,1,1.1,1.2,1.11的标题,这个时候每一行标题的id,class设置成标题号是独一无二的标记.但是,直接用js获取是获取不到的,例如$('#3.22 ...

  9. Konckout第六个实例:自定义组件 -- 发表评论

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. 单例模式、简单工厂模式、XML解析

    单例模式: 什么是单例模式? 针对特定问题提出的特定解决方案 为什么使用设计模式? 让程序有更好的可扩展性 在哪里使用? 一般情况下,开发中真正使用设计模式的地方,JVM(虚拟机)底层机制模式 usi ...