【问题标题】:log4j Writing Logs to Filelog4j 将日志写入文件
【发布时间】:2019-11-07 14:45:07
【问题描述】:

我正在使用 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

【问题讨论】:

  • 请编辑您的帖子以添加minimal reproducible exampleShort, Self Contained, Correct Example 或至少向我们展示您迄今为止所做的尝试。
  • @yur 用例子更新了问题
  • 你能显示你的日志配置吗?指定文件后第一个日志语句应该写在哪里命名一些文件?
  • this 有什么帮助吗?
  • @Jens,添加了日志配置

标签: java log4j


【解决方案1】:

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

-Dlogfile=my-log-file.log

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

【讨论】:

  • 我应该如何将 -Dlogfile 传递给 spark-submit?
  • --driver-java-options -Dlogfilename=my-log-file.log
猜你喜欢
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多