《springboot实战》第三章 springboot 统一日志

简介: 《springboot实战》第三章 springboot 统一日志

1、日志配置

Spring Boot 默认使用 SLF4J+Logback 记录日志

1.1、日志级别

trace<debug<info<warn<error<fatal

序号 日志级别 说明
1 trace 追踪,指明程序运行轨迹
2 debug 调试,实际应用中一般将其作为最低级别,而 trace 则很少使用
3 info 输出重要的信息,使用较多
4 warn 警告,使用较多
5 error 错误信息,使用较多

1.2、日志格式化

序号 输出格式 说明
1 %d{yyyy-MM-dd HH:mm:ss, SSS} 日志生产时间,输出到毫秒的时间
2 %-5level 输出日志级别,-5 表示左对齐并且固定输出 5 个字符,如果不足在右边补 0
3 %logger 或 %c logger 的名称
4 %thread 或 %t 输出当前线程名称
5 %p 日志输出格式(日志等级)
6 %message 或 %msg 或 %m 日志内容,即 logger.info(“message”)
7 %n 换行符
8 %class 或 %C 输出 Java 类名
9 %file 或 %F 输出文件名
10 %L 输出错误行号
11 %method 或 %M
12 %l 输出语句所在的行数, 包括类名、方法名、文件名、行数
13 hostName 本地机器名
14 hostAddress 本地 ip 地址

1.3、Spring Boot 日志默认级别

Spring Boot启动时随机抓取一条日志:

2023-04-04 14:16:39.094  INFO 14464 --- [  restartedMain] c.hqyj.mqreceiver.MqReceiverApplication  : No active profile set, falling back to 1 default profile: "default"

通过控制台输出结果可知,Spring Boot 日志默认级别为 info,日志输出内容默认包含以下元素:

  • 时间日期
  • 日志级别
  • 进程 ID
  • 分隔符:—
  • 线程名:方括号括起来(可能会截断控制台输出)
  • Logger 名称
  • 日志内容

1.4、application.properties配置

#日志级别
logging.level.com.hqyj.springboot=trace
#使用相对路径的方式设置日志输出的位置(项目根目录目录\my-log\mylog\spring.log)
logging.file.name=F:/springboot/logging/springboot.log
#绝对路径方式将日志文件输出到
logging.file.path=F:/springboot/logging
#控制台日志输出格式
logging.pattern.console=%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} [%L] ${hostName}  - %msg%n
#日志文件输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n
  • logging.level.root=info指定整个系统的默认日志级别是info,日志级别统一化
  • logging.level.com.zimug.boot.launch.controller=debug,指定某个特定的package的日志级别是debug,日志级别个性化。优先级角度,个性配置大于统一配置。
  • logging.file.path将日志输出到指定目录,如果不指定logging.file.name,日志文件的默认名称是spring.log。配置了logging.file.name之后,logging.file.path配置失效。
  • 无论何种设置,Spring Boot都会自动按天分割日志文件,也就是说每天都会自动生成一个新的log文件,而之前的会自动打成GZ压缩包。

1.5、日志文件大小

  • 可以设置
    logging.file.max-size=10MB分割的每个日志的文件最大容量,超过这个size之后日志继续分隔。
  • 可以设置保留的日志时间
    logging.file.max-history=10,以天为单位
  • logging.pattern.file输出到文件中的日志的格式
  • logging.pattern.console控制台输出日志的格式,为了在控制台调试时候显示效果更清晰,为日志增加了颜色。red、green等等
    yml与xml的结合
########## 日志 配置 - START ##########
spring:
  profiles:
    active: dev
my:
  info:
    appName: springboot
