log4j 将日志写入文件
log4j Writing Logs to File
我正在使用 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
我同意 Jens 的意见。但是如果你真的想使用用户输入的日志文件名并记录第一行,那么你可以做的是,而不是将它作为程序参数传递,你可以在执行程序时将它作为 JVM 参数传递。
-Dlogfile=my-log-file.log
如果您不想使用 JVM 参数,那您就不走运了。
我正在使用 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
我同意 Jens 的意见。但是如果你真的想使用用户输入的日志文件名并记录第一行,那么你可以做的是,而不是将它作为程序参数传递,你可以在执行程序时将它作为 JVM 参数传递。
-Dlogfile=my-log-file.log
如果您不想使用 JVM 参数,那您就不走运了。