Java Logger无法登录到控制台

时间:2015-12-27 00:28:27

标签: java logging

我已经创建了以下课程。

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有效。 我已经创建了这个类作为我的整个多线程应用程序记录器。 有什么建议? 感谢。

1 个答案:

答案 0 :(得分:2)

general

if (_isInited)
    init();

应该是

if (!_isInited)
    init();

如果init()isInited,则无法致电false。或者,您可以使用static初始化块,如

static {
    init(); // <-- will run once.
}