4.springboot 與日志

學(xué)習(xí)記錄,僅供參考

異步輸出

自動歸檔

日志級別:

  • 所有支持的日志系統(tǒng)可以在springboot設(shè)置的記錄器級別Environment(例如诗力,application.properties通過使用)logging.level.<logger-name>=<level>募寨,其中l(wèi)evel為TRACE辐怕,DEBUG,INFO野揪,WARN,ERROR传于,F(xiàn)ATAL或OFF之一囱挑。該root記錄器可以通過使用被配置logging.level.root。

以下示例顯示了中的潛在日志記錄設(shè)置application.properties:

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

也可以使用環(huán)境變量來設(shè)置日志記錄級別沼溜。例如平挑,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG將設(shè)置org.springframework.web為DEBUG。

日志門面(日志的抽象層):

JCL(Jakarta commons logging) SLF4J(simple logging facade for java) jboss-logging
日志實現(xiàn):log4j JUL(java,util.logging) log4j2 logback
使用:選擇一個日志門面以及一個日志實現(xiàn).例如slf4j 和 logback,
SpringBoot使用的是JCL,SpringBoot默認(rèn)使用的是SLF4J和logback;

使用過程

pom

<dependency>
           <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
 </dependency>

code

    Logger logger = LoggerFactory.getLogger(StudyController.class);
 @GetMapping("/testmyConfiguration")
    public String getTest1()
    {
        logger.trace("trade 級別1");
        logger.debug("debug 級別2");
        logger.info("info 級別3");
        logger.warn("warn 級別4");
        logger.error("error 級別5");
        return testProperties.getName();
    }

配置

我們可以在application.properties中指定日志的級別,需要加上當(dāng)前的包名和類名,
例如logging.level.com.study=trace
  默認(rèn)配置:
  logging.file     logging.path    example    description
  none        none                只在控制臺輸出
  指定文件名      none        my.log      日志輸出到my.log文件中
  none        指定目錄      /var/log     輸出當(dāng)指定目錄的spring.log文件中

#指定當(dāng)前類的日志級別
 2 logging.level.com.skukuqi=trace
 3 #當(dāng)前項目下生成日志
 4 #logging.file=mylog.log
 5 #指定路徑
 6 #logging.file=C:/Users/Administrator/Desktop/mylog.log
 7 #指定目錄
 8 logging.path=C:/spring/log
 9 #指定在控制臺輸出的日志的格式 默認(rèn):時間 級別 線程ID --- 主線程  全類名 :內(nèi)容 -5level 級別從左顯示5個寬度
10 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} -%msg%n
11 #指定文件中日志輸出的格式
12 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} === [%thread] === %-5level === %logger{50} === %msg%n

指定日志文件和日志profile功能(待學(xué)習(xí))

在類路徑下放上每個日志框架自己的配置文件即可,SpringBoot就不使用他默認(rèn)的自動配置了.以下給出默認(rèn)配置的修改命名規(guī)范

  • Logback: logback-spring.xml logback-spring.groovy logback.xml logback.groovy
  • Log4j2 : log4j2-spring.xml log4j2.xml
  • jdk java util logging : logging.properties

profile 功能:

logback.xml:直接就被日志框架識別了.
logback-spring.xml:日志框架不會直接識別,有springBoot加載,這樣就可以使用到springProfile標(biāo)簽?zāi)扯闻渲弥辉谀硞€環(huán)境中生效

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

logback.xml:

 1 <!--scan:
 2 當(dāng)此屬性設(shè)置為true時,配置文件如果發(fā)生改變通熄,將會被重新加載唆涝,默認(rèn)值為true。
 3 scanPeriod:
 4 設(shè)置監(jiān)測配置文件是否有修改的時間間隔唇辨,如果沒有給出時間單位廊酣,默認(rèn)單位是毫秒。當(dāng)scan為true時赏枚,此屬性生效糠赦。默認(rèn)的時間間隔為1分鐘赡艰。
 5 debug:
 6 當(dāng)此屬性設(shè)置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)退渗。默認(rèn)值為false劲绪。-->
 7 <configuration scan="false" scanPeriod="60 seconds" debuf="false">
 8     <!--定義日志的根目錄-->
 9     <property name="LOG_HOME" value="/app/log"/>
