Ведение журнала для использования 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.*;
Например: весна, спячка, распорки и т. д.
Хотя ответ Снексе в основном правильный, есть один момент, который нужно исправить / уточнить:
- Правильно: commons-logging ищет свой файл свойств из пути к классам. Таким образом, commons-logging.properties должен быть найден в пути к классам.
- Не правильно: регистратор 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
в ваших лог.свойствах.