配置log4j以在运行时记录到自定义文件

时间:2009-08-24 18:50:00

标签: java log4j

任何人都可以指导我如何配置log4j以记录我在运行时指定的特定文件。日志文件的名称和路径是在运行时生成的,应用程序必须登录到特定文件。

通常,log4j.properties文件中的文件appender条目指向应用程序将使用的日志文件。但是,在这种情况下,我想从命令行读取日志文件路径并登录到该特定文件。

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:93)

您也可以从log4j.properties文件执行此操作。使用下面的示例文件,我添加了系统属性 $ {logfile.name}

# logfile is set to be a RollingFileAppender
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${logfile.name}
log4j.appender.logfile.MaxFileSize=10MB
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%-5p]%d{yyyyMMdd@HH\:mm\:ss,SSS}\:%c - %m%n

然后可以通过两种不同的方式设置日志文件名:

  1. 作为命令行,系统属性传递给java“-Dlogfile.name = {logfile}”
  2. 在java程序中直接通过设置系统属性(在对log4j进行任何调用之前)。

    System.setProperty(“logfile.name”,“some path / logfile name string”);

答案 1 :(得分:58)

改编自log4j文档:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;

public class SimpandFile {
   static Logger logger = Logger.getLogger(SimpandFile.class);
   public static void main(String args[]) {

      // setting up a FileAppender dynamically...
      SimpleLayout layout = new SimpleLayout();    
      FileAppender appender = new FileAppender(layout,"your filename",false);    
      logger.addAppender(appender);

      logger.setLevel((Level) Level.DEBUG);

      logger.debug("Here is some DEBUG");
      logger.info("Here is some INFO");
      logger.warn("Here is some WARN");
      logger.error("Here is some ERROR");
      logger.fatal("Here is some FATAL");
   }
}

答案 2 :(得分:0)

也可以通过log4j.properties文件中的这个属性定义

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.maxFileSize=5000KB
log4j.appender.logfile.maxBackupIndex=5
log4j.appender.logfile.File=/WebSphere/AppServer/profiles/Custom01/error.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %C %M %c{1}:%L - %m%n

答案 3 :(得分:0)

工作且已经过测试

// setting up a FileAppender dynamically...
SimpleLayout layout = new SimpleLayout(); 
RollingFileAppender appender = new RollingFileAppender(layout,"file-name_with_location",true);
                    appender.setMaxFileSize("20MB");
                    logger.addAppender(appender);

答案 4 :(得分:0)

只需删除您的 log4j 代码并在您的 java 类中替换此代码即可,无需添加属性或 xml 文件


   softWrap: true,
    overflow: TextOverflow.ellipsis,
  ),

上面的代码会记录每分钟的日志。

谢谢