Spring Boot: Как мне установить уровень ведения журнала с помощью application.properties?

301

Это очень простой вопрос, но я не могу найти информацию.
(Может быть, мои знания о фреймворках Java сильно отсутствуют)

Как установить уровень ведения журнала с помощью application.properties?
И местоположение файла журнала и т. Д.?

zeodtr
источник
1
Для записи, другой вариант - установить уровень журнала в качестве переменной среды, например, через панель управления heroku. В Settings-> Config Varsустановите logging.level.com.yourpackageжелаемый уровень (INFO, ERROR, DEBUG).
LukeSolar

Ответы:

355

Обновление: Начиная с Spring Boot v1.2.0.RELEASE, настройки применяются application.propertiesили application.ymlприменяются. См. Раздел « Уровни журналов» справочного руководства.

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

Для более ранних версий Spring Boot вы не можете. Для этого вам просто нужно использовать обычную конфигурацию для вашей среды ведения журналов (log4j, logback). Добавьте соответствующий файл конфигурации ( log4j.xmlили logback.xml) в src/main/resourcesкаталог и настройте по своему вкусу.

Вы можете включить ведение журнала отладки, указав --debugпри запуске приложения из командной строки.

Spring Boot также предоставляет отличную отправную точку для входа в систему для настройки некоторых параметров по умолчанию, окраски и т. Д. Файла base.xml, который можно просто включить в файл logback.xml. (Это также рекомендуется из стандартного logback.xml в Spring Boot.

<include resource="org/springframework/boot/logging/logback/base.xml"/>     
М. Дейн
источник
8
Обычно все, что вы можете сделать в командной строке, работает во внешнем конфигурационном файле. Так что debug = true сделает это, я думаю. Этот флаг немного особенный, потому что регистрация должна быть инициализирована очень рано, но я думаю, что это сработает.
Дейв Сайер
7
Кстати, предпочтительной системой ведения журнала является logback, и это то, что вы получаете по умолчанию из стартовых помп. Таким образом, logback.xml - это наиболее распространенный инструмент для точной настройки регистрации. Флаг --debug просто включает некоторые выбранные каналы регистрации Spring.
Дейв Сайер
Другой совет, весенняя загрузка включает хороший base.xml . Что является хорошей отправной точкой. (См. Мой расширенный ответ).
М. Дейнм
@ M.Deinum Еще раз спасибо за отличный совет! Теперь я могу изменить уровень журнала для моего собственного кода.
Zeodtr
2
Кажется, мы можем, сейчас. Что касается Spring v4.1.3.RELEASE (с Spring Boot v1.2.0.RELEASE), настройки применяются application.propertiesили application.ymlприменяются, как ответил Ричард (по модулю :или =проблема --- двоеточие, кажется, работает для меня).
Эрик Платон
108

Вы можете сделать это, используя ваш application.properties.

logging.level.=ERROR-> Устанавливает уровень ведения журнала корня на ошибку
...
logging.level.=DEBUG-> Устанавливает уровень ведения журнала корня на DEBUG

logging.file=${java.io.tmpdir}/myapp.log-> Устанавливает абсолютный путь к файлу журнала TMPDIR / myapp.log

. application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties:

logging.level.=DEBUG
logging.file=

Когда вы разрабатываете внутри своей любимой IDE, вы просто добавляете -Dspring.profiles.active=devаргумент as VM в конфигурацию run / debug вашего приложения.

Это даст вам ошибку только при входе в систему и ведении журнала отладки во время разработки БЕЗ записи результата в файл журнала. Это улучшит производительность во время разработки (и сэкономит накопителям SSD несколько часов работы;)).

Ричард
источник
1
Знак «=» для назначения не работает. Назначение было выполнено с использованием «:» в качестве разделителя. logging.level.:DEBUG
randominstanceOfLivingThing
2
Странно, у меня эта настройка работает в примере проекта. Знаки '' (пробел), '=' и ':' обрабатываются одинаково как разделитель, за исключением случаев, когда в ключах используются разделители. Вы уверены, что ваш ключ не содержит пробелов?
Ричард
1
Можно подтвердить, что ":" работает, но "=" игнорируется. Редактировать: Говорили скоро, между "=" и уровнем был пробел. все работает сейчас.
Майк Р
1
Это не работает в моем тесте с spring-boot 1.4.0: logging.level.=DEBUGприведет к сбою приложения и получению ошибки:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang
2
Мне кажется, logging.level.это всего лишь удобный синтаксический ярлык logging.level.root, который можно предпочесть как (1) менее склонный к путанице с опечаткой, (2) потенциально более явный и (3) работу со =знаком присваивания, который обеспечивает более общую согласованность в файл конфигурации.
Ален
66

Правильный способ установить уровень ведения журнала root - использовать свойство logging.level.root. Смотрите документацию , которая была обновлена ​​с тех пор, как этот вопрос был задан изначально.

Пример:

logging.level.root=WARN
Гилберт Аренас Кинжал
источник
15

