[kotcloud] kotlin + springboot (三)lo4j2 + slf4j配置日志,多环境日志

概述

  • log4j2 支持同步日志和异步日志 , 性能优于log4j 和logback .
  • log4j2 支持配置方式: xml , json , yaml, properties

自动发现配置文件(Automatic Configuration) , 目录在classpath下: maven目录 (src -> main -> resources) ,文件发现顺序:

log4j2-test.properties 
 log4j2-test.yaml
 log4j2-test.yml
 log4j2-test.json
 log4j2-test.jsn
 log4j2-test.xml
 log4j2.properties
 log4j2.yaml
 log4j2.yml
 log4j2.json
 log4j2.jsn
 log4j2.xml

如果没有配置文件 , log4j2 默认配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
  • Appenders配置参考:
  1. Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
  2. log4j2常用Appender介绍

最好的文档 ,还是在官网

使用log4j2.yml

Configuration:
  status: WARN
  Appenders:
  #配置控制台输出的格式
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        #%d日期 %t线程 %-5level五个字符的日志输出级别 %logger日志发生的位置 %m日志内容 %n换行
        pattern: %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

  Loggers:
    Root:
      #总输出级别 error  , 输出到控制台
      level: ERROR
      AppenderRef:
        ref: Console
    Logger:
      #org.kotcloud路径下的日志输出级别为DEBUG, additivity(默认true)=false不重复输出
      name: org.kotcloud
      level: DEBUG
      additivity: false

不要配置DTD文件

配置pom.xml

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <!-- 排队默认日志 -->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 引入log4j2,会引入slf4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- web项目 , 引入log4j-web -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- 使用log4j2.yml格式的配置文件,必须加这个依赖,用于识别.yml -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

在Web应用程序中使用Log4j 2 在Java EE Web应用程序中使用Log4j或任何其他日志框架时,您必须特别小心。当容器关闭或Web应用程序被取消部署时,对日志>资源进行适当清理(数据库连接关闭,文件关闭等)非常重要。由于Web应用程序中类加载器的性质,Log4j资源无法通过正常方式清理。当Web应用程序部署时必须“启动”Log4j,并在Web应用程序未使用时“关闭”。它的工作方式取决于您的应用程序是Servlet 3.0还是更新版本或 Servlet 2.5 Web应用程序。

无论哪种情况,您都需要将log4j-web模块添加到您的部署中,详见 Maven,Ivy和Gradle Artifacts手册页。

为了避免问题,当包含log4j-web jar时,Log4j关闭钩子将自动被禁用。

使用log4j2,slf4j

@RestController
open class IndexController{

    val log : Logger = LoggerFactory.getLogger(IndexController::class.java)

    @RequestMapping("/index")
    fun index(id:String="") : String{
        log.info("id:{}",id)
        return id
    }
}

完成后启动服务 , 请求接口: http://localhost:8080/index?id=123456

输出 :

2018-04-09 12:33:34.640 [http-nio-80-exec-3] INFO  org.kotcloud.controller.IndexController - id:123456

日志配置成功!

多环境配置日志:

springBoot可以使用多环境的属性配置文件 , 那么在多环境的属性配置文件中指定日志文件 ,就可以区分环境了.

新增以下文件:

  • log4j2-dev.yml
  • log4j2-test.yml
  • log4j2-pro.yml

在属性配置文件(application-{profile}.yml)中配置不同环境的日志 application-dev.yml

logging:
  config: classpath:log4j2-dev.yml

log4j2-dev.yml , 开发环境希望输出更多的日志, 可以把日志级别尽量调到最低 , 且只输出到控制台

Configuration:
  status: WARN
  Appenders:
  #配置控制台输出的格式
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        #%d日期 %t线程 %5p五个字符的日志输出级别 %l日志发生的位置 %m日志内容 %n换行
        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"

  Loggers:
    Root:
      #总输出级别 DEBUG, 输出到控制台
      level: DEBUG
      AppenderRef:
        ref: Console
    Logger:
      #org.kotcloud路径下的日志输出级别为trace, additivity(默认true)=false不重复输出
      name: org.kotcloud
      level: TRACE
      additivity: false
      AppenderRef:
        ref: Console

log4j2-test.yml ,测试环境日志,输出日志到文件,不切分日志.

Configuration:
  status: WARN
  Properties:
    Property:
      name: pattern
      #%d日期 %t线程 %5p五个字符的日志输出级别 %l日志发生的位置 %m日志内容 %n换行
      value: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"
  Appenders:
    #配置控制台输出的格式
    File:
        #输出到项目根路径下的 logs/out.log文件
      name: fileLog 
      fileName: logs/out.log
      PatternLayout:
        pattern: ${pattern}

  Loggers:
    Root:
      #总输出级别 error  , 输出到控制台
      level: ERROR
      AppenderRef:
        ref: fileLog
    Logger:
      #org.kotcloud路径下的日志输出级别为trace, additivity(默认true)=false不重复输出
      name: org.kotcloud
      level: DEBUG
      additivity: false
      AppenderRef:
        ref: fileLog


log4j2-pro.yml 生产日志输出到文件 , 并日志量达到一定量切分日志


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章