10     <!--定義日志文件名稱-->
11     <property name="appName" value="skykuqi_springboot_logging"/>
12     <!--ch.qos.logback.core.ConsoleAppender 表示控制臺輸出-->
13     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
14         <!--日志輸出格式:
15             %d:表示日期時間;
16             %thread:表示線程名;
17             %-5level:級別從左顯示5個字符寬度;
18             %logger{50}:表示logger名字最長50個字符,否則按照句點分隔;
19             %msg:日志消息;
20             %n:換行
21         -->
22         <layout class="ch.qos.logback.classic.PatternLayout">
23             <springProfile name="test">
24                 <pattern>%d{HH:mm:ss} --- [%thread] --- %-5level %logger{36} - %msg%n</pattern>
25             </springProfile>
26             <springProfile name="!test">
27                 <pattern>%d{HH:mm:ss} === [%thread] === %-5level %logger{36} - %msg%n</pattern>
28             </springProfile>
29         </layout>
30     </appender>
31     <!--日志文件最大的大小-->
32     <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
33         <MaxFileSize>10MB</MaxFileSize>
34     </triggeringPolicy>
35     <!-- 日志輸出級別 -->
36     <root level="INFO">
37         <appender-ref ref="STDOUT"/>
38     </root>
39 </configuration

切換日志框架

日志門面SLFJ + 具體實現(xiàn)(SLFJ集成相應(yīng)的jar巨双,以集成其他日志框架系統(tǒng))
當(dāng)你需要替換其他日志框架挨下,只需要去掉其他日志包,引入對應(yīng)springboot的日志starter

slf4j支持日志.png

看spring-boot-start-logging 底層的依賴為logback-classic,log4j-to-slf4j,jul-to-slf4j,所以有相應(yīng)的日志集成包磕秤,同一由slf4j 日志門面調(diào)用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
<dependencies>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-to-slf4j</artifactId>
      <version>2.12.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.7.30</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

使用logback使用需要和slf4j一起使用乳乌,所以總共需要添加依賴的包有slf4j-api.jar,logback-core.jar市咆,logback-classic.jar汉操,logback-access.jar這個暫時用不到所以不添加依賴了
看springboot依賴:


image.png

image.png

jul-to-slf4j&log4j-to-slf4j:
slf4j:https://blog.csdn.net/yangzl2008/article/details/81503579

image.png
image.png
image.png

image.png

轉(zhuǎn)換圖:


image.png

實現(xiàn):
如何讓系統(tǒng)中所有的日志都統(tǒng)一到slf4j

1.將系統(tǒng)中其他日志框架先排除出去
2.用中間包來替換原有的日志框架;
3.我們導(dǎo)入slf4j其他的實現(xiàn)

<configuration scan="false" scanPeriod="60 secondes" debuf="false" >
    <!--    定義日子的根目錄-->
<!--    <property name="LOG_HOME" value="/app/log"></property>-->
<!--&lt;!&ndash;    定義日志文件名稱&ndash;&gt;-->
<!--    <property name="appName" value="lance_study_springboot_logging"></property>-->
    <!--ch.qos.logback.core.ConsoleAppender 表示控制臺輸出-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--        <layout class="ch.qos.logback.classic.PatternLayout">-->
<!--            <springProfile name="prod">-->
<!--            <pattern>-->
<!--                %d{yyyy-MM-dd HH:mm:ss} === [%thread] === %-5level === %logger{50} === %msg%n-->
<!--&lt;!&ndash;                %date [%thread] %-5level %logger{36} - %msg%n&ndash;&gt;-->
<!--            </pattern>-->
<!--            </springProfile>-->
<!--        </layout>-->
        <encoder>
            <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="lancetestlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${Lance.HOME}/logs/cs4DomSsm/cs4DomSsm-gvvmcAssociateVoyage.log</file>
