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


300

Це дуже просте запитання, але я не можу знайти інформацію.
(Можливо, моїх знань про рамки Java сильно бракує)

Як я можу встановити рівень журналу за допомогою application.properties?
І реєстрація розташування файлів тощо?


1
Для запису ще одним варіантом є встановлення рівня журналу як змінної середовища, наприклад через інформаційну панель heroku. In Settings-> Config Varsвстановити logging.level.com.yourpackageбажаний рівень (INFO, ПОМИЛКА, DEBUG).
LukeSolar

Відповіді:


354

Оновлення: Починаючи з 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
Зазвичай все, що ви можете зробити в командному рядку, працює у зовнішньому файлі конфігурації. Тож налагодження = true би це зробив, я думаю. Цей прапор є дещо особливим, оскільки ведення журналу потрібно ініціалізувати дуже рано, але я думаю, що це спрацювало б.
Дейв Сайер

7
BTW кращою системою лісозаготівлі є зворотний зв'язок, і це те, що ви отримуєте за замовчуванням від стартера. Таким чином, logback.xml - найпоширеніший інструмент для налаштування журналу дрібнозернистим чином. Прапор --debug просто перемикає деякі вибрані канали весняного ведення журналу.
Дейв Сайер

Ще одна порада, весняний черевик включає приємну базу.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 щодо журналу за допомогою профілів буде: 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аргумент VM до конфігурації запуску / налагодження програми.

Це дасть вам помилку лише на вході у виробництво та налагодження журналу під час розробки БЕЗ запису виводу у файл журналу. Це підвищить продуктивність під час розробки (і збереже SSD-накопичувачі за кілька годин роботи;)).


1
Знак '=' для призначення не спрацював. Призначення було виконано з роздільником ':'. logging.level.:DEBUG
randomin substanceOfLivingThing,

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

Правильний спосіб встановити рівень кореневого журналу - це використання властивості logging.level.root. Дивіться документацію , яка оновлювалася з моменту спочатку заданого питання.

Приклад:

logging.level.root=WARN

15

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

logging.level.com.company.myproject = ДЕБУГ

logging.level.org.springframework.web = DEBUGі logging.level.org.hibernate = DEBUGвстановить рівень реєстрації лише для класів Spring Framework Web і Hibernate.

Для налаштування розташування файлів журналу використовуйте

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


14

Якщо у вас є Spring Boot, ви можете безпосередньо додати наступні властивості у файл application.properties, щоб встановити рівень журналу, налаштувати шаблон реєстрації та зберігати журнали у зовнішньому файлі.

Це різні рівні реєстрації та його порядок від мінімального << максимуму.

OFF << FATAL << ПОМИЛКА << 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 дійсно дозволить вести журнал налагодження.


8

Якщо ви хочете використати інший фреймворк журналу, наприклад, log4j, я знайшов найпростіший підхід - відключити весняні черевики власного журналу та реалізувати свій власний. Таким чином я можу налаштувати кожен loglevel в одному файлі, 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!


Це виключення спрацювало на мене. Мій REST Api не був вибраний моєю залежністю log4j та log4j.properties.
ankitjaininfo

У них також є весняний завантажувач-стартер-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".

Для налаштування більш тонких налаштувань системи ведення журналу потрібно використовувати нативний конфігураційний формат, підтримуваний відповідною LoggingSystem. За замовчуванням 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.


1
Це налаштовується на рівні програми. ОП хоче простежити лише для журналів зимування, для яких вам знадобиться фільтр рівня пакету в налаштуваннях журналу
Sudip Bhandari

2

у весняному завантажувальному проекті ми можемо написати logging.level.root = УВАГА, але тут проблема полягає в тому, що ми повинні перезапустити ще раз, навіть якщо ми додали залежність від devtools, у файлі властивостей, якщо ми змінили будь-яке значення, не буде автоматично визначати, для цього обмеження я дізнався Рішення i, ми можемо додати виконавчий механізм у pom.xml та передати рівень реєстратора, як показано нижче, як показано на клієнта листоноші в URL-адресі http: // localhost: 8080 / loggers / ROOT або http: // localhost: 8080 / loggers / com .mycompany та в тілі ви можете передати формат json, як показано нижче

{
  "configuredLevel": "WARN"
}

1

У випадку затьмарення IDE і ваш проект породжений, не забудьте очистити і побудувати проект, щоб відобразити зміни.


1

За допомогою Springboot 2 ви можете встановити рівень кореневого журналу за допомогою змінної середовища таким чином:

logging.level.root=DEBUG

Або ви можете встановити певний журнал для таких пакетів:

logging.level.my.package.name=TRACE

для конфігурації змінних середовища слід скористатися:, LOGGING_LEVEL_ROOT=DEBUGвикористовуючи синтаксис справи верблюда
Ентоні Даханна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.