Ведение журнала slf4j с помощью jdk - как включить отладку?

По умолчанию slf4j при использовании с jdk (slf4j-jdk14-1.6.1.jar) не регистрирует сообщения отладки. Как мне их включить?

Я не могу найти ни в официальных документах, ни в Интернете, ни здесь информации о том, как его включить.

Я нашел некоторую информацию о (хотя и не удалось) создании файла в% JDK_HOME% / lib и определении уровня в файле конфигурации. Однако я хотел бы определить уровень во время компиляции / выполнения, чтобы я мог как запускать, так и отлаживать свое приложение из моей среды IDE с разными уровнями ведения журнала.

Нет ли какой-нибудь переменной среды, которую я могу установить, или аргумента виртуальной машины?


person Kissaki    schedule 25.11.2010    source источник


Ответы (5)


Как вы думаете, почему он не регистрирует сообщения DEBUG?

Если вы имеете в виду, что ваши log.debug(String) вызовы журналирования не попадают в java.util.logging файлы журналов, то я предполагаю, что вам нужно настроить logging.properties файл конфигурации, чтобы разрешить сообщения журнала на уровне FINE.

Если вы не хотите связываться с глобальным %JRE_HOME%/lib/logging.properties, вы можете просто передать -Djava.util.logging.config.file=logging.properties в командной строке - это заставит систему ведения журнала искать этот файл конфигурации в текущем каталоге.

Или используйте другой (программный) способ настройки java.util.logging, см. Ниже для руководства.

Это не имеет ничего общего с настройкой SLF4J; фактически, SLF4J не имеет какой-либо конфигурации, все настраивается путем простой замены файлов JAR.


Для справки:

person Neeme Praks    schedule 25.11.2010
comment
Я хочу, чтобы сообщения отладки отображались в моей консоли (stdout / stderr). Здесь используется затмение. Кроме того, как указано в вопросе, я бы предпочел установить это во время компиляции или выполнения вместо статического файла, который применяется ко всем проектам и всем конфигурациям выполнения. Это возможно? - person Kissaki; 25.11.2010
comment
вы пробовали -Djava.util.logging.config.file = logging.properties? - person Neeme Praks; 25.11.2010
comment
Хорошо, я попробую. Спасибо. (Лучше, чем ничего, хотя я все же предпочел бы var- / par- / env-setting вместо использования файла.) - person Kissaki; 25.11.2010
comment
Что ж, вы можете сделать один файл конфигурации для всех ваших проектов, а затем указать параметр -Djava.util.logging.config.file для этого файла. Таким образом можно избежать создания отдельного файла для каждого проекта. И, если вы не хотите ничего указывать в командной строке, я думаю, вы можете определить переменную среды с именем java.util.logging.config.file - если я правильно помню, JRE импортирует все переменные среды, как если бы они были указаны в командная строка. - person Neeme Praks; 25.11.2010
comment
Привет, Наэми, только предупреждаю, ваш Java Logging API и ссылка на то, как его использовать, мертва - person CubeJockey; 05.04.2016
comment
Спасибо CubeJockey, я связал еще один урок. - person Neeme Praks; 06.04.2016

Если вы используете реализацию slf4j SimpleLogger, прочтите это.

Там вы можете увидеть, что simpleLogger использует INFO в качестве уровня журнала по умолчанию. Вы можете изменить его, используя системное свойство. Это полезно для непроизводственной среды:

static {

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
}
person KingQuercus    schedule 26.08.2015
comment
Просто убедитесь, что вы позвонили до logger = LoggerFactory.getLogger(MyClass.class); - person Ilya Gazman; 25.04.2020

Вы можете добавить -Dorg.slf4j.simpleLogger.defaultLogLevel=debug к параметрам ВМ.

person Antoine    schedule 07.03.2020

Я просто помещаю свой файл logging.properties в файл WEB-INF / classes моих приложений (или использую аргумент командной строки, указанный Neeme Praks, если вы не развертываете войну), и открываю файл свойств в eclipse, чтобы я мог тонко настройте его, чтобы регистрировать пакеты и на интересующем меня уровне.

В файле logging.properties вам необходимо убедиться, что и уровень регистратора, и уровень обработчика установлены на нужный вам уровень. Например, если вы хотите, чтобы ваш вывод выводился на консоль, вам необходимо иметь как минимум следующее:

#logging.properties file contents

#Define handlers
handlers=java.util.logging.ConsoleHandler

#Set handler log level
java.util.logging.ConsoleHandler.level=FINE

#Define your logger level
com.company.application.package.package.level=FINE

#Assign your handler to your logger
com.company.application.package.package.handlers=java.util.logging.ConsoleHandler

Вы упомянули slf4j-jdk14-1.6.1.jar. Это обеспечивает привязку slf4j к java.util.logging. Вам нужно, чтобы это было в вашем пути к классам, но убедитесь, что у вас также есть slf4j api (slf4j-api-1.7.12.jar) в вашем пути к классам.

Я нахожу пример файла logging.properties в этом ссылка полезна для создания различных регистраторов и обработчиков, чтобы дать вам детальный контроль над тем, какие журналы идут на консоль, а какие - в файл :.

И вот руководство по slf4j.

person Jibby    schedule 07.06.2015
comment
Плюс один за это! Не осознавал, что мне нужно было установить уровень и для обработчика, и для регистратора. - person Pubudu; 03.07.2017

если вы используете ломбок Slf4j

 package com.space.slf4j;

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    /**
     * @author anson
     * @date 2019/6/18 16:17
     */
    @Slf4j
    @RestController
    public class TestController {

        @RequestMapping("/log")
        public String testLog(){
            log.info("#########  info  #########");
            log.debug("#########  debug  #########");
            log.error("#########  error  #########");
            return null;
        }
    }

application.yml

logging:
   level:
      root: debug
person anson    schedule 22.07.2019