【问题标题】:How to specify log directory of log4j2 in java code?java代码中如何指定log4j2的日志目录?
【发布时间】:2014-08-13 10:54:24
【问题描述】:

我的应用程序有我创建的日志系统。但是我想用 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 应用程序时指定。有没有可能?

【问题讨论】:

    标签: java logging configuration directory log4j2


    【解决方案1】:

    我想通了。

    从

    修改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;
    }
    

    【讨论】:

      【解决方案2】:

      您可以在文件名中使用系统属性。请参阅 Lookup 手册页的系统属性 section。

      例子:

      <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}
      

      【讨论】:

        【解决方案3】:

        在log4j2的情况下,可以使用,

        # May change log file path as per the need
        property.filename = ${sys:user.dir}/logs/debug.log
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-22
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          • 1970-01-01
          • 2019-10-10
          • 2016-01-26
          • 2012-06-10
          相关资源
          最近更新 更多