我的应用程序有我创建的日志系统。不过,我想用log4j2代替它。但是,我在log4j2中的日志目录配置中遇到了一个问题。是的,我知道有可能登录到配置文件中描述的固定目录:
<RandomAccessFile name="FILE" fileName="l4j2/${date:yyyy-MM-dd_hh-mm-ss}.log" append="true" immediateFlush="false">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-6p %C{1}.%t:%L >>> %m%n"/>
</RandomAccessFile >但是我想在用户的“我的文档”目录中记录数据,这个目录在启动java应用程序时可以是特定的。有可能吗?
发布于 2014-08-13 11:11:20
我已经想明白了。
修改log4j2.xml
<RandomAccessFile name="FILE" fileName="l4j2/${date:yyyy-MM-dd_hh-mm-ss}.log" append="true" immediateFlush="false">至:
<RandomAccessFile name="FILE" fileName="${sys:log4j.saveDirectory}/${date:yyyy-MM-dd_hh-mm-ss}.logd" append="true" immediateFlush="false">添加到java代码中:
System.setProperty("log4j.saveDirectory", getMyDocuments());您可以使用以下方法估计用户的“我的文档”:
String getMyDocuments()
{
String out = ".\\";
try
{
Process process = Runtime.getRuntime().exec("reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v personal");
process.waitFor();
StringWriter sw = new StringWriter();
int c;
while ((c = process.getInputStream().read()) != -1)
{
sw.write(c);
}
String output = sw.toString().replaceAll("\t", " ");
String[] parsed = output.split("\\t|\\s{2,}");
}
catch (Exception e)
{
e.printStackTrace();
}
return out;
}发布于 2014-08-13 11:07:22
可以在文件名中使用系统属性。请参阅查找手册页的系统属性部分。
示例:
<RandomAccessFile name="FILE"
fileName="${sys:logFolder}/l4j2/${date:yyyy-MM-dd_hh-mm-ss}.log"
append="true" immediateFlush="false"> ...您甚至可以在未定义系统属性的情况下指定默认值。语法是${sys:KEY:-DEFAULT}。例如:
${sys:logFolder:-/var/tmp}发布于 2019-12-09 05:35:11
对于log4j2,您可以使用
# May change log file path as per the need
property.filename = ${sys:user.dir}/logs/debug.loghttps://stackoverflow.com/questions/25284278
复制相似问题