1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        求求你別再用System.out.println 了??!

        共 3411字,需瀏覽 7分鐘

         ·

        2020-10-14 04:10

        來源:my.oschina.net/yuchener/blog/4658516

        1、日志框架

        小張;開發(fā)一個大型系統(tǒng):?
        1、System.out.println("");將關(guān)鍵數(shù)據(jù)打印在控制臺;去掉?寫在一個文件?
        2、框架來記錄系統(tǒng)的一些運行時信息;日志框架 ;zhanglogging.jar;
        3、高大上的幾個功能?異步模式?自動歸檔?xxxx?zhanglogging-good.jar?
        4、將以前框架卸下來?換上新的框架,重新修改之前相關(guān)的API;zhanglogging-prefect.jar;
        5、JDBC---數(shù)據(jù)庫驅(qū)動;寫了一個統(tǒng)一的接口層;日志門面(日志的一個抽象層);logging-abstract.jar;給項目中導入具體的日志實現(xiàn)就行了;我們之前的日志框架都是實現(xiàn)的抽象層;
        「市面上的日志框架:」
        JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....
        日志門面 (日志的抽象層)
        日志實現(xiàn)


        JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) 「jboss-logging」
        Log4j JUL(java.util.logging) Log4j2 「Logback」
        左邊選一個門面(抽象層)、右邊來選一個實現(xiàn);
        日志門面:SLF4J;
        日子實現(xiàn):Logback;
        Spring boot:底層是Spring框架,Spring框架默認是用JCL;
        「Spring boot選用SLF4J和logback;」

        2. SLF4J 使用

        「1、如何在系統(tǒng)中使用SLF4j ?https://www.slf4j.org」
        以后開發(fā)的時候,日志記錄方法的調(diào)用,不應該來直接調(diào)用日志的實現(xiàn)類,而是調(diào)用日志抽象層里面的方法;給系統(tǒng)里面導入slf4j的jar和logback的實現(xiàn)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");
        ??}
        }
        「圖示:」
        每一個日志的實現(xiàn)框架都有自己的配置文件,使用slf4j以后,「配置文件還是做成日志實現(xiàn)框架自己本身的配置文件;」
        「2. 遺留問題」
        a(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx
        統(tǒng)一日志記錄,即使是別的框架和我一起統(tǒng)一使用slf4j進行輸出?
        「如何讓系統(tǒng)中所有的日志都統(tǒng)一到slf4j:」
        「1.將系統(tǒng)中其他日志框架先排除出去;」
        「2.用中間包來替換原有的日志框架;」
        「3.我們導入slf4j其他的實現(xiàn);」

        3. SpringBoot 日志關(guān)系

        <dependency>????????
        ??<groupId>org.springframework.bootgroupId>????????????
        ??<artifactId>spring‐boot‐starterartifactId>????????????
        dependency>?
        SpringBoot使用它來做日志功能:
        <dependency>????
        ??<groupId>org.springframework.bootgroupId>????????????
        ??<artifactId>spring‐boot‐starter‐loggingartifactId>????????????
        dependency>?
        「底層依賴關(guān)系:」
        「總結(jié):」
        1)、SpringBoot底層也是使用slf4j+logback的方式進行日志記錄。
        2)、SpringBoot也把其他的日志都替換成了slf4j;
        3)、中間替換包?
        @SuppressWarnings("rawtypes")
        public?abstract?class?LogFactory?{
        ????static?String?UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J?=
        "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
        ????static?LogFactory?logFactory?=?new?SLF4JLogFactory();
        1. 、 如果我們要引用其他框架?一定要把這個框架的默認日志依賴移除掉?
        Spring框架用的是commons-logging;
        <dependency>????????
        <groupId>org.springframeworkgroupId>????????????
        <artifactId>spring‐coreartifactId>????????????
        <exclusions>????????????
        <exclusion>????????????????
        <groupId>commons‐logginggroupId>????????????????????
        <artifactId>commons‐loggingartifactId>????????????????????
        exclusion>????????????????
        exclusions>????????????
        dependency>?
        「SpringBoot能自動適配所有的日志,而且底層使用slf4j+logback的方式記錄日志,引入其他框架的時候,只需要把這個框架依賴的日志框架排除掉即可;」

        4. 日志的使用

        「1.默認配置」
        「SpringBoot默認幫我們配置好了日志;」
        //記錄器????
        Logger?logger?=?LoggerFactory.getLogger(getClass());????
        @Test????
        public?void?contextLoads()?{????
        //System.out.println();????????
        //日志的級別;????????
        //由低到高???trace
        //可以調(diào)整輸出的日志級別;日志就只會在這個級別以以后的高級別生效????????
        logger.trace("這是trace日志...");????????
        logger.debug("這是debug日志...");????????
        //SpringBoot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規(guī)定的級別;root
        級別
        ???????
        logger.info("這是info日志...");????????
        logger.warn("這是warn日志...");????????
        logger.error("這是error日志...");????????
        }?
        「日志輸出格式:」%d表示日期時間,
        %thread表示線程名,
        %‐5level:級別從左顯示5個字符寬度
        %logger{50} 表示logger名字最長50個字符,否則按照句點分割。
        %msg:日志消息,
        %n是換行符
        ‐‐> %d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
        「Spring Boot修改日志的默認配置」
        logging.level.com.atguigu=trace
        #logging.path=
        #?不指定路徑在當前項目下生成springboot.log日志
        #?可以指定完整的路徑;
        #logging.file=G:/springboot.log
        #?在當前磁盤的根路徑下創(chuàng)建spring文件夾和里面的log文件夾;使用 spring.log 作為默認文件
        logging.path=/spring/log
        #??在控制臺輸出的日志的格式
        logging.pattern.console=%d{yyyy‐MM‐dd}?[%thread]?%‐5level?%logger{50}?‐?%msg%n
        #?指定文件中日志輸出的格式
        logging.pattern.file=%d{yyyy‐MM‐dd}?===?[%thread]?===?%‐5level?===?%logger{50}?====?%msg%n
        logging.file
        logging.path
        Example
        Description




        (none)
        (none)

        只在控制臺輸出
        指定文件名
        (none)
        my.log
        輸出日志到my.log文件
        (none)
        指定目錄
        /var/log
        輸出到指定目錄的 spring.log 文件中
        「2. 指定配置」
        給類路徑下放上每個日志框架自己的配置文件即可;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
        logback.xml:直接就被日志框架識別了;
        logback-spring.xml:日志框架就不直接加載日志的配置項,由SpringBoot解析日志配置,可以使用SpringBoot的高級Profile功能。
        <springProfile?name="staging">
        ????<!‐‐?configuration?to?be?enabled?when?the?"staging"?profile?is?active?‐‐>
        ???可以指定某段配置只在某個環(huán)境下生效??
        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%npattern>
        ????????????springProfile>
        ????????????<springProfile?name="!dev">
        ????????????????<pattern>%d{yyyy‐MM‐dd?HH:mm:ss.SSS}?====?[%thread]?====?%‐5level
        %logger{50}?‐?%msg%npattern>
        ????????????springProfile>
        ????????layout>
        ????appender>
        如果使用logback.xml作為日志配置文件,還要使用profile功能,會有以下錯誤
        no?applicable?action?for?[springProfile]

        5. 切換日志框架

        可以按照slf4j的日志適配圖,進行相關(guān)的切換;
        slf4j+log4j的方式:
        dependency>
        ??<groupId>org.springframework.bootgroupId>
        ??<artifactId>spring‐boot‐starter‐webartifactId>
        ??<exclusions>
        ????<exclusion>
        ??????<artifactId>logback‐classicartifactId>
        ??????<groupId>ch.qos.logbackgroupId>
        ????exclusion>
        ????<exclusion>
        ??????<artifactId>log4j‐over‐slf4jartifactId>
        ??????<groupId>org.slf4jgroupId>
        ????exclusion>
        ??exclusions>
        dependency>
        <dependency>
        ??<groupId>org.slf4jgroupId>
        ??<artifactId>slf4j‐log4j12artifactId>
        dependency>
        「切換為log4j2」
        <dependency>
        ????<groupId>org.springframework.bootgroupId>
        ????<artifactId>spring‐boot‐starter‐webartifactId>
        ????<exclusions>
        ????<exclusion>
        ???????<artifactId>spring‐boot‐starter‐loggingartifactId>
        ??????<groupId>org.springframework.bootgroupId>
        ????exclusion>
        ??exclusions>
        dependency>
        <dependency>
        ??<groupId>org.springframework.bootgroupId>
        ??<artifactId>spring‐boot‐starter‐log4j2artifactId>
        dependency>


        最后給大家送下福利,大家可以關(guān)注Java后端編程公眾號,在后臺回復?“666”可以獲取一份我整理的最新Java編程學習資料。
        (END)
        最近好文分享
        程序員買房前后對比,看完后已哭瞎...
        互聯(lián)網(wǎng)相親,是怎么收割單身男女的?
        真臉紅了!2020年輕人性愛數(shù)據(jù)報告
        2020最新Java學習路線圖,附配套視頻!
        干掉Navicat,推薦一款免費的數(shù)據(jù)庫管理工具!
        更多請掃碼關(guān)注?? Java后端編程

        一個分享Java后端技術(shù)干貨的公眾號

        歡迎大家在看、轉(zhuǎn)發(fā)

        瀏覽 48
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日摸夜操 | 精品三级在线 | 草草在线免费视频 | 操B视频在线 | 啊~cao死你个小sao货绿帽 | 免费视频毛片 | 国产视频第二页 | 午夜影院欧美高清在线观看 | 各种少妇正面着bbw撒尿视频 | 人人操人人插人人摸 |