Как записывать сообщения журнала в файл с помощью Spring Boot?

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

application.properties:

logging.level: DEBUG
logging.level: ERROR
logging.file: ${HOME}/application.log

Я получаю сообщения журнала INFO только в моем файле application.log но я также хочу сообщения ERROR и DEBUG.

Мое требование состоит в том, что я хочу сообщение ERROR в файле error.log и сообщении DEBUG в сообщениях debug.log и INFO в info.log.

Любая помощь очень ценится.

Ответ 1

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

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

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

Итак, откройте свои требования:

  1. "Я хочу регистрировать сообщение в файле, а не на консоли".

Согласно документам:

По умолчанию Spring Boot будет регистрироваться только на консоли и не будет записывать файлы журналов. Если вы хотите записать файлы войти дополнительно (курсив добавлен) к выходу консоли необходимо установить logging.file или свойство logging.path (например, в ваших application.properties).

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

  1. "Я получаю сообщения журнала сообщений только в моем файле application.log, но мне нужна ошибка, а также сообщения отладки".

По умолчанию Spring Boot регистрируется на уровне INFO, который должен включать ERROR, вы уверены, что не используете журналы ERROR с настройками по умолчанию?

Кроме того, вы указываете только самый высокий уровень, который хотите записать, а не на каждый уровень, и вы должны указать регистратор, на который хотите установить уровень.

Это не сработает:

logging.level: DEBUG
logging.level: ERROR

Это пример настройки настраиваемых уровней журнала в соответствии с документами:

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ОШИБКА

Вы также можете использовать logging.level.* Для установки уровня корневого регистратора следующим образом:

logging.level.ROOT: DEBUG

Обратите внимание, что установка регистрации DEBUG в журнале регистрации ROOT приведет к созданию большого количества журналов. Я только что протестировал его здесь и получил примерно 13 МБ журналов только при запуске, ничего не делая.

  1. "Я хочу сообщение об ошибке в файле error.log и отладочном сообщении в debug.log и информационных сообщениях в info.log".

Опять же, это невозможно сделать, используя только свойства. Spring Boot позволяет настроить точно одно свойство logging.file которое будет содержать все журналы.

Полный список доступных свойств журнала и значений образцов см. Здесь.

Ответ 2

Здесь, в вашем случае, это не будет работать, поскольку вы пытаетесь установить уровень регистрации ROOT на несколько уровней.

logging.level: DEBUG
logging.level: ERROR

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

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, your logs it 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

Ответ 3

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

Он описан в документах загрузки Spring:

Ответ 4

Вместо использования этих свойств попробуйте добавить файл logback.xml в ту же папку, что и application.properties. Настройте logback.xml любым способом, который вам нужен для регистрации.