spring boot集成日志

1.spring boot集成日志

07 Springboot(new) · 语雀

1、导包
复制代码
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <!-- springboot默认是用logback的日志框架的(性能差),所以需要排除logback,不然会出现jar依赖冲突的报错 -->
   <exclusions><!-- 去掉springboot默认配置 -->
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2、配置日志文件

在resources目录下,使用log4j2.xml文件

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status log4j2内部输出自身的日志信息的级别 -->
<!-- configuration中主要包括有 Properties、Appenders、Loggers标签 -->
<configuration status="INFO">
    <!-- 全局参数 -->
    <Properties>
        <Property name="log_dir">logs</Property>
        <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L -%m%n</Property>
        <Property name="displayName">mes</Property>
    </Properties>
    <!-- 输出源,常见的主要有Console、RollingFile、File 三种子节点
      Console:用于定义输出到控制台的Appender
      File:用于定义输出到指定位置的文件的Appender
      RollingFile:定义指定方式触发新的Appender
    -->
    <Appenders>
        <Console name="console" target="SYSTEM_OUT" follow="true">
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
        </Console>
​
        <!-- 文件 每次运行程序会自动清空,由append属性决定 -->
        <!--<File name="error" fileName="${displayName}_error.log" append="false">-->
        <!--&lt;!&ndash; 指定error 级别的日志 &ndash;&gt;-->
        <!--<ThresholdFilter level="ERROR" onMatch="ACCEPT"-->
        <!--onMismatch="DENY" />-->
        <!--<PatternLayout>-->
        <!--<pattern>${pattern}</pattern>-->
        <!--</PatternLayout>-->
        <!--</File>-->
​
        <!-- 滚动文件 达到触发条件,生成新的文件,原来的内容会存档,存档的文件根据filePatternt规则增加年月日 -->
        <RollingFile name="infoFile" fileName="${log_dir}/${displayName}_info.log"
                     filePattern="${log_dir}/${displayName}_%d{yyyy-MM-dd}_info.log">
            <!-- 本例表示只输出info日志
​
            onMatch 表示满足指定级别及以上级别
            onMisMatch 表示不满足指定级别,即指定级别以下的级别
​
            onMatch="ACCEPT" 指定级别及以上级别,接受
            onMatch="DENY" 指定级别及以上级别,拒绝
​
            onMismatch="NEUTRAL" 指定级别以下的放行,进行后面的判断
            onMismatch="deny" 指定级别以下的级别,拒绝
            -->
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="deny"/>
            </Filters>
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <!-- 按大小划分 -->
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </RollingFile>
    </Appenders>
    <!-- 主要配置Root、Logger两种标签 -->
    <Loggers>
        <!-- Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
            Logger标签内还可以配置一个或多个AppenderRef属性,用来指定日志输出到哪个Appender
        -->
        <!--     <Logger name="org.springframework" level="INFO" /> -->
​
        <!-- additivity="false"表示子Logger只会在自己的appender里输出,
        而不会在Root的appender里输出 -->
        <Logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="console"></AppenderRef>
        </Logger>
        <Logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="console"></AppenderRef>
        </Logger>
        <!-- 每个配置都必须有一个根记录器Root,默认所有的Logger都继承此配置 -->
        <Root level="DEBUG">
            <!-- AppenderRef 用来指定该日志输出到哪个Appender -->
            <AppenderRef ref="console"></AppenderRef>
            <AppenderRef ref="infoFile"></AppenderRef>
            <!--
            <AppenderRef ref="rollingFile"></AppenderRef>
            -->
        </Root>
    </Loggers>
</configuration>
​

%d 输出日志时间点的日期(一般是那一天),也可以在其后用大括号自定义格式,比如:%d{yyyy MMM dd HH:mm:ss:SSS},输出类似:2014 11 05 :23:28 :22

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL ;

%r 输出自应用启动到输出该log信息耗费的毫秒数 ;

%c 输出所属的全类名,也可以只输出类名,:%c{1} ;

%t 输出产生该日志的当前线程名字 ;

%m 输出代码中自定义的的信息;

%n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n" ;

3、手动输出日志

在需要输出日志的类中,创建日志对象

方式1:log4j2中的Logger对象

方式2:slf4j中的Logger对象

复制代码
​
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
​
@Service
// 相当于在类中增加了 private static final Logger log = LoggerFactory.getLogger(HelloController.class)
@Slf4j//方式2
public class HelloController {
    // 注意类所在的包 org.apache.logging.log4j.Logger  方式1
    private Logger logger = LogManager.getLogger(HelloServlce.class);
​
    @GetMapping("/hello")
    public String hello() {
        logger.info("info hello");
        // {} 表示占位符,用于格式化参数
        logger.info("info {}", "hello world");
        logger.debug("debug info");
        logger.error("error info");
​
        return "logger";
    }
​
    @GetMapping("/hello2")
    public String hello2() {
        logger.info("info hello");
        // log 通过@Slf4j注解定义
        log.error("slf4j error");
        log.info("slf4j info");
        log.debug("slf4j debug");
​
        return "slf4j log";
    }
}
​
相关推荐
wb043072015 小时前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
nbwenren6 小时前
Springboot中SLF4J详解
java·spring boot·后端
helx827 小时前
SpringBoot中自定义Starter
java·spring boot·后端
rleS IONS8 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
lifewange8 小时前
Go语言-开源编程语言
开发语言·后端·golang
白毛大侠8 小时前
深入理解 Go:用户态和内核态
开发语言·后端·golang
R***z1019 小时前
Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南
spring boot·postgresql·mybatis
王码码20359 小时前
Go语言中的数据库操作:从sqlx到ORM
后端·golang·go·接口
星辰_mya10 小时前
雪花算法和时区的关系
数据库·后端·面试·架构师
赵丙双10 小时前
spring boot AutoConfiguration.replacements 文件的作用
java·spring boot