Spring与日志

一、日志框架:

           JUL、JCL、Jboss-logging、logback、log4j、log4j、log4j2、slf4j

日志抽象层 日志实现
JCL、SLF4J、jboos-logging Log4J、JUL、Log4j2、Logback

          springBoot 底层是spring框架 spring框架默认是用jcl,springBoot选用 SLF4j和logback

 

二、SLF4J使用

         在开发的时候,日志记录方法调用的应该是抽象层而不是具体实现层 ,在实际观察到代码实现中开发也是这么做的

         每个日志的实现框架 都有自己的配置文件 使用slf4j以后 配置文件还是做成日志实现框架的配置文件

三、遗留问题

       例如a系统使用 slf4j+logback,spring(commons-logging)、Hibernate(jboss-logging) 、MyBatis、xxx

       统一日志记录,即使是别的框架统一使用 slf4j 进行输出

       jcl-over-slf4j 又做了一层适配

       

 

 

 

     

      如何让系统中所有的日志 都统一到slf4j

        1、将系统中其他日志框架先排除出去

        2、用中间包来替换原有的日志框架

        3、我们导入slf4j其他的实现

        创建springboot项目 根据maven的依赖关系,springboot已经自动引入了中间的适配层

 

 

 

   四、如果我们要引入其他框架

          一定要把这个框架的默认日志依赖移除掉

 

 

  五、配置

           1、properties文件

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server.port=17777
logging.level.com.example = trace
 
# 指定日志文件输入 路径 如果不指定路径则在当前项目下生成 springboot.log日志
 
#logging.file.path=/logs
 
#logging.file.name=springBootLog
 
## 在控制台输出的日志格式
#logging.pattern.console=%d{yyyy-MM-dd}  [%thread%]  %-5level  %logger{50} - %msg%m
#
## 指定文件汇总日志输入的格式
#logging.pattern.file=%d{yyyy-MM-dd} === [%thread%] === %-5level === %logger{50} === %msg%m

    

 

        2、使用 logback.xml

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

<contextName>logback</contextName>

<property name="log.path" value="/Users/yuanxu/IdeaProjects/slf4j-demo/logs/sit.log" />



<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- <level>ERROR</level> 可以省略不写 -->
<!-- <level>ERROR</level>-->
</filter>
<encoder>
<!--          
日志输出格式
%d 表示日期时间
%thread 表示线程名
%-5level 级别从左显示5个字符宽度
%logger{50} 标识logger名字最长50个长度 否则按照句点分割
%msg 日志消息
%n 换行符

-->

<pattern>%d{yyyy-MM-dd} %contextName [%thread] %-5level %logger{36} ---> [%file : %line]- %msg%n
</pattern>
</encoder>
</appender>

<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>

<!-- rollingPolicy 指定文件是滚动的-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>
%date %level [%thread] %logger{36} [%file : %line]- %msg%n
</pattern>
<!-- <pattern>-->
<!-- ${log.path}.[%file : %line]-->
<!-- </pattern>-->
</encoder>
</appender>

<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

<logger name="com.example.slf4j-demo" level="warn" />

</configuration>

   logback-spring.xml  则变成由spring识别 可以使用spring配置文件(yml)中的profiles

     

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
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
 
    <contextName>logback</contextName>
 
    <property name="log.path" value="/Users/yuanxu/IdeaProjects/slf4j-demo/logs/sit.log" />
 
 
 
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- <filter class="com.example.logback.filter.MyFilter" /> -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--     <level>ERROR</level>  可以省略不写       -->
<!--            <level>ERROR</level>-->
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd} %contextName [%thread] %-5level %logger{36} ---> [%file : %line]- %msg%n
            </pattern>
        </encoder>
    </appender>
 
    <appender name="file"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
 
<!--        rollingPolicy 指定文件是滚动的-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <springProfile name="dev">
                 
            <pattern>
                %date %level [%thread] %logger{36} [%file : %line]- %msg%n
            </pattern>
<!--            <pattern>-->
<!--               ${log.path}.[%file : %line]-->
<!--            </pattern>-->
        </springProfile>>
 
            <springProfile name="!dev">
 
                <pattern>
                    %date *** %level *** [%thread] %logger{36} [%file : %line]- %msg%n
                </pattern>
            </springProfile>>
        </encoder>
    </appender>
 
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>
 
    <logger name="com.example.slf4j-demo" level="warn" />
 
</configuration>

  

 

posted @   Yuan_x  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示