首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java代码中指定log4j2的日志目录?

如何在java代码中指定log4j2的日志目录?
EN

Stack Overflow用户
提问于 2014-08-13 10:54:24
回答 3查看 7.7K关注 0票数 3

我的应用程序有我创建的日志系统。不过,我想用log4j2代替它。但是,我在log4j2中的日志目录配置中遇到了一个问题。是的,我知道有可能登录到配置文件中描述的固定目录:

代码语言:javascript
复制
    <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应用程序时可以是特定的。有可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-13 11:11:20

我已经想明白了。

修改log4j2.xml

代码语言:javascript
复制
<RandomAccessFile  name="FILE" fileName="l4j2/${date:yyyy-MM-dd_hh-mm-ss}.log" append="true"  immediateFlush="false">

至:

代码语言:javascript
复制
<RandomAccessFile  name="FILE" fileName="${sys:log4j.saveDirectory}/${date:yyyy-MM-dd_hh-mm-ss}.logd" append="true" immediateFlush="false">

添加到java代码中:

代码语言:javascript
复制
 System.setProperty("log4j.saveDirectory", getMyDocuments());

您可以使用以下方法估计用户的“我的文档”:

代码语言:javascript
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2014-08-13 11:07:22

可以在文件名中使用系统属性。请参阅查找手册页的系统属性部分

示例:

代码语言:javascript
复制
<RandomAccessFile  name="FILE" 
    fileName="${sys:logFolder}/l4j2/${date:yyyy-MM-dd_hh-mm-ss}.log"
    append="true"  immediateFlush="false"> ...

您甚至可以在未定义系统属性的情况下指定默认值。语法是${sys:KEY:-DEFAULT}。例如:

代码语言:javascript
复制
${sys:logFolder:-/var/tmp}
票数 2
EN

Stack Overflow用户

发布于 2019-12-09 05:35:11

对于log4j2,您可以使用

代码语言:javascript
复制
# May change log file path as per the need
property.filename = ${sys:user.dir}/logs/debug.log
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25284278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档