logging:
  config: classpath:logback-spring.xml # logback日志配置
  yh:
    logFileHome: # 各个环境的配置文件目录
      dev: F:/springboot/logging
      test: /www/wwwroot/yhApps/logs/
      pro: /www/wwwroot/yhApps/logs/
    pattern: "%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n"
    maxHistory: 10 # 最大保存10个(天)的历史文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>springboot</contextName>
    <!-- 文件输出格式 -->
    <!--<property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />-->
    <springProperty scope="context" name="pattern" source="logging.yh.pattern"/>
    <!--最大历史日志文件数量-->
    <springProperty scope="context" name="maxHistory" source="logging.yh.maxHistory"/>
    <!--应用名称-->
    <springProperty scope="context" name="appName" source="my.info.appName"/>
    <!-- dev文件路径 -->
    <springProperty scope="context" name="devLogHome" source="logging.yh.logFileHome.dev"/>
    <!-- test文件路径 -->
    <springProperty scope="context" name="testLogHome" source="logging.yh.logFileHome.test"/>
    <!-- pro文件路径 -->
    <springProperty scope="context" name="proLogHome" source="logging.yh.logFileHome.pro"/>
    <!-- 开发环境 -->
    <springProfile name="dev">
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${pattern}</pattern>
            </encoder>
        </appender>
        <!-- 每天产生一个文件 -->
        <appender name="CONSOLE-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 文件路径 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 文件名称 -->
                <fileNamePattern>${devLogHome}/${appName}_log/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 文件最大保存历史数量 -->
                <MaxHistory>${maxHistory}</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${pattern}</pattern>
            </layout>
        </appender>
        <logger name="com.hqyj" level="info"/>
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="CONSOLE-FILE"/>
        </root>
    </springProfile>
    <!-- 测试环境 -->
    <springProfile name="test">
        <!-- 每天产生一个文件 -->
        <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 文件路径 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 文件名称 -->
                <fileNamePattern>${testLogHome}/${appName}_log/info.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 文件最大保存历史数量 -->
                <MaxHistory>100</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${pattern}</pattern>
            </layout>
        </appender>
        <root level="info">
            <appender-ref ref="TEST-FILE"/>
        </root>
    </springProfile>
    <!-- 生产环境 -->
    <springProfile name="pro">
        <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${proLogHome}/${appName}_log/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
                <MaxHistory>100</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${pattern}</pattern>
            </layout>
        </appender>
        <root level="warn">
            <appender-ref ref="PROD_FILE"/>
        </root>
    </springProfile>
</configuration>

1.6、在日志中添加IP

1.6.1、增加java文件,获取IP

/**
 * 日志中获取IP
 */
public class LogIpConfig extends ClassicConverter {
    private static String hostAddress;
    static{
        try {
            hostAddress = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
    @Override
    public String convert(ILoggingEvent iLoggingEvent) {
        return hostAddress;
    }
}

xml添加以下的代码:

<conversionRule conversionWord="hostAddress" 
  converterClass="com.hqyj.springboot.common.LogIpConfig"> 
</conversionRule>

将日志格式修改成以下的格式

pattern: "%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] [%hostAddress] -| %msg%n"

2、Java代码中打印日志

使用@Slf4j注解引入日志

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@Slf4j
@SpringBootTest
class MqReceiverApplicationTests {
    @Test
    void contextLoads() {
        String user = "zhangsan";
        log.info("Hello {}" , user);
    }
}

效果:

2023-04-04 14:29:33.891 INFO 8224 — [ main] c.h.m.MqReceiverApplicationTests : Hello zhangsan

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
605 5
|
9月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2174 1
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1045 0
|
9月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
847 0
|
9月前
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
660 0
|
5月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
904 5
|
5月前
|
运维 安全 数据可视化
日志审查安排工具实战攻略:中小团队如何通过日志审查安排工具建立可控、安全的审查机制?
在审计敏感时代,日志审查安排工具成为安全运维与合规管理的关键利器。它实现审查任务的流程化、周期化与可视化,支持多系统协作、责任到人,确保“可控、可查、可追”的日志治理。工具如板栗看板、Asana、Monday 等提供任务调度、问题闭环与合规对接能力,助力企业构建高效、透明的日志审查体系,提升安全与合规水平。
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
407 5
|
6月前
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
11月前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
435 5

热门文章

最新文章