<!--  日志文件分割個數(shù)-->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${Lance.HOME}/logs/cs4DomSsm/cs4DomSsm-gvvmcAssociateVoyage.log.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>50MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志輸出級別 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

   <!--  在對應(yīng)的com.study包下輸出設(shè)定level的log,例如info,會把info,warn,error -->
    <logger name="com.study" level="INFO" additivity="false">
            <appender-ref ref="lancetestlog" />
        </logger>
</configuration>

file2:logback

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- 控制臺打印日志的相關(guān)配置 --> 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- 日志格式 -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
    </encoder>
    <!-- 日志級別過濾器 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 過濾的級別 -->
      <level>WARN</level>
      <!-- 匹配時的操作:接收(記錄) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配時的操作:拒絕(不記錄) -->
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
  
  <!-- 文件保存日志的相關(guān)配置 --> 
  <appender name="ERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <!-- 保存日志文件的路徑 -->
    <file>logs/error.log</file>
    <!-- 日志格式 -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
    <!-- 日志級別過濾器 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 過濾的級別 -->
      <level>ERROR</level>
      <!-- 匹配時的操作:接收(記錄) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配時的操作:拒絕(不記錄) -->
      <onMismatch>DENY</onMismatch>
    </filter>
    <!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 最大保存時間:30天-->
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>
  
  <!-- 基于dubug處理日志:具體控制臺或者文件對日志級別的處理還要看所在appender配置的filter床绪,如果沒有配置filter客情,則使用root配置 -->
  <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ERROR-OUT" />
  </root>
</configuration>

詳細file3:logback

<!--        scan: 當(dāng)此屬性設(shè)置為true時其弊,配置文件如果發(fā)生改變癞己,將會被重新加載,默認(rèn)值為true梭伐。-->
<!--            scanPeriod: 設(shè)置監(jiān)測配置文件是否有修改的時間間隔痹雅,如果沒有給出時間單位,默認(rèn)單位是毫秒糊识。當(dāng)scan為true時绩社,此屬性生效。默認(rèn)的時間間隔為1分鐘赂苗。-->
<!--            debug: 當(dāng)此屬性設(shè)置為true時愉耙,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)拌滋。默認(rèn)值為false朴沿。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--    用來定義變量值,它有兩個屬性name和value,通過<property>定義的值會被插入到logger上下文中赌渣,可以使“${}”來使用變量魏铅。-->
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="APP_Name" value="/home" />
    <!--     子節(jié)點<contextName>:用來設(shè)置上下文名稱,每個logger都關(guān)聯(lián)到logger上下文坚芜,默認(rèn)上下文名稱為default览芳。但可以使用<contextName>設(shè)置成其他名字,用于區(qū)分不同應(yīng)用程序的記錄鸿竖。一旦設(shè)置沧竟,不能修改「坑牵  -->
    <contextName>${APP_Name}</contextName>
    <!-- 控制臺打印日志的相關(guān)配置 -->
    <!--    負(fù)責(zé)寫日志的組件屯仗,它有兩個必要屬性name和class。name指定appender名稱搔谴,class指定appender的全限定名-->
    <!--    控制臺輸出-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志格式 -->
        <encoder>
            <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!-- 日志級別過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 過濾的級別 -->
            <level>ERROR</level>
            <!-- 匹配時的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 文件保存日志的相關(guān)配置 -->
    <!--    RollingFileAppender:滾動記錄文件魁袜,先將日志記錄到指定文件,當(dāng)符合某個條件時敦第,將日志記錄到其他文件峰弹。有以下子節(jié)點-->
    <appender name="lancetestlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--        FileAppender:把日志添加到文件,有以下子節(jié)點:-->
        <!--              <file>:被寫入的文件名芜果,可以是相對目錄鞠呈,也可以是絕對目錄,如果上級目錄不存在會自動創(chuàng)建右钾,沒有默認(rèn)值蚁吝。-->
        <!--              <append>:如果是 true,日志被追加到文件結(jié)尾舀射,如果是 false窘茁,清空現(xiàn)存文件,默認(rèn)是true脆烟。-->
        <!--              <encoder>:對記錄事件進行格式化山林。(具體參數(shù)稍后講解 )-->
        <!--              <prudent>:如果是 true,日志會被安全的寫入文件邢羔,即使其他的FileAppender也在向此文件做寫入操作驼抹,效率低,默認(rèn)是 false拜鹤。-->
        <!-- 保存日志文件的路徑 -->
        <file>${APP_Name}/logs/error.log</file>
        <!-- 日志格式 -->
        <encoder>
            <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>

        <!-- 日志級別過濾器 -->
        <!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--            &lt;!&ndash; 過濾的級別 &ndash;&gt;-->
        <!--            <level>TRACE</level>-->
        <!--            &lt;!&ndash; 匹配時的操作:接收(記錄) &ndash;&gt;-->
        <!--            <onMatch>ACCEPT</onMatch>-->
        <!--            &lt;!&ndash; 不匹配時的操作:拒絕(不記錄) &ndash;&gt;-->
        <!--            <onMismatch>DENY</onMismatch>-->
        <!--        </filter>-->

        <!--        當(dāng)發(fā)生滾動時框冀,決定RollingFileAppender的行為,涉及文件移動和重命名敏簿。屬性class定義具體的滾動策略類-->
