Spring Boot 2 интегрирует структуру ведения журнала log4j2.

Java распределенный

предисловие

Log42даLog4jусовершенствованная версия , и предоставляет множествоLogbackУлучшения, доступные при обращенииLogbackНекоторые врожденные проблемы в архитектуре. И в обработке журнала мы будем использоватьkafkaкак бревенчатая труба. иkafkaклиентские зависимости иLogbackСовместимость не идеальна, вы можете исключить конфликты зависимостей или использоватьLog4j2.

Исключить зависимости Logback

Spring Boot 2.xИспользовать по умолчаниюLogbackструктура ведения журнала, чтобы использоватьLog4j2надо сначала исключитьLogback.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
         <!--排除logback-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Внедрить зависимости Log4j2

<!--log4j2 依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

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

Настроить Log4j2##

Создайтеlog4j2.xmlфайл, размещенный в проектеresourcesв каталоге. Это не требует настройки. Если вам нужно указать файл конфигурации, вам нужно настроить файл в Spring bootapplication.ymlуказано вlogging.configАтрибуты. Далее более подробноконфигурационный файл log4j2:

 <?xml version="1.0" encoding="UTF-8"?>
  <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
  <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
  <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
  <configuration status="WARN" monitorInterval="30">
      <!--先定义所有的appender-->
      <appenders>
      <!--这个输出控制台的配置-->
          <console name="Console" target="SYSTEM_OUT">
          <!--输出日志的格式-->
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
          </console>
      <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
      <File name="log" fileName="log/test.log" append="false">
         <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
      </File>
      <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
          <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
                       filePattern="${sys:user.home}/logs/?{date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
              <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
              <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          </RollingFile>
          <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
                       filePattern="${sys:user.home}/logs/?{date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
              <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
              <DefaultRolloverStrategy max="20"/>
          </RollingFile>
          <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
                       filePattern="${sys:user.home}/logs/?{date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
              <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
              <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
              <Policies>
                  <TimeBasedTriggeringPolicy/>
                  <SizeBasedTriggeringPolicy size="100 MB"/>
              </Policies>
          </RollingFile>
      </appenders>
      <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
      <loggers>
          <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
          <logger name="org.springframework" level="INFO"/> 
          <logger name="org.mybatis" level="INFO"/>
          <root level="all">
              <appender-ref ref="Console"/>
              <appender-ref ref="RollingFileInfo"/>
              <appender-ref ref="RollingFileWarn"/>
              <appender-ref ref="RollingFileError"/>
          </root>
      </loggers>
  </configuration>

По сути, вы берете приведенную выше конфигурацию и меняете ее в соответствии со своими потребностями, чтобы она вступила в силу. под окнами${sys:user.home}распечатает журнал в каталог пользователя

Call Logger для вывода журналов

В приведенном ниже примере кода используется артефактlombokсередина@Slf4jАннотации просты в использованииorg.slf4j.Loggerобъект.Используйте как можно больше для ежедневного развитияSlf4jФасад для обработки журналов, старайтесь избегать использования определенной структуры ведения журналов.

package cn.felord.spring.security;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.Properties;

/**
 * @author dax
 * @since 2019/10/9 0:03
 */
@Slf4j
@RestController
@RequestMapping("/logging")
public class LogController {


    @GetMapping("/do")
    public String log() {

        log.info("log4j2 test date: {}  info: {}", LocalDate.now(), "请关注公众号:Felordcn");
 
        return "log4j2";
    }
    
}

Вывод консоли:[00:14:48:161] [INFO] - cn.felord.spring.security.LogController.log(LogController.java:23) - log4j2 test date: 2019-10-09 info: 请关注公众号:Felordcnи архив.

Суммировать

Сегодня мы изменим структуру ведения журналов Spring Boot 2.x по умолчанию.Logbackзаменитьlog4j2И подчеркнуто упомянул некоторые ключевые моменты, используемые в реальном бою. Я верю, что вы скоро сможете овладеть этим навыком. Являясь важной основой для работы приложений и бизнес-процессов, журналы являются важной гарантией устранения неполадок при разработке и отслеживания бизнеса. Я надеюсь, что вы обратите внимание.

关注公众号:Felordcn或者https://felord.cn获取更多资讯