为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 spring boot 使用 logback 配置日志

spring boot 使用 logback 配置日志

2017.06.26 14:55 10155浏览

spring boot 默认是 使用 logback 的。。 听说 log4j 性能 不行了,,, spring boot 推荐 使用 logback 或者 log4j2 来使用了。。。 废话不多少,,,我觉得还是 使用 默认的 logback 把 省得麻烦的事 。。

其实 logback 已经 默认 有了 配置了的,我们自己 在 application 配置文件里面 配置即可、 比如:

##########################################################
###################  开发环境的profile  ###################
##########################################################
spring:
  profiles: dev
  datasource:
      url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
      username: root
      password: root
      filters: log4j,wall,mergeStat

logging:
  level: debug
  file: logs/guns.log

---

##########################################################
###################  正式环境的profile  ###################
##########################################################
spring:
  profiles: produce
  datasource:
      url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
      username: root
      password: root
      filters: log4j,wall,mergeStat

logging:
  level: warn
  file: logs/guns.log

这样就可以了。。。 是不是很简单 ?

可是 问题来了,,对应 大型一点的 系统来说,,,这样的日志配置过于简单了。。。 因此我们需要 配置 自己的 配置文件。。。 如果对logback 不熟悉配置的可以

其实 和 之前的 log4j 的配置差不多,,, 看了一下,,确实 logback 的 功能 是比 log4j 强多了。。。 个人喜好配置 logback.xml 因为 properties 文件 容易中文乱码,,,不喜好 如果我们使用 logback.xml 配置呢,,,也是可以的 可是 对应 如果我们使用 spring boot 来说,希望 生产环境的 和 测试环境的 日志配置不一样的。。这样 logback.xml 就不可以了 我们 需要改为 logback-spring.xml 这样我们就可以 引用 appcation.yml 里面的配置 属性了。。 官方文档指明,需要使用<springProperty>,才可使用application.properties(或application.yml)中的值

这里给出我的 配置 文件的,,参考就好了了。。。

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

   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
    <!-- encoder 默认配置为PatternLayoutEncoder -->   
    <encoder>   
      <pattern>[guns]  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>  
      <charset>utf-8</charset> 
    </encoder>   
  </appender>   

    <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILEERROR"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>/web/log/guns/error.log</file>

        <!-- 日志记录器的滚动策略,按日期,按大小记录:这里是每天产生一个文件   -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 
                而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
                <!--设置日志命名模式-->
            <fileNamePattern>/web/log/guns/log-error-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>

            <!-- 除按日志记录之外,还配置了日志文件不能超过3M,若超过3M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>3MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

             <!--最多保留30天log-->
              <maxHistory>30</maxHistory>

        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[guns]  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录error级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

       <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILWARN"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>/web/log/guns/warn.log</file>

        <!-- 日志记录器的滚动策略,按日期,按大小记录:这里是每天产生一个文件   -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 
                而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
                <!--设置日志命名模式-->
            <fileNamePattern>/web/log/guns/log-warn-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>

            <!-- 除按日志记录之外,还配置了日志文件不能超过3M,若超过3M,日志文件会以索引0开始, 命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>3MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

             <!--最多保留30天log-->
              <maxHistory>30</maxHistory>

        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[guns]  %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录error级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

  <!-- logger 的 level 代表 记录 大于或者等于当前级别的信息  -->
  <!-- additivity属性为false,表示此loger的打印信息不再向上级传递,即比如 root ,就不会记录该级别的信息了
       默认是true 将信息给上级比如 root  -->

  <!-- 这里将请求的地址等信息打印到控制台 -->
  <logger name="org.springframework.web.servlet.DispatcherServlet"
     level="DEBUG" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger> 

   <!--将项目开发的中的日志记录警告以上的也显示在控制台上,
       可是不能改为debug,info 因为改了之后会把 简单的 sql语句也一起打印了出来了.
       这种方式没有 mybatis-plus 配置文件的log-impl那种好  -->
  <logger name="com.stylefeng.guns"
     level="WARN" additivity="true">
    <appender-ref ref="STDOUT"/>   
  </logger> 

  <!-- 
      这个并不能把 执行  sql也打印出来的
  <logger name="com.alibaba.druid"
     level="WARN" additivity="true">
    <appender-ref ref="STDOUT"/>   
  </logger>  -->

  <!--下面是为了控制将异常也给打印到控制台  -->
  <logger name="org.mybatis"
     level="WARN" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger>

  <logger name="java.sql"
     level="WARN" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger>

  <logger name="org.apache"
     level="WARN" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger>

   <logger name="org.springframework"
     level="WARN" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger>

   <logger name="org.apache"
     level="WARN" additivity="true">  
    <appender-ref ref="STDOUT"/>  

  </logger>

  <root level="WARN">  

    <!-- 
        为了不让控制台显示那么多 无用的 debug 代码所以 注释掉
     <appender-ref ref="STDOUT" />    -->

     <appender-ref ref="FILEERROR" />   
     <appender-ref ref="FILWARN" />

  </root>  

</configuration>
点击查看更多内容
4人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
6
获赞与收藏
82

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

142篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消