<!--        最新的log會在error.lgo-->
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>${APP_Name}/logs/error.log.%i</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>5</maxIndex>
                </rollingPolicy>
                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>5MB</maxFileSize>
                </triggeringPolicy>


        <!--         循環(huán)政策:基于時間創(chuàng)建日志文件 不能與<file>標(biāo)簽一起使用-->
<!--        配置表示每天生成一個日志文件明也,保存7天的日志文件。-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            &lt;!&ndash; 日志文件名格式 &ndash;&gt;-->
<!--            <fileNamePattern>${APP_Name}/logs/error.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            &lt;!&ndash; 最大保存時間:7天&ndash;&gt;-->
<!--            <maxHistory>7</maxHistory>-->
<!--        </rollingPolicy>-->
    </appender>

    <!-- 基于dubug處理日志:具體控制臺或者文件對日志級別的處理還要看所在appender配置的filter,如果沒有配置filter诡右,則使用root配置 -->
    <root level="TRACE">
        <appender-ref ref="STDOUT"/>
        <!--        <appender-ref ref="ERROR-OUT" />-->
    </root>
    <!--  在對應(yīng)的包下輸出設(shè)定level的log,例如info,會把info,warn,error -->
<!--    子節(jié)點<loger>:用來設(shè)置某一個包或具體的某一個類的日志打印級別安岂、以及指定<appender>。<loger>僅有一個name屬性帆吻,一個可選的level和一個可選的additivity屬性域那。
可以包含零個或多個<appender-ref>元素,標(biāo)識這個appender將會添加到這個loger ;additivity: 是否向上級loger傳遞打印信息猜煮。默認(rèn)是true次员。-->
    <logger name="com.study" level="INFO" additivity="false">
        <appender-ref ref="lancetestlog"/>
        <!--        是否控制臺輸出-->
        <!--            <appender-ref ref="STDOUT" />-->
    </logger>
<!--常用logger配置-->
    <!-- show parameters for hibernate sql 專為 Hibernate 定制 -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

</configuration>

切換使用 log4j

1.更改pom文件:
在創(chuàng)建 SpringBoot 工程時,我們引入了 spring-boot-starter王带,其中包含了 spring-boot-starter-logging 淑蔚,該依賴內(nèi)容就是 SpringBoot 默認(rèn)的日志框架 Logback ,所以我們在引入 log4j 之前愕撰,需要先排除該包的依賴刹衫,再引入 log4j 的依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

