Logback для обработки журнала SpringBoot

Spring Boot

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

Инфраструктура ведения журнала Logback рекомендуется в SpringBoot.

Пример проекта в этом разделе находится вGitHub.com/lawrence/tickets…


slf4j: унифицированная фасадная абстракция для различных фреймворков ведения журналов Java.

Общая структура ведения журналов Java: java.util.logging, log4j, logback, commons-logging.

Logback — это среда ведения журналов нового поколения, разработанная автором log4j, которая в настоящее время наиболее широко используется. SpringBoot использует logback по умолчанию, уровень INFO по умолчанию

Логбэк:

Порядок загрузки журнала: logback.xml -> application.properties -> logback-spring.xml


1. Уровень журнала

Уровень журнала, определенный log4j: отладка/информация/предупреждение/ошибка/фатальный

предупреждение, возможная ошибка; ошибка, ошибка, может привести к завершению программы; фатальная, серьезная ошибка, программа завершится

Также есть два специальных уровня: OFF — самый высокий уровень, ALL — самый низкий уровень.

log4j рекомендует использовать только четыре уровня отладки/информации/предупреждения/ошибки.

Уровень журнала: ОШИБКА -> ПРЕДУПРЕЖДЕНИЕ -> ИНФОРМАЦИЯ -> ОТЛАДКА

Если настроен уровень журнала INFO, журналы уровня INFO и выше будут выводиться, в то время как журналы ниже уровня INFO (журнал отладки) не будут выводиться.


2. SpringBoot представляет регистратор

Импортировать напрямую:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <version>2.1.11.RELEASE</version>
      <scope>compile</scope>
    </dependency>

Косвенный импорт:

Внедрение spring-boot-starter автоматически представит spring-boot-starter-loging

Введение spring-boot-starter-web автоматически представит spring-boot-starter


3. Настройте логбэк через конфигурационный файл springboot

Настройте журнал вывода в файл:

logging:
  file: logback-demo.log # 输出到项目目录下

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

уровень журнала:logging.level.*: level-name

* Относится к имени пакета или имени журнала, имя журнала, например root, означает системный журнал.

имя-уровня относится к уровню журнала, обычно используется debug/info/warn/error

Например:

logging:
  level:
    com.example.logbackdemo: debug # 指定包下日志以debug级别输出
    #root: warn # root日志以warn级别输出,不要用debug级别!!---会卡的!

В-четвертых, настройте конфигурацию журнала через файл XML.

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

Например, файл журнала очень большой, и размер журнала, создаваемого каждый день, составляет сотни МБ. Можно ли обработать один файл? Что делать, если журналы нужно сохранять по типу? Как насчет пользовательских форматов журналов?

Это вопросы.

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

Файл конфигурации фреймворка по умолчанию:

  • Журнал: 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

Порядок загрузки журнала: logback.xml -> application.properties -> logback-spring.xml

В рамках логбэка:

Рекомендуется использовать logback-spring.xml или указать файл конфигурации в приложении с помощью logging.config=classpath:xxx.xml.

Пример:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <contextName>logback-spring-demo-dev</contextName>
    <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
    <property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
    <property name="LOG_HOME" value="logs"/>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- 控制台输出-带颜色 -->
    <appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern-color}</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


    <root level="INFO">
        <appender-ref ref="CONSOLE-WITH-COLOR"/>
        <appender-ref ref="FILE"/>
    </root>

    <logger name="com.example.logbackdemo.IndexAction" level="info" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

</configuration>

Ниже подробно описаны элементы конфигурации в logback.xml:

Есть два свойства и три узла:

  1. Два свойства: contextName и свойство
  2. Три узла: appender, root, logger

4.1 свойство contextName

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

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

ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rename context [logback-demo] as [logback-spring-demo-dev] java.lang.IllegalStateException: Context has been already given a name

4.2 атрибут свойства

Тег свойства можно использовать для настройки свойств, например определения одного из них, а затем ссылки на него с помощью ${LOG_HOME}.


4.3 дополнительный узел

Appender означает приложение, которое здесь можно понимать как рендерер журнала. Например, журнал консоли отображается в одном формате, а журнал файла — в другом формате.

Приложение имеет два атрибута: имя и класс, а также два дочерних узла: rollPolicy и encoder.

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

4.3.1 Приложение консоли вывода

<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
	<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  	<pattern>${pattern}</pattern>
  </encoder>
</appender>

Кодировщик представляет выходной формат, а детали следующие:

%d означает время

%thread указывает имя потока

%-5level указывает уровень журнала, разрешая вывод длиной пять символов.

