Управление журналами с помощью Logback в SpringBoot

Java задняя часть Debug Spring

Конфигурация журнала SpringBoot по умолчанию

SpringBootИз коробки фреймворк логирования настроен под вас по умолчанию, используйтеCommons Logging, но конфигурация по умолчанию также обеспечивает поддержку общих журналов, таких как: Java Util Logging, Log4J, Log4J2 и Logback. Каждый регистратор может быть настроен для использования содержимого журнала вывода консоли или файла.

консольный вывод

Что касается журнала журнала, сначала поговорим о 5 уровнях журнала LEVEL: От высокого к низкомуERROR,WARN,INFO,DEBUG,TRACEНизкоуровневые будут выводить высокоуровневую информацию, а высокоуровневые не будут выводить низкоуровневую. Например: уровень установлен наERRORесли,WARN,INFO,DEBUGинформация не будет выводиться. существуетSpringBootнастроен по умолчанию вERROR,WARNиINFOуровень вывода журнала на консоль. Нет в журналеFATALуровень, он будет рассматриваться какERRORуровень, с которым нужно иметь дело.

Мы можем переключиться на уровень DEBUG двумя способами:

  • Добавьте флаг --debug после запуска команды, например: $ java -jar myapp.jar --debug
  • существуетapplication.propertiesВ конфигурации debug=true , когда для этого свойства установлено значение true, основной Logger (включая встроенный контейнер, hibernate, spring) будет выводить больше контента, но журнал вашего собственного приложения не будет выводиться как уровень DEBUG.

красочный вывод

SpringBootВывод цветового журнала запускается с версии 1.4.0. Если ваш терминал поддерживает ANSI, настройка цветного вывода сделает журнал более читабельным. вapplication.propertiesустановить вspring.output.ansi.enabledпараметры для поддержки.

  • NEVER: отключить вывод в цвете ANSI (по умолчанию)
  • DETECT: Проверяет, поддерживает ли терминал ANSI, и если да, то использует цветной вывод (рекомендуется)
  • ALWAYS: Всегда используйте для вывода цветной формат ANSI.Если терминал не поддерживает его, будет много информации о помехах, что не рекомендуется.

выходной файл

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

Чтобы увеличить вывод файла, вам нужноapplication.propertiesСредняя конфигурацияlogging.fileилиlogging.pathАтрибуты.

  • logging.file: файл настроек, который может быть абсолютным или относительным путем. Например: logging.file=my.log
  • logging.path: Укажите каталог, в этом каталоге будет создан файл spring.log, и будет записано содержимое журнала, например: logging.path=/var/log

Файл журнала будет усечен, когда его размер составит 10 МБ, и будет создан новый файл журнала. Уровень по умолчанию: ОШИБКА, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ.

контроль уровня

существуетSpringBootнужно только вapplication.propertiesУправление уровнем ведения журнала осуществляется в конфигурации.

Формат конфигурации: logging.level.*=LEVEL

  • logging.level: префикс управления уровнем журнала, * — имя пакета или имя регистратора.
  • LEVEL: Опции TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

Пример:

  • logging.level.com.controller=DEBUG : все классы в пакете com.controller начинаются сDEBUGвыходной уровень
  • logging.level.root=ПРЕДУПРЕЖДЕНИЕ: корневые журналы начинаются сWARNвыходной уровень

Пользовательская конфигурация журнала

Если вы не хотите использовать конфигурацию по умолчанию, просто добавьте свой собственный файл конфигурации журнала. Поскольку служба журнала обычноApplicationContextИнициализирован перед созданием, он не должен проходитьSpringуправление конфигурационным файлом. Поэтому через системные свойства и традиционныеSpring BootВнешние файлы конфигурации по-прежнему могут хорошо поддерживать контроль журналов и управление ими.

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

  • Журнал: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
  • Log4j: log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
  • Log4j2: log4j2-spring.xml, log4j2.xml
  • JDK (Java Util Logging): logging.properties

SpringBootОфициальная рекомендация — использовать-springимя файла в качестве конфигурации вашего журнала (например, используйте logback-spring.xml вместо logback.xml )

Пользовательский формат вывода

существуетSpringBootвapplication.propertiesНастройте следующие параметры для управления выходным форматом:

  • logging.pattern.console: определяет стиль вывода на консоль (JDK Logger не поддерживается)
  • logging.pattern.file: определяет стиль вывода в файл (JDK Logger не поддерживается)

Также возможно определить эти форматы непосредственно в файле конфигурации журнала, а не в файле конфигурации приложения.

Общие шаблоны файлов конфигурации журнала

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="d:/logs"/>

    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(--){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- Console 输出设置 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
			<charset>utf8</charset>
		</encoder>
	</appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/mixedSys.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志logger(包.类)的输出级别 -->
	<logger name="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" level="DEBUG" >
		<appender-ref ref="console" />
		<appender-ref ref="file" />
	</logger>

    <logger name="org.springframework.boot" level="DEBUG"/>
    <!-- 为 Hibernate sql 定制 -->
    <!-- <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />  -->

    <!-- 日志输出级别 -->
    <root level="INFO"> <!-- 此时debug级别的信息会被过滤 -->  
        <appender-ref ref="console" />   
        <appender-ref ref="file" />   
    </root> 
    
	<!--日志异步到数据库 -->    
    <!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">  
        日志异步到数据库   
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
            连接池   
            <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">  
              <driverClass>com.mysql.jdbc.Driver</driverClass>  
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>  
              <user>root</user>  
              <password>root</password>  
            </dataSource>  
        </connectionSource>  
    </appender> -->
	
</configuration>