我已经创建了以下课程。
package bgu.spl.utils;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class AppLogger
{
private final static Logger _logger = Logger.getLogger("MyAppLogger");
private static boolean _isInited = false;
private synchronized static void init()
{
_logger.setLevel(Level.ALL);
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new SimpleFormatter());
handler.setLevel(Level.ALL);
_logger.addHandler(handler);
_isInited = true;
}
public synchronized static void general (String text)
{
if (_isInited)
init();
System.out.println(text);
}
private static String tickStr(int tick)
{
return tick < 0 ? "" : (" - Tick: " + tick);
}
public synchronized static void severe (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.severe(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void warning (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.warning(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void info (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.info(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void config (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.config(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void fine (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.fine(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void finer (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.finer(type.getName() + tickStr(tick) + ". " + text);
}
public synchronized static void finest (Class<?> type, String text, int tick)
{
if (_isInited)
init();
_logger.finest(type.getName() + tickStr(tick) + ". " + text);
}
}
我的问题是,没有任何东西正在打印到控制台上..所以主要尝试使用处理程序和级别...
当然,正常System.out.println
有效。
我已经创建了这个类作为我的整个多线程应用程序记录器。
有什么建议?
感谢。
答案 0 :(得分:2)
在general
,
if (_isInited)
init();
应该是
if (!_isInited)
init();
如果init()
为isInited
,则无法致电false
。或者,您可以使用static
初始化块,如
static {
init(); // <-- will run once.
}