我创建了这个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);
}
但由于某种原因,控制台消息被打印两次。你能帮我解决这个问题吗?
我认为配置不正确,但我无法找到错误。
答案 0 :(得分:1)
当您看到相同的日志消息两次或更多次时,这是因为您有两个或更多记录器写入同一个appender。您可以禁用子记录器的可加性,也可以识别记录器并删除不需要的appender。
要识别记录器,您可以在消息(%c
)中打印记录器名称,或在log4j代码中设置断点。