Ведение журнала для использования java.util.logging

Я пытаюсь использовать ведение журнала общего достояния и хочу использовать java.util.logging в качестве основного механизма.

LogTest.java

import org.apache.commons.logging.*;

public class LogTest { 

        public static void main(String args[]) {
            System.setProperty("java.util.logging.config.file","log.properties");
            Log logger = LogFactory.getLog(LogTest.class);
            logger.trace("trace msg");
        }
}

У меня есть src/main/resources/log.properties (я использую проект Maven)

handlers=java.util.logging.ConsoleHandler

# Default global logging level.
# Loggers and Handlers may override this level
.level=ALL

Я не могу увидеть какой-либо вывод. Пожалуйста, скажите мне, как программно настроить log.properties для использования ведения журналов Java.

3 ответа

Вам необходимо указать регистратор, который реализует интерфейс Log. В этом случае Jdk14Logger.

Узнайте, как использовать "Apache Commons Logging" с "Java SE Logging"? Больше подробностей.

Кроме ссылки:

Положил "commons-logging.properties"file в classpath вашего приложения. Содержимое этого файла должно выглядеть так: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger Установка этого свойства указывает Commons-Logging использовать JDK Logger (т.е. Java SE Logger) в качестве реализации Log.

Затем положить log-config.properties в вашем classpath и настройте соответственно.

Если вы решите изменить impls в будущем, больше регистраторов доступны из коробки.

Создайте commons-logging.properties в вашем classpath:

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger

установите java.util.logging.config.file перед вашим экземпляром Logger:

System.setProperty("java.util.logging.config.file","log.properties");

тогда JDK будет регистрировать все журналы, которые использует org.apache.commons.logging.*;

Например: весна, спячка, распорки и т. д.

Хотя ответ Снексе в основном правильный, есть один момент, который нужно исправить / уточнить:

  1. Правильно: commons-logging ищет свой файл свойств из пути к классам. Таким образом, commons-logging.properties должен быть найден в пути к классам.
  2. Не правильно: регистратор JDK (июль-регистратор) загружает свою конфигурацию через FileInputStream (который работает на объектах файловой системы, а не на пути к классам). См. Java.util.logging.LogManager.readConfiguration(). Таким образом, значение системного свойства "java.util.logging.config.file" должно быть либо абсолютным путем, либо относительно фактического каталога выполнения.
# Loggers and Handlers may override this level

Попробуйте добавить java.util.logging.ConsoleHandler.level=ALL в ваших лог.свойствах.

Другие вопросы по тегам