三、Spring Boot与日志

一、日志框架分类和选择

   1、市场上存在非常多的日志框架。JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback、SLF4j、
      jboss-logging等。

   2、SpringBoot:底层是Spring框架,Spring框架默认是用JCL(Apache Commons Logging);

★  3、spring-boot-starter-logging 采用了slf4j+logback的形式,Spring Boot也能自动适配(jul、log4j2、logback) 并简化配置;

二、SLF4j的使用

 1、如何在系统中使用SLF4j (官方地址:https://www.slf4j.org)

    ● 开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

    ● 给系统里面导入slf4j的jar和 logback的实现jar

    ● 使用如下方式

               import org.slf4j.Logger;
               import org.slf4j.LoggerFactory;

               public class HelloWorld {
                 public static void main(String[] args) {
                   Logger logger = LoggerFactory.getLogger(HelloWorld.class);
                   logger.info("Hello World");
                 }
               }

    ● 每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件;

如图所示:
如何使用SLF4j.png
2、遗留的问题

     ● 比如一个系统用的日志框架是slf4j+logback,然后这个系统有依赖于其它框架,比如Spring,Hebernate,Mybatis等,
       而Spring的底层使用的是Apache Commons Logging日志框架,Hebernate的底层使用的是 jboss-logging日志框架,
       怎样统一日志记录,即使是依赖别的框架,也能和该系统一样统一使用slf4j进行输出?

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

    1)、将系统中其它日志框架先排除出去;
    2)、用中间包来替换原有的日志框架;
    3)、然后导入slf4j其它的实现

如图所示:
legacy.png

三、SpringBoot日志关系

1、spring-boot-starter-web 依赖 spring‐boot‐starter,而 spring‐boot‐starter 中包含 spring‐boot‐starter‐logging,
   SpringBoot使用它来做日志功能;

2、总结:
    1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
    2)、SpringBoot使用中间替换包把其它的日志都替换成了slf4j;
    3)、如果要引入其它框架,一定要把这个框架的默认日志依赖移除掉

★ SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,
   只需要把这个框架依赖的日志框架排除掉即可;

四、SpringBoot日志使用

  ★ 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台,不会写到日志文件。

 1、日志级别由高到低:OFFF,  ATAL,  ERROR,  WARN,  INFO,  DEBUG ,  TRACE

 2、日志输出格式:

          %d表示日期时间,
          %thread表示线程名,
          %‐5level:级别从左显示5个字符宽度
          %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
          %msg:日志消息,
          %n是换行符

     例如:
          %d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n

 3、SpringBoot修改日志的默认配置

      ● 如果需要将日志输出到日志文件中,可以在application.properties中设置logging.file或logging.path属性。

      1)、可以指定完整的路径,则在该路径下生成日志文件
              logging.file=G:/springboot.log

      2)、不指定路径,则在当前项目下生成springboot.log日志
              logging.file=springboot.log

      3)、在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件名
              logging.path=/spring/log

  【注意】:
         logging.file 与  logging.path 二者不能同时使用,如若同时使用,则只有logging.file生效



  ★ 指定日志文件与日志的profile功能

     1、给类路径下放上指定日志框架自己的配置文件即可,SpringBoot就不使用它默认配置的了;

                    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

     2、举例说明:

            ● logback.xml:如果在类路径下直接放的日志文件名为logback.xml,则直接就被日志框架识别了;

            ● logback-spring.xml:如果在类路径下直接放的日志文件名为logback-spring.xml,日志框架就不直接加载日志的配置项,
              由SpringBoot解析日志配置,可以使用SpringBoot 的 Profile功能,可以指定某段配置只在某个环境下生效

            ● 如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

                  Caused by: java.lang.IllegalStateException: Logback configuration error detected: 
                  ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:39 - no applicable action for [springProfile]


    例如:
          <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
               <!‐‐
                   日志输出格式:
                        %d表示日期时间,
                        %thread表示线程名,
                        %‐5level:级别从左显示5个字符宽度
                        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
                        %msg:日志消息,
                        %n是换行符
               ‐‐>
               <layout class="ch.qos.logback.classic.PatternLayout">

                   <!‐‐ 指定在开发环境下生效 ‐‐>
                   <springProfile name="dev">
                        <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐> [%thread] ‐‐> %‐5level %logger{50} ‐ %msg%n</pattern>
                   </springProfile>

                   <!‐‐ 指定在非开发环境下生效  ‐‐>
                   <springProfile name="!dev">
                        <pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} === [%thread] === %‐5level %logger{50} ‐ %msg%n</pattern>
                   </springProfile>
               </layout>
          </appender>

五、切换日志框架

1、可以按照slf4j的日志适配图,进行相关的切换;

2、使用Logback进行日志记录的启动器是SpringBoot默认的日志起动器,SpringBoot也支持使用log4j2

    ● 排除 spring-boot-starter-logging
    ● 导入 spring-boot-starter-log4j2
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容