小飞知识库 | YeLu🤠MiLu🤪 小飞知识库 | YeLu🤠MiLu🤪
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YeLu

爱技术的YeLu🤠
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 函数式编程

  • spring

  • springMVC

    • 介绍

    • 基础

    • 高级

      • 全局异常捕获以及邮件发送
      • 日志框架的使用
        • 市场上的日志框架
        • 市场上日志框架的关系
          • slf4j整合第三方日志框架
          • 将其他的框架整合成符合slf4j规范的日志框架
          • 将其他日志框架转换成logback实现的日志框架
          • 将其他日志框架转换成log4j实现的日志框架
          • 参考图
        • Logback的使用
          • 导包
          • 编写配置文件
          • 使用日志框架
  • springCloud

  • jvm

  • JUC并发编程

  • mybatis

  • 设计模式

  • 📒springBoot

  • 单元测试

  • java
  • springMVC
  • 高级
YeLu🤠
2025-01-21
目录

日志框架的使用

参考demo:G:\学习资料\java\java学习文档\java技术文档\Spring文档\xufei-spring-word\xf-projo-logging 参考demo:G:\学习资料\java\java学习文档\java技术文档\Spring文档\xufei-spring-word\xufei-projo-spring-springMVC-mybatis

# 市场上的日志框架

log4j log4j2 logback JCL JUL JBoos-Logging slf4j

log4j logback slf4j 一个人开发的

slf4j :simple logging facade for java

JBoss-Logging 这个是定制开发的

JCL :Jakatra commons logging 这个应该是 Spring框架内部使用的日志框架

JUL :java util logging

上面这些框架中 有些 是接口(规范) 有些是实现

# 市场上日志框架的关系

日志规范

JCL JBoss-Logging slf4j

日志实现

log4j log4j2 logback JUL

我们在做开发的时候 一般情况下 都是选择一个规范 一个实现

slf4j -------------------- logback

# slf4j整合第三方日志框架

理解图

# 将其他的框架整合成符合slf4j规范的日志框架

# 将其他日志框架转换成logback实现的日志框架

# 将其他日志框架转换成log4j实现的日志框架

# 参考图

# Logback的使用

# 导包

       <!-- SSM 框架整合 logback start-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>

        <!--这个包是为了 把JCL的日志转换成复合SLF4j标准的日志进行输出
           SLF4j的实现    logback
       -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.7</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback.version}</version>
        </dependency>

        <!--这个是SLF4j的这个接口的规范-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!--Spring对logback的支持包-->
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.4</version>
        </dependency>
        <!-- logback end -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 编写配置文件