之后我們可以使用 application.properties搞挣,其中的配置項之前有說带迟,同樣也是適用 Log4J 的。
如果需要更高級的配置選擇囱桨,必須要添加 Log4j 的配置文件了仓犬。我們在 classpath 的 resources下新建 log4j.properties 文件,這里簡單示例一下:

# 日志級別舍肠,日志追加程序列表...
log4j.rootLogger=DEBUG,ServerDailyRollingFile,stdout
#文件保存日志
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#文件保存日志日期格式
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd_HH
#文件保存日志文件路徑
log4j.appender.ServerDailyRollingFile.File=/mnt/lunqi/demo/log4j.log
#文件保存日志布局程序
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
#文件保存日志布局格式
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
#文件保存日志需要向后追加(false是測試的時候日志文件就清空搀继,true的話就是在之前基礎(chǔ)上往后寫)
log4j.appender.ServerDailyRollingFile.Append=false
#控制臺日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#控制臺日志布局程序
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#控制臺日志布局格式
log4j.appender.stdout.layout.ConversionPattern=%d yyyy-MM-dd HH:mm:ss %p [%c] %m%n

切換使用 log4j 引用于 作者:Lunqi
鏈接:http://www.reibang.com/p/969e47cefa78

總結(jié):

  • springboot 默認(rèn)使用SLF4J + logback
  • 日志文件會在10Mb大小的時候被截斷,產(chǎn)生新的日志文件翠语,默認(rèn)級別為:ERROR叽躯、WARN、INFO啡专,并且與控制臺輸出一樣险毁,默認(rèn)情況下會記錄ERROR-level制圈,WARN-level和INFO-level消息们童。可以使用該logging.file.max-size屬性更改大小限制鲸鹦。除非logging.file.max-history已設(shè)置該屬性慧库,否則默認(rèn)情況下將保留最近7天的輪轉(zhuǎn)日志文件。日志檔案的總大小可以使用設(shè)置上限logging.file.total-size-cap馋嗜。當(dāng)日志歸檔的總大小超過該閾值時齐板,將刪除備份。要在應(yīng)用程序啟動時強制清除日志存檔,請使用該logging.file.clean-history-on-start屬性
  • SpringBoot也把其他的日志都替換成了slf4j;
  • 如果我們要引入其他的框架,一定要把這個框架的默認(rèn)日志依賴移除掉.
    使用介紹:https://blog.csdn.net/Stitch__/article/details/88377310
    日志管理:http://www.reibang.com/p/969e47cefa78
    logback 官方文檔: http://logback.qos.ch/documentation.html

學(xué)習(xí)記錄中......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橡羞,一起剝皮案震驚了整個濱河市济舆,隨后出現(xiàn)的幾起案子卿泽,更是在濱河造成了極大的恐慌滋觉,老刑警劉巖签夭,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異第租,居然都是意外死亡,警方通過查閱死者的電腦和手機慎宾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浅悉,“玉大人璧诵,你說我怎么就攤上這事≈蓿” “怎么了苛坚?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泼舱。 經(jīng)常有香客問我,道長娇昙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任冒掌,我火速辦了婚禮,結(jié)果婚禮上膳音,老公的妹妹穿的比我還像新娘。我一直安慰自己祭陷,他們只是感情好苍凛,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布兵志。 她就那樣靜靜地躺著,像睡著了一般哑蔫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闸迷,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天俘枫,我揣著相機與錄音,去河邊找鬼鸠蚪。 笑死,一個胖子當(dāng)著我的面吹牛茅信,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蘸鲸,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膝舅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仍稀,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤埂息,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后千康,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡吧秕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颠毙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛀蜜,死狀恐怖增蹭,靈堂內(nèi)的尸體忽然破棺而出滴某,到底是詐尸還是另有隱情滋迈,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布幕侠,位于F島的核電站,受9級特大地震影響晤硕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舞箍,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一皆疹、第九天 我趴在偏房一處隱蔽的房頂上張望疏橄。 院中可真熱鬧略就,春花似錦、人聲如沸残制。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至螺戳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倔幼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工损同, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膏燃。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像组哩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛛砰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容