вызов Java logger из другого класса

#java #logging

#java #ведение журнала

Вопрос:

Я изучаю этот регистратор с java и пытаюсь вызвать класс MyLogger из основного класса, но, похоже, он не работает

MyLogger.java

 public class MyLogger {

    public MyLogger() {

        Logger logger = Logger.getLogger("MyLog");
        FileHandler fh;
        try {

        fh = new FileHandler("c:\opt\MyLogFile.log", true);
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);
        logger.log(Level.WARNING,"My first log");

        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  

Client.java

 public class Client {
    private final static Logger LOGGER = Logger.getLogger(Client.class.getName());

    public static void main(String[] args) {
        LOGGER.setLevel(Level.SEVERE);
        LOGGER.getName();
        LOGGER.getClass();
        LOGGER.info("ABC");


    }
}
  
  1. Почему он не вызывает MyLogger.java чтобы создать файл журнала?
  2. Есть ли лучший способ регистрировать консоль eclipse вместо того, чтобы использовать LOGGER для каждого метода для каждого класса?
  3. Почему некоторые используют flush() перед закрытием файла журнала?

Комментарии:

1. Как вы думаете, почему он должен использовать ваш MyLogger ?

2. где в Client.java упоминает ли он вообще о моем блоггере?

Ответ №1:

Почему он не вызывает MyLogger.java чтобы создать файл журнала?

Если это относится к running Client , то это потому, что между этим классом и вашим классом нет никакой связи MyLogger .

Есть ли лучший способ регистрировать консоль eclipse вместо того, чтобы использовать LOGGER для каждого метода для каждого класса?

Лучше — это очень субъективно. Большинство исходных кодов, которые я видел, используют парадигму, которую вы используете в своем Client классе. То есть объявление a static final Logger с именем заключающего класса и его использование там, где вам нужно что-то зарегистрировать в этом классе.

Некоторые приложения используют концепции AOP для ведения журнала.

Почему некоторые используют flush() перед закрытием файла журнала?

Некоторые реализации могут буферизировать сообщения журнала, чтобы не выполнять много небольших системных вызовов ввода-вывода, а вместо этого выполнять несколько больших вызовов. Закрытие файла журнала может не очистить буфер, поэтому вы захотите сделать flush это явно.