Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Почему вы думаете, что он не регистрирует сообщения 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.


Для справки:

Ответ 2

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

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

static {

    System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
}

Ответ 3

Я просто помещаю свой файл 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.

Ответ 4

если вы используете lombok 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