当前位置: 首页 > article >正文

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";
    }
}
​

http://www.kler.cn/news/327684.html

相关文章:

  • Hadoop集群的高可用(HA):NameNode和resourcemanager高可用的搭建
  • tauri中加载本地文件图片或者下载网络文件图片后存储到本地,然后通过前端页面展示
  • Trilium Notes笔记本地化部署与简单使用指南打造个人知识库
  • 数据结构和算法基础(一)
  • 探索Cherry键盘的FN+F9游戏模式与Ctrl+Fn功能
  • ffmpeg 结合 opencv 显示ps流文件
  • 深入计算机语言之C++:C到C++的过度
  • set和map结构的使用
  • Spring Boot技术在足球青训管理中的实践与挑战
  • STM32的DMA技术介绍
  • failed to load steamui.dll的多种处理方法,steamui.dll的作用
  • 论文阅读 | HiDDeN网络架构
  • 【规控+slam】探索建图方案及代码分享
  • 基于Springboot+Vue的农场投入品运营线上管理系统 (含源码数据库)
  • Python学习(3):画散点图和箱线图
  • 助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)
  • 大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
  • 2024年7月大众点评宁波美食店铺基础信息
  • Oracle控制文件全部丢失如何使用RMAN智能恢复?
  • uniapp 通过标签生成海报
  • 在MacOS上安装MongoDB数据库
  • 随记——机器学习
  • Google常用插件-Vimium 键盘打通关
  • MMD模型及动作一键完美导入UE5-衣服布料模拟(四)
  • Springboot 练习
  • 第七届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)
  • ubuntu 24.04如何分配内存
  • 前端知识汇总(持续更新)
  • Flask-SQLAlchemy:在Flask应用中优雅地操作数据库
  • 如何利用多线程提高计算密集型任务的性能