我创造了这个Java代码来配置Log4j打印两次控制台消息
public class LogMessages
{
private final Logger log;
public LogMessages(Configuration cv)
{
log = Logger.getLogger(LogMessages.class);
ConsoleAppender console = new ConsoleAppender(); //create appender
// configure the appender
console.setLayout(new PatternLayout("%d{dd/MM/yyyy HH:mm:ss} %m%n")); // Set output format for the console messages
String consoleLoggingLevel = cv.getConsoleLoggingLevel();
if ("DEBUG".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.DEBUG);
}
else if ("INFO".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.INFO);
}
else if ("WARN".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.WARN);
}
else if ("ERROR".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.ERROR);
}
else if ("FATAL".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.FATAL);
}
else if ("OFF".equalsIgnoreCase(consoleLoggingLevel))
{
console.setThreshold(Level.OFF);
}
console.activateOptions();
Logger.getRootLogger().addAppender(console);
DailyRollingFileAppender fa = new DailyRollingFileAppender();
fa.setName("FileLogger");
fa.setFile("log" + File.separator + "messages.log");
fa.setDatePattern("'.'yyyy-MM-dd");
fa.setLayout(new PatternLayout("%d{dd/MM/yyyy HH:mm:ss} %m%n")); // Set output format for the file logging
String fileLoggingLevel = cv.getFileLoggingLevel();
if ("DEBUG".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.DEBUG);
}
else if ("INFO".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.INFO);
}
else if ("WARN".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.WARN);
}
else if ("ERROR".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.ERROR);
}
else if ("FATAL".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.FATAL);
}
else if ("OFF".equalsIgnoreCase(fileLoggingLevel))
{
fa.setThreshold(Level.OFF);
}
fa.setAppend(true);
fa.activateOptions();
// add appender to any Logger
Logger.getRootLogger().addAppender(fa);
}
但由于某些原因被打印两次控制台消息。你能帮我解决这个问题吗?
我想配置不正确,但我找不到我的错误。
你没有控制台appender获得控制台输出吗? – bvj
是的,我删除了'fa.setAppend(true);'但我仍然看到消息两次。 –
不是那个。注释掉这个调用:'Logger.getRootLogger()。addAppender(console);' – bvj