спасибо, я установил «org.slf4j.simpleLogger.defaultLogLevel» в «error» в System.properties, однако slf4j все еще регистрирует сообщения уровня INFO. Любая идея? Кстати, где я должен положить simplelogger.properties?
Гелин Ло
2
попробуйте org.slf4j.simplelogger.defaultlog вместо org.slf4j.simpleLogger.defaultLogLevel. Файл должен быть на пути к классам, пакет по умолчанию
Евгений Дорофеев
2
На самом деле это ( defaultLogLevel) работает. Только что обнаружил, что я изменял программу в неправильной папке ;-) И defaultlogне работает. Так что вы, вероятно, хотите отредактировать свой ответ, хотя я его принял
Гелин Ло
11
Просто примечание: на самом деле оба ответа хороши, в зависимости от используемой вами версии SimpleLogger. Например, defaultLogLevel работает для 1.7.5, но defaultlog работает для 1.6.6. Я узнал об этом при настройке регистрации моего проекта и появлении этого поста
Кен Ши
112
Это пример, simplelogger.propertiesкоторый вы можете поместить в путь к классам (раскомментируйте свойства, которые вы хотите использовать):
# SLF4J's SimpleLogger configuration file
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
# Default logging detail level for all instances of SimpleLogger.
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, defaults to "info".
#org.slf4j.simpleLogger.defaultLogLevel=info
# Logging detail level for a SimpleLogger instance named "xxxxx".
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, the default logging detail level is used.
#org.slf4j.simpleLogger.log.xxxxx=
# Set to true if you want the current date and time to be included in output messages.
# Default is false, and will output the number of milliseconds elapsed since startup.
#org.slf4j.simpleLogger.showDateTime=false
# The date and time format to be used in the output messages.
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
# If the format is not specified or is invalid, the default format is used.
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
# Set to true if you want to output the current thread name.
# Defaults to true.
#org.slf4j.simpleLogger.showThreadName=true
# Set to true if you want the Logger instance name to be included in output messages.
# Defaults to true.
#org.slf4j.simpleLogger.showLogName=true
# Set to true if you want the last component of the name to be included in output messages.
# Defaults to false.
#org.slf4j.simpleLogger.showShortLogName=false
@Devavrata add the property org.slf4j.simpleLogger.logFile- Выходная цель, которая может быть путем к файлу или специальными значениями "System.out" и "System.err". По умолчанию "System.err". См. Slf4j.org/api/org/slf4j/impl/SimpleLogger.html
Роберт Хант,
Можно ли иметь несколько значений? Если да, то как? Как я хочу org.slf4j.simpleLogger.logFile = test.log, System.err?
LOLWTFasdasd asdad
1
@LOLWTFasdasdasdad К сожалению, нет, он поддерживает только одиночные цели: System.out, System.err или путь к файлу. Он разработан, чтобы быть простым, вы должны рассмотреть полную реализацию регистрации, такую как Log4J или Logback, если вам нужны более продвинутые функции.
Роберт Хант
75
Вы можете программно изменить его, установив системное свойство:
Обратите внимание, что после создания регистратора уровень журнала не может быть изменен. Если вам нужно динамически изменить уровень ведения журнала, вы можете использовать log4j с SLF4J.
«Обратите внимание, что после создания регистратора уровень журнала не может быть изменен». - Где это на самом деле указано?
Ksl
2
ksl, в org.slf4j.impl.SimpleLogger. Когда создается первый регистратор, запускается метод init (), который выбирает уровень ведения журнала по умолчанию из системных свойств. Это не обновляется в любой момент. Кроме того, org.slf4j.impl.SimpleLoggerFactory создает регистратор для класса только один раз, таким образом, один и тот же регистратор всегда возвращается для данного класса (или имени). Однако возможно наличие регистраторов с другим уровнем. Поэтому возможный обходной путь может заключаться в том, что вы назначаете эти различные регистраторы уровня своей переменной «log», когда хотите изменить уровень ведения журнала. Это не очень аккуратное решение, но должно работать.
eemelipa
@Eemuli org.slf4j.impl.SimpleLoggerВы имеете в виду фактический исходный код, а не документ?
ksl
Также верно, что LOG_FILE_KEYсвойство не может быть изменено после создания регистратора?
ksl
1
Да, я имею в виду фактический исходный код. Я не уверен насчет LOG_FILE_KEY.
eemelipa
4
Я заметил, что Eemuli сказал, что вы не можете изменить уровень журнала после их создания - и хотя это может быть дизайном, это не совсем так.
Я столкнулся с ситуацией, когда я использовал библиотеку, которая вошла в slf4j - и я использовал библиотеку, когда писал плагин maven mojo.
Maven использует (взломанную) версию slf4j SimpleLogger, и мне не удалось получить код моего плагина для перенаправления его регистрации в нечто вроде log4j, которым я мог управлять.
И я не могу изменить конфигурацию регистрации maven.
Итак, чтобы успокоить некоторые шумные информационные сообщения, я обнаружил, что могу использовать отражение таким образом, чтобы работать с SimpleLogger во время выполнения.
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.spi.LocationAwareLogger;try{Logger l =LoggerFactory.getLogger("full.classname.of.noisy.logger");//This is actually a MavenSimpleLogger, but due to various classloader issues, can't work with the directly.Field f = l.getClass().getSuperclass().getDeclaredField("currentLogLevel");
f.setAccessible(true);
f.set(l,LocationAwareLogger.WARN_INT);}catch(Exception e){
getLog().warn("Failed to reset the log level of "+ loggerName +", it will continue being noisy.", e);}
Конечно, обратите внимание, что это не очень стабильное / надежное решение ... так как оно сломается в следующий раз, когда мавенцы поменяют свой регистратор.
Ответы:
Это либо через системное свойство
или
simplelogger.properties
файл на пути к классамсм. http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html для получения подробной информации.
источник
defaultLogLevel
) работает. Только что обнаружил, что я изменял программу в неправильной папке ;-) Иdefaultlog
не работает. Так что вы, вероятно, хотите отредактировать свой ответ, хотя я его принялЭто пример,
simplelogger.properties
который вы можете поместить в путь к классам (раскомментируйте свойства, которые вы хотите использовать):источник
org.slf4j.simpleLogger.logFile
- Выходная цель, которая может быть путем к файлу или специальными значениями "System.out" и "System.err". По умолчанию "System.err". См. Slf4j.org/api/org/slf4j/impl/SimpleLogger.htmlВы можете программно изменить его, установив системное свойство:
Уровни журнала: ERROR> WARN> INFO> DEBUG> TRACE.
Обратите внимание, что после создания регистратора уровень журнала не может быть изменен. Если вам нужно динамически изменить уровень ведения журнала, вы можете использовать log4j с SLF4J.
источник
org.slf4j.impl.SimpleLogger
Вы имеете в виду фактический исходный код, а не документ?LOG_FILE_KEY
свойство не может быть изменено после создания регистратора?Я заметил, что Eemuli сказал, что вы не можете изменить уровень журнала после их создания - и хотя это может быть дизайном, это не совсем так.
Я столкнулся с ситуацией, когда я использовал библиотеку, которая вошла в slf4j - и я использовал библиотеку, когда писал плагин maven mojo.
Maven использует (взломанную) версию slf4j SimpleLogger, и мне не удалось получить код моего плагина для перенаправления его регистрации в нечто вроде log4j, которым я мог управлять.
И я не могу изменить конфигурацию регистрации maven.
Итак, чтобы успокоить некоторые шумные информационные сообщения, я обнаружил, что могу использовать отражение таким образом, чтобы работать с SimpleLogger во время выполнения.
Конечно, обратите внимание, что это не очень стабильное / надежное решение ... так как оно сломается в следующий раз, когда мавенцы поменяют свой регистратор.
источник