log4j将日志写入文件

时间:2019-11-07 14:45:07

标签: java log4j

我正在使用log4j将日志写入文件,并且文件运行正常。但是,我在这里遇到的问题很少。

该应用程序接受少量参数,我正在验证其正确性。 基于参数,我正在构建日志文件名,并且仅当所有参数正确时,日志记录才开始。但是,如果参数错误,则由于不会创建日志文件,因此永远不会进行日志记录。 因此,我该如何克服这个问题并从main()之后的第一行开始记录。

class Test{
private static final Logger logger = LogManager.getLogger(Test.class);
    public static void main(String[] args){
    if (args.length < 5) {
                logger.error("Invalid arguments passed to program...."); //Not written to log file
                System.exit(1);
            }

    String id = args[0];
    String name = args[1].toLowerCase();
    String date = args[2];
    String batch = args[3];
    String file = args[4];

    String logfile = id + "_" + name + "_" + date + "_" + batch;
    System.setProperty("logfile", logfile);
    ConfigParser conf = new ConfigParser(propFile);
    String log = conf.getSetting("log4jConfPath");
    PropertyConfigurator.configure(log);

    //logs written to file from this point

我希望日志记录应从main()的第一行开始

#log file

log4j.rootLogger=INFO , file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %-4r [%t] %-5p %c %x #%L - %m%n
log4j.appender.file.File=${logfile}.log

1 个答案:

答案 0 :(得分:1)

我同意詹斯的评论。但是,如果您确实想使用用户输入的日志文件名并也记录第一行,那么您可以做的是,而不是将其作为程序参数传递,而可以在执行程序时将其作为JVM参数传递。

-Dlogfile = my-log-file.log

如果您不想使用JVM参数,那么您很不走运。