%logger{50} указывает конкретный экспортер журналов, например имя класса и длину в скобках.

%msg представляет конкретное сообщение журнала, которое имеет значение xxx в logger.info("xxx").

%n означает новую строку

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

<property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>

То есть, используя %color(xxx) для указания цвета вывода соответствующего столбца, можно добиться цветовой подсветки вывода консоли.

4.3.2 Приложение для ввода файлов

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

Например:

<property name="LOG_HOME" value="logs"/>
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    	<maxFileSize>10MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
  </rollingPolicy>

  <encoder>
    <pattern>${pattern}</pattern>
    </encoder>
</appender>

Основное содержание вышеуказанной конфигурации: вывод лога в файл под лог-файлом в указанном формате, формат имени файла указан как logs/all.date.index.log, максимальный размер лог-файла 10Мб , если превышает, будет создан новый файл.Файлы журнала хранятся в течение тридцати дней.

Индекс увеличивается с 0

RollingPolicy относится к черновой прокатке, конкретная конфигурация указана выше.

Что касается ограничения размера файла журнала, также можно использовать конфигурацию 1 ГБ.


4.4 корневой узел — включить настройку

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

Например:

<root level="INFO">
	<appender-ref ref="CONSOLE-WITH-COLOR"/>
  <appender-ref ref="FILE"/>
</root>

Указывает, что уровень является информационным, а средства визуализации CONSOLE-WITH-COLOR и FILE включены.

В соответствии с этой конфигурацией при выводе журнала консоль будет выводиться в соответствии с форматом, определенным CONSOLE, а файл журнала будет выводиться в соответствии с конфигурацией CONSOLE-WITH-COLOR.


4.5 узел регистратора

Добавьте конфигурацию в один пакет или класс:

    <!-- logger节点可以指定具体包或类的日志配置 -->
    <!-- name属性为必选,指定要配置的包或类,level和additivity为可选,有缺省值 -->
    <!-- level表示日志级别,这里配置info级别,表示info及以上级别的日志被输出 -->
    <!-- additivity表示日志是否传递到上一级,默认为true -->
    <logger name="com.example.logbackdemo.IndexAction" level="info" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

Здесь мы добавляем тестовый класс интерфейса:

@RestController
@RequestMapping(value = "log")
public class IndexAction {

    private Logger logger = LoggerFactory.getLogger(IndexAction.class);

    @GetMapping(value = "")
    public String testLoggerTag() {
        logger.debug("测试logger标签");
        logger.info("测试logger标签");
        logger.warn("测试logger标签");
        logger.error("测试logger标签");
        return "this is spring-boot-logback-demo projects.";
    }
}

Запустите проект и вызовите интерфейс, чтобы протестировать его:

file

Обнаружено, что вывод консольного журнала класса IndexAction бесцветен, то есть вступает в силу конфигурация регистратора. После того как для аддитивности задано значение true, консоль выводит одно и то же содержимое дважды.

file

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


4.6 Укажите, какие конфигурации ведения журналов включены

  1. springboot указывает, какой xml включить

    Мы можем указать, какой xml использовать в качестве конфигурации регистратора в файле конфигурации springboot, например: logging.config=classpath:logback-spring-dev.xml.

    Если не указано, он проверит, существует ли конфигурация по умолчанию в порядке logback.xml->application.yml->logback-spring.xml.

  2. Используйте тег springProfile в xml, чтобы указать, какую конфигурацию следует использовать в какой среде.

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

    <springProfile name="local,dev">
    	<root level="INFO">
    		<appender-ref ref="CONSOLE-WITH-COLOR"/>
    		<appender-ref ref="FILE"/>
    	</root>
    </springProfile>
    
    <springProfile name="prod">
    	<root level="INFO">
    		<appender-ref ref="CONSOLE-WITH-COLOR"/>
    		<appender-ref ref="FILE"/>
    	</root>
    </springProfile>
    
    

В этом случае нет необходимости предлагать несколько файлов xml, просто используйте logback-spring.xml по умолчанию.


Ссылаться на:

Грудное молоко лучше человеческого Цао Цао/spring-boot…

woo woo Краткое описание.com/afraid/not от 3 до 8 удобно…

blog.CSDN.net/pull out 1995/AR…

blog.CSDN.net/RO рекламирует и _Chen…


обмен обучением

Персональный сайт:www.eknown.cn

Гитхаб:github.com/laolunsi

публика:обезьяний язык, «Делиться технологиями, но и понимать жизнь», добро пожаловать на внимание!