【发布时间】:2020-12-30 20:50:07
【问题描述】:
以下是我的记录器的代码。记录到文件完美无缺,但控制台处理程序不会在 Level.INFO 下方打印任何消息。
public class ServerLogger {
/*
* Log file size
*/
final private static int FILE_SIZE = 1024 * 100;
/**
* Creates and return server logger
*
* @param dir log files directory
* @param consoleEnabled if set to true then logging to console is enabled
* @param debugEnabled if set to true then debug level of logging is enabled
*
* @return sever logger
*
* @throws SecurityException
* @throws IOException
*/
public static Logger getLogger(final String dir, final boolean consoleEnabled, final boolean debugEnabled)
throws SecurityException, IOException {
Logger logger = Logger.getLogger(Server.class.getName());
logger.setUseParentHandlers(false);
/*
* remove all handlers if any
*/
Handler[] handlers = logger.getHandlers();
if (handlers.length > 0) {
for (Handler handler : handlers)
logger.removeHandler(handler);
}
/*
* create formatter
*/
Formatter formatter = new LineFormatter();
/*
* if console logging is enabled then add console handler
*/
if (consoleEnabled) {
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(formatter);
logger.addHandler(consoleHandler);
}
/*
* add file handler
*/
String nameTemplate = dir + "\\" + "server-log%g.txt";
FileHandler fileHandler = new FileHandler(nameTemplate, FILE_SIZE, 10);
fileHandler.setFormatter(formatter);
logger.addHandler(fileHandler);
Level level = debugEnabled ? Level.FINE : Level.INFO;
logger.setLevel(level);
return logger;
}
static private class LineFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return String.format("[%1$tF %1$tT] [%4$-7s] %5$s %n", record.getMillis(), record.getSourceMethodName(),
record.getLoggerName(), record.getLevel(), record.getMessage(), record.getThrown());
}
};
public static void main(String[] args) throws SecurityException, IOException {
//test
Logger logger = ServerLogger.getLogger("C:\\logs", true, true);
logger.severe("severe");
logger.warning("warning");
logger.info("info");
logger.config("config");
logger.fine("fine");
logger.finer("finer");
logger.finest("finest");
}
我用StreamHandler 替换了ConsoleHandler,但这并没有帮助。
用logger.setLevel(Level.ALL) 替换logger.setLevel(level) 也无济于事。使用handler.set(Level level) 设置处理程序级别不会改变任何东西。
控制台上的消息是:
[2020-12-30 22:09:59] [SEVERE ] severe
[2020-12-30 22:10:00] [WARNING] warning
[2020-12-30 22:10:00] [INFO ] info
你能帮忙吗?
【问题讨论】: