2017-05-25 86 views
1

我一直在主题中解决这个问题。如何将当前客户端目录添加到日志文件名?

我想是这样的:

String sCurrDir = System.getProperty("user.dir"); 
int nLastBSlash = sCurrDir.lastIndexOf('/'); 
System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 

,并增加了以下的log4j.properties:

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="Threshold" value="DEBUG" /> 
    <param name="append" value="true" /> 
    <param name="maxFileSize" value="10MB" /> 
    <param name="maxBackupIndex" value="50" /> 

    <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
    </layout> 
</appender> 

但文件名只能用连字符开始。

+0

Log4j在应用程序启动时被初始化。如果你真的想要实现这一点,你需要添加你自己的Appender,它扩展了org.apache.log4j.RollingFileAppender。 –

+0

你的问题不明确。首先,你必须清楚地指定log4j2而不仅仅是log4j,因为这两个API是非常不同的。您已经在代表当前文件夹的文件参数中有一个DOT(。)。您应该使用log4j2.properties而不是log4j.properties。 – VivekRatanSinha

回答

1

你实现不工作,因为日志已经之前已经开始你设置current.folder属性。您有权访问程序的main方法,或者这是一个基于容器的应用程序吗?

如果您有权访问main方法,则必须在创建第一个Logger实例之前确保您的第一件事是设置该属性。

0

您可以尝试实现自己的追加程序,如:

import org.apache.log4j.RollingFileAppender;  
public class CustomFileAppender extends RollingFileAppender { 

     public CustomFileAppender() { 
      super(); 
      String sCurrDir = System.getProperty("user.dir"); 
      int nLastBSlash = sCurrDir.lastIndexOf('/'); 
      System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 
     } 
    } 

配置log4j属性/ xml文件为:

<appender name="fileAppender" class="CustomFileAppender"> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="append" value="true" /> 
     <param name="maxFileSize" value="10MB" /> 
     <param name="maxBackupIndex" value="50" /> 

     <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
     </layout> 
    </appender> 
+0

我正在使用Log4j2,它无法识别RollingFileAppender。我如何修改代码来工作?谢谢 – dushkin

+0

即使你使用log4j2,这个类也应该在那里。我更新了代码中的导入。请试试这个。 –

+0

没有。它仍然显示一个错误。我添加了log4j api 2.82和log4j core 2.8.2的依赖关系。那是对的吗?另外,它提供了我将基类更改为RollingFileManager。 – dushkin

相关问题