Предположим, что ваше приложение имеет имя пакета как com.company.myproject. Затем вы можете установить уровень регистрации для классов внутри вашего проекта, как указано ниже в файлах application.properties

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGи logging.level.org.hibernate = DEBUGустановит уровень ведения журнала только для классов веб-среды Spring и Hibernate.

Для настройки местоположения файла журнала используйте

logging.file = /home/ubuntu/myproject.log

shaunthomas999
источник
14

Если вы используете Spring Boot, вы можете напрямую добавить следующие свойства в файл application.properties, чтобы установить уровень ведения журнала, настроить шаблон ведения журнала и сохранить журналы во внешнем файле.

Это разные уровни ведения журнала и его порядок от минимального << максимального.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

Пожалуйста, пройдите по этой ссылке, чтобы настроить свой журнал более ярко.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

Хардик Патель
источник
Я не знаю почему, но logging.level.tech.hardik = трассировка это не работает в моем случае, когда я помещаю logging.level.roo = трассировка это работает
Арвинд Кумар
10

Удостовериться, что совет Дэйва Сайера получит некоторую любовь, потому что добавление debug=trueв application.properties действительно включит ведение журнала отладки.

oravecz
источник
8

Если вы хотите использовать другую структуру ведения журнала, например, log4j, я обнаружил, что самый простой подход - отключить собственную регистрацию в весенних сапогах и реализовать свою собственную. Таким образом, я могу настроить каждый уровень журнала в одном файле, log4j.xml (в моем случае).

Для этого вам просто нужно добавить эти строки в ваш pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

Вы, вероятно, уже имеете первую зависимость и нуждаетесь только в двух других. Обратите внимание, что этот пример охватывает только log4j.
Вот и все, теперь все готово для настройки ведения журнала загрузки в вашем конфигурационном файле log4j!

atripes
источник
Это исключение сработало для меня. Мои REST Api не были выбраны моя зависимость log4j и log4j.properties.
ankitjaininfo
у них также есть spring-boot-starter-log4j2 сейчас
Kalpesh Soni
4

Вы можете попробовать установить уровень журнала на DEBUG, он покажет все при запуске приложения

logging.level.root=DEBUG
Ахмед Салем
источник
3

Для записей: официальная документация , как для Spring Boot v1.2.0.RELEASE и Spring v4.1.3.RELEASE:

Если единственное изменение, которое вам нужно внести в ведение журнала, - это установить уровни различных средств ведения журнала, вы можете сделать это в application.properties, используя префикс «logging.level», например:

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

Вы также можете установить местоположение файла для входа (в дополнение к консоли), используя "logging.file".

Чтобы настроить более точные параметры системы ведения журнала, необходимо использовать собственный формат конфигурации, поддерживаемый рассматриваемой системой ведения журнала. По умолчанию Spring Boot выбирает исходную конфигурацию из ее местоположения по умолчанию для системы (например, classpath: logback.xml для Logback), но вы можете указать расположение файла конфигурации, используя свойство «logging.config».

Эрик Платон
источник
2

Если вы хотите установить более подробную информацию, добавьте имя файла конфигурации журнала «logback.xml» или «logback-spring.xml».

в вашем файле application.properties введите следующее:

logging.config: classpath:logback-spring.xml

в loback-spring.xml введите следующее:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>
Шелдон Папа
источник
2

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

Исключить из документов:

  • Создать группу регистрации
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Установите уровень ведения журнала для группы
logging.level.tomcat=TRACE

Это хорошая особенность, которая приносит больше гибкости.

Мартин Хорейн
источник
2

В моем текущем конфиге я определил это в application.yaml так:

logging:
  level:
    ROOT: TRACE

Я использую spring-boot: 2.2.0.RELEASE. Вы можете определить любой пакет, который должен иметь уровень TRACE.

fascynacja
источник
1
Это устанавливается на уровне приложения. OP хочет трассировку только для Hibernate бревен , для которого потребовалось бы фильтр на уровне пакета в настройках журнала
Sudip Bhandari
2

в весеннем загрузочном проекте мы можем написать logging.level.root = WARN, но здесь проблема в том, что мы должны перезапустить снова, даже если мы добавили зависимость devtools, в файле свойств, если мы изменим, любое значение не будет автоматически определено, для этого ограничения я узнал решение, т.е. мы можем добавить привод в pom.xml и передать уровень ведения журнала, как показано ниже, как показано в клиенте почтальона в строке URL http: // localhost: 8080 / loggers / ROOT или http: // localhost: 8080 / loggers / com .mycompany и в теле вы можете передать формат JSON, как показано ниже

{
  "configuredLevel": "WARN"
}
Сиддартха Камбл
источник
1

В случае затмения IDE и ваш проект maven, не забудьте очистить и построить проект, чтобы отразить изменения.

Сабариш Кумаран.В
источник
1

В Springboot 2 вы можете установить уровень ведения корневого журнала с помощью переменной среды, например:

logging.level.root=DEBUG

Или вы можете установить определенное ведение журнала для пакетов, как это:

logging.level.my.package.name=TRACE
Jakudaba
источник
для конфигурации переменных среды вы бы предпочли использовать: LOGGING_LEVEL_ROOT=DEBUGс использованием синтаксиса верблюжьего случая
Энтони Даханн