Я хочу записать log4j-журнал в стандартный вывод или в файл в соответствии с переменной. Если задана переменная writeLogToFile, журнал должен быть записан в файл, в противном случае - стандартный вывод.Запись журнала на стандартный вывод или файл в log4j java
Я пробовал использовать следующий код, но журнал записывается как в файл, так и в стандартный вывод.
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
}
/*some code which uses info and debug methods to write log*/
}
}
Это работает, когда я хочу, чтобы журнал записывался на стандартный вывод, поскольку по умолчанию журнал записывается в стандартную выходную. Но это не удается, когда я хочу записать журнал в файл. Журнал записывается как на стандартный вывод, так и в файл.
Итак, я пробовал использовать следующий код, но это также не сработало.
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
Properties logProperties = new Properties();
logProperties.setProperty("log4j.additivity.notRootLogger", "false");
PropertyConfigurator.configure(logProperties);
}
/*some code which uses info and debug methods to write log*/
}
}
Я также попытался следующие
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
}
else {
ConsoleAppender cappender = new ConsoleAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), "System.out");
logger.addAppender(cappender);
}
/*some code which uses info and debug methods to write log*/
}
}
Может кто-нибудь мне помочь в решении этой проблемы?
[EDIT]
OK. Думаю, я решил проблему. Я добавил строку logger.setAdditivity(false);
в моем коде, как этот
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
logger.setAdditivity(false); //added line here
}
/*some code which uses info and debug methods to write log*/
}
}
Теперь она работает должным образом. Если writeLogToFile=true
, то журнал записывается в стандартный вывод, иначе он записывается в файл.
Вставьте свой конфигурационный файл log4j – Drona
Я вложил конфигурационный файл в ответ на ответ Павла. Кстати, я нашел решение, и я отредактировал свое оригинальное сообщение соответственно. – jyotesh