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文件

   

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

     

<?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 @ 2022-11-27 06:21  Yuan_x  阅读(169)  评论(0编辑  收藏  举报