欢迎来到信息岛!
adminAdmin  2024-11-05 14:44 信息岛 显示边栏 |   抢沙发  7 
文章评分 0 次,平均分 0.0

SpringBoot整合Logback实现日志管理

了解日志

什么是日志

程序运行过程中所产生的信息就是日志

当我们启动SpringBoot时,控制台打印的信息就是日志

image-20230410171853429

日志的作用

1、发现和定位问题

2、记录用户的登录信息,进行大数据分析

3、记录系统的操作信息,方便数据的恢复和定位操作者

4、记录程序的执行时间,方便以后优化程序

日志插件

Grep Console是IntelliJ IDEA的一款好用的日志插件。最有用的作用是可以给不同的日志内容设置颜色,也可以通过过滤条件过滤日志,让你在开发过程中对日志信息更直观。

自定义打印日志

相关设计模板

日志的抽象层: SLF4j

日志的实现

  • log4j
  • log4j2
  • logback
  • jul(java.util.logging)

SpringBoot内置了日志框架slf4j+logback,采用了“门面模式”

1、日志门面:slf4j

2、日志实现:logback

关于常见的日志框架:

1、日志框架包括日志门面、日志实现

2、日志门面就相当于是装修公司,日志实现相当于是工程队(实现具体的操作),日志门面仅能对应一个日志实现

获得日志对象

方式一

private Logger log = LoggerFactory.getLogger(类名.class);

方式二

@SLF4j

日志级别

  1. trace:级别最低
  2. debug:需要调试时候的关键信息
  3. info:普通的打印信息
  4. warn:警告信息
  5. error:错误信息
  6. fatal:灾难级的,因为代码异常导致程序退出执行的事件;系统级别,程序猿无法打印

日志使用

@RestController
public class LoggerController {

    // 得到日志对象
    private Logger logger = LoggerFactory.getLogger(LoggerController.class);

    // 打印日志
    @RequestMapping("/logger")
    public String logger(){
        l
        return "logger";
    }
}

启动SpringBoot,浏览器输入localhost:8080/logger

由于SpringBoot默认日志级别是 info,因此只能打印 info 及更高级别的日志

格式说明

Spring Boot - yaml配置

配置级别

application.yml

logging:
  level:
    root: warn  # 设置所有目录的日志级别
    net:
      wanho:
          controller: trace   # 设置net.wanho.controller目录的日志级别
          service: info      # 设置net.wanho.service的日志级别

配置持久化

application.yml

logging:
  file:
    path: D:         # 设置日志文件的目录,默认名称 spring.log

指定名称

logging:
  file:
     name: D:log_all.log        # 设置日志文件的目录,默认名称 spring.log

Spring Boot - xml配置

配置文件位置在哪里

  • 在文档26.6 Custom Log Configuration描述位置
Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

logback.xml

logback-spring.xml (文档里说此种配置方法更高级,可以设置profile)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder 默认配置为PatternLayoutEncoder -->

        <encoder>
            <springProfile name="dev">
                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </springProfile>

            <springProfile name="prod">
                <pattern>=========%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </springProfile>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!--使用变量-->
    <file>${log.path}/cloud-idp.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

完整版本

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10 seconds">

    <property name="LOG_HOME" value="./logs" />

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志输出格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 DEBUG -->
    <appender name="DEBUG"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/debug/manage-remote-debug.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>16</MaxHistory>
            <!--日志文件切割大小-->
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <OnMatch>ACCEPT</OnMatch>
            <OnMismatch>DENY</OnMismatch>
        </filter>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="INFO"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/info/manage-remote-info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>16</MaxHistory>
            <!--日志文件切割大小-->
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <OnMatch>ACCEPT</OnMatch>
            <OnMismatch>DENY</OnMismatch>
        </filter>
    </appender>
    <appender name="WARN"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/warn/manage-remote-warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>24</MaxHistory>
            <!--日志文件切割大小-->
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <OnMatch>ACCEPT</OnMatch>
            <OnMismatch>DENY</OnMismatch>
        </filter>
    </appender>

    <appender name="ERROR"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/error/manage-remote-error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>32</MaxHistory>
            <!--日志文件切割大小-->
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <OnMatch>ACCEPT</OnMatch>
            <OnMismatch>DENY</OnMismatch>
        </filter>
    </appender>

    <logger name="net.wanho.controller" level="DEBUG"/>

    <!-- 设置root -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="DEBUG" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="ERROR" />
    </root>

</configuration>
「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

admin给Admin打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

admin
Admin 关注:0    粉丝:0
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享