查看配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true"><!-- debug="true"设置调试模式 -->
    <!--
        <configuration scan="true" scanPeriod="60 seconds" dubug="false">
        scan这个属性如果设置为true的话  配置文件如果是发生改变那么就会自动进行 重新加载
        scanPeriod这个属性检测当前的这个文件修改的时间间隔 如果你没有给定时间单位的话那么默认单位是毫秒。只有scan设置为true的时候这个才生效
        debug这个属性设置为true的时候 就要日志自己的内部信息、可以时时查看logback的运行状态
    -->
    <!--
       appender:表示的是定义了一种日志的输出
       这里就类似于  变量
       变量要先定义  后使用
       这里 就相当于定义了日志的输出   这个日志到底输出在哪里  由这个class类类决定
       ConsoleAppender:的意思就是日志要输出到控制台
       name:这个名字是可以随便定义的  你高兴就好 但是一般情况下  见名之意
    -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--表示的是输出日志的格式
                 %d{yyyy-MM-dd-HH:mm:ss.SSS}:时间引用
                 %level:日志的级别    trace  <  debug < info < warn < error
                 [%thread]:线程名字
                 %class:当前打印日志的类名
                 %line:打印日志的代码的行号(一般不要)
                 %msg:日志本身的信息
                 %n:换行
            -->
            <!--
                pattern:这个表示的是定义的是日志的输出格式
            -->
            <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS}======>%level======>[%thread]-%class:%line-------->>%msg%n</pattern>
        </encoder>
    </appender>

    <!--
        这个就表示的是要把 日志输出到文件(FileAppender)
        FileAppender:这个表示的是将日志输出到文件
        name:可以随便写
    -->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--
            catalina.home:这个实际上是引用  这个地址实际上是引用的是 Tomcat的环境变量
            ${catalina.home} :实际上定位的是 Tomcat的根目录
            ${catalina.home}/logs/file.log:下面这段地址的意思是:日志打印到了Tomcat根目录下的 logs目录下
            名字 叫做 file.log
        -->
        <file>${catalina.home}/logs/file.log</file>
        <!--这个表示的是 下一次的日志是在上一次的基础上 进行追加  不是覆盖-->
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line>>%msg%n</pattern>
            <!--这个意思是:设置编码-->
            <charset>UTF-8</charset>
        </encoder>
        <!--
            prudent=true:表示的是日志的写入是线程安全的、但是线程安全会降低效率  一般默认设置为false
        -->
        <prudent>false</prudent>
    </appender>
    <!--
       RollingFileAppender:表示的是 日志文件滚动输出 并且最大保留30天
       滚动输出到日志  当达到一定条件的时候 就将日志记录到其他文件中去
    -->
    <appender name="timeFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--
            rollingPolicy滚动的策略
            TimeBasedRollingPolicy:最常用的一个、根据时间进行滚动 当达到一定的时间的时候、就会自动开辟一个新的日志文件
            FixedWindowRollingPolicy:根据固定窗口的算法重命名文件的滚动策略
            TriggeringPolicy:根据当前活动文件的大小来来确定是否滚动
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--表达式中最小的滚动单位是天、所以每天生成一个日志、日志的名字就是下面这个名字-->
            <!--
                  log/xxxx/xxxx.log
                  如果直接写的文件的名字 这个路径默认是定位到  tomcat/bin/
                  Tomcat/bin/logfile2020-7-8.log
            -->
            <fileNamePattern>log/logFile%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--表示的是生成的日志 保留30天 30天以后自动销毁-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line>>%msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--
        日志的滚动的输出
        这个Appender的主要作用就是在生成日志的时候 如果单个的日志文件 达到了5M 那么这个时候就会创建新的日志进行继续生成
    -->
    <appender name="fixedFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--
             Tomcat/bin/log/fixedFile.log  :文件是放到这个路径下的
        -->
        <file>log/fixedFile.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <!--生成日志文件的文件名的格式-->
            <fileNamePattern>log/fixedFile%i.log.zip</fileNamePattern>
            <!--至少生成一个日志文件-->
            <minIndex>1</minIndex>
            <!--最大只是生成三个日志文件  如果我们的内容超过了15M  那么就会实现覆盖前面的这个日志文件-->
            <maxIndex>3</maxIndex>
        </rollingPolicy>

        <!--表示的是添加了触发策略-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--单个文件的最大的值  是5M-->
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>
        <!--生成日志的格式和编码-->
        <encoder>
            <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line>>%msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--
        这个表示的是定义了一种日志输出格式  并和过滤器进行整合
    -->
    <appender name="filter" class="ch.qos.logback.core.FileAppender">
        <file>log/filter.log</file>
        <append>true</append>
        <!--
            LevelFilter:的意思是添加了一个日志级别的过滤器
            如果日志的级别等于配置的级别。那么则执行onMatch里面的配置
            否则执行 onMismatch中的内容
        -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <!--
                 ACCEPT:当前的日志会立即被执行不经过其他的过滤器了
                 DENY:日志立即被抛弃、也不再经过其他的过滤器了
                 NEUTRAL:下一个过滤器将继续执行、如果是最后一个过滤器的话那么就会被执行
            -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--临界值过滤器:如果你输出的日志级别 是低于下面定义的这个级别的话那么 降火被过滤掉-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <encoder>

            <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line>>%msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <prudent>false</prudent>
    </appender>

    <!--
        logger:定义的是输出的对象
        name:一般写 包名  level:就是咋们的日志的级别
        addtivity:true、日志将会继续的向他爹进行传递

        表示的是给整个项目的某一个包 单独定义日志的输出
        比如:
            我要给 com.xufei.meeting.controller.UserController 这个包 定义输出级别是 info  低于info的都不输出
            并且我还要定义这些日志输出到哪些地方
            file :就表示的是输出到文件
            stdout:这个就表示的是还要输出到控制台
         局部的
    -->
    <!--   <logger name="com.xufei.meeting.controller.UserController" level="error" addtivity="false">
           <appender-ref ref="file" />
       </logger>-->


    <!--全局设置了一个日志级别  如果只是在这里引用的话 其余的是不生效的 -->
    <!--简单的说  就是全局所有的日志都要打印到控制台-->
    <!--
        给整个项目设置一个全局的日志的打印
        在整个项目中  日志级别都是 info 意思是如果低于这个级别那么这个日志就将不打印
        全局的

        trace  <   debug   <  info   <  warn  <   error
    -->
    <root level="debug">
        <appender-ref ref="file"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="timeFile"/>
        <appender-ref ref="fixedFile"/>
        <appender-ref ref="filter"/>
    </root>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188

# 使用日志框架

private Logger logger= LoggerFactory.getLogger(TestLogger.class);
logger.trace("我好的");
logger.debug("我好的");
logger.info("我好的");
logger.warn("我好的");
logger.error("我好的");
1
2
3
4
5
6
#springMVC
最近更新: 2025/07/30, 15:37:56
全局异常捕获以及邮件发送
项目的演变

← 全局异常捕获以及邮件发送 项目的演变→

最近更新
01
服务端配置
07-30
02
frp 安装
07-30
03
Prometheus采集Springboot应用
02-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | YeLu🤠MiLu🤪 | MIT License 蜀ICP备2024116879号 | 川公网安备51012202001998号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
欢迎你,我的朋友
看板娘