溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Logback如何配置以及如何提升TPS

發(fā)布時間:2021-10-20 17:09:58 來源:億速云 閱讀:142 作者:柒染 欄目:大數(shù)據(jù)

Logback如何配置以及如何提升TPS,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Springboot工程自帶Logback和slf4j依賴,所以基本不需要引入依賴,就可以使用日志打印 Logback框架默認會加載resource下邊的logback或logback-spring配置文件。下邊的配置文件就是講項目輸出的日志以文件格式輸出到硬盤上。

<?xml version="1.0" encoding="UTF-8"?> <configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<!--
  Appender
       FILEERROR對應error級別,文件名以log-error-xxx.log形式命名
       FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名
       FILEINFO對應info級別,文件名以log-info-xxx.log形式命名
       FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名
       stdout將日志信息輸出到控制上,為方便開發(fā)測試使用
-->
<contextName>SpringBootDemo</contextName>
<property name="LOG_PATH" value="/opt/bak/data/bpms" />
<!--設置系統(tǒng)日志目錄-->
<property name="APPDIR" value="bpordermanagement" />

<!-- 彩色日志依賴的渲染類 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_COLOR_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 文件日志格式 -->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
<!-- 標準格式-->
<property name="CONSOLE_LOG_PATTERN"
          value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- 日志記錄器,日期滾動記錄 -->
<appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在記錄的日志文件的路徑及文件名 -->
    <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
    <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始,
        命名日志文件,例如log-error-2017-03-23.0.log -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- 追加方式記錄日志 -->
    <append>true</append>
    <!-- 日志文件的格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${FILE_LOG_PATTERN}</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="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在記錄的日志文件的路徑及文件名 -->
    <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
    <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 歸檔的日志文件的路徑,例如今天是2017-03-23日志,當前寫的日志文件路徑為file節(jié)點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
        而2017-03-23的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
        <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始,
        命名日志文件,例如log-error-2017-03-23.0.log -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- 追加方式記錄日志 -->
    <append>true</append>
    <!-- 日志文件的格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${FILE_LOG_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
    <!-- 此日志文件只記錄warn級別的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>warn</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!-- 日志記錄器,日期滾動記錄 -->
<appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在記錄的日志文件的路徑及文件名 -->
    <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
    <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 歸檔的日志文件的路徑,例如今天是2017-03-23日志,當前寫的日志文件路徑為file節(jié)點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
        而2017-03-23的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
        <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始,
        命名日志文件,例如log-error-2017-03-23.0.log -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- 追加方式記錄日志 -->
    <append>true</append>
    <!-- 日志文件的格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${FILE_LOG_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
    <!-- 此日志文件只記錄info級別的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>info</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!-- 日志記錄器,日期滾動記錄 -->
<appender name="FILEDEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在記錄的日志文件的路徑及文件名 -->
    <file>${LOG_PATH}/${APPDIR}/log_debug.log</file>
    <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 歸檔的日志文件的路徑,例如今天是2017-03-23日志,當前寫的日志文件路徑為file節(jié)點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
        而2017-03-23的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
        <fileNamePattern>${LOG_PATH}/${APPDIR}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始,
        命名日志文件,例如log-error-2017-03-23.0.log -->
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- 追加方式記錄日志 -->
    <append>true</append>
    <!-- 日志文件的格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${FILE_LOG_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
    <!-- 此日志文件只記錄info級別的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>debug</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

<!-- 異步輸出 info日志-->
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
    <queueSize>256</queueSize>
    <!-- 添加附加的appender,最多只能添加一個 -->
    <appender-ref ref="FILEINFO"/>
</appender>
<!-- 異步輸出 error日志-->
<appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
    <queueSize>256</queueSize>
    <!-- 添加附加的appender,最多只能添加一個 -->
    <appender-ref ref="FILEERROR"/>
</appender>

<!--開發(fā)環(huán)境、控制臺輸出-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!--encoder 默認配置為PatternLayoutEncoder-->
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
    <!--此日志appender是為開發(fā)使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>info</level>
    </filter>
</appender>

<logger name="org.springframework" level="warn" />
<logger name="org.hibernate" level="warn" />

<!-- 生產(chǎn)環(huán)境下,將此級別配置為適合的級別,以免日志文件太多或影響程序性能 -->
<root level="INFO">
    <appender-ref ref="FILEERROR" />
    <appender-ref ref="FILEWARN" />
    <appender-ref ref="FILEINFO" />
    <appender-ref ref="FILEDEBUG" />

    <!-- 生產(chǎn)環(huán)境將請stdout去掉 -->
    <appender-ref ref="STDOUT" />
</root>
<jmxConfigurator/>
</configuration>`

<root>標簽,必填標簽,用來指定最基礎的日志級別,上邊指定debug、info、warn、error四個日志級別 <appender-ref>標簽,添加 append <append>標簽 name:為不同的日志級別,其中有,debug、info、warn、error級別,class:日志輸出策略,一般分控制臺輸出和文件輸出,ConsoleAppender為控制臺輸出,RollingFileAppender為文件輸出 <filter>標簽 通過該標簽指定過濾策略 <level>標簽指定過濾類型 <encode>標簽 指定日志輸出格式 <rollingPolicy>標簽 指定收集策略,比如基于時間或者文件到一定大小后重新建日志文件 <fileNamePattern>標簽 指定生成日志保存地址,通過這樣配置已經(jīng)實現(xiàn)了分類分天收集日志的目標了

logback 高級特性異步輸出日志 之前的日志配置方式是基于同步的,每次日志輸出到文件都會進行一次磁盤IO。采用異步寫日志的方式而不讓此次寫日志發(fā)生磁盤IO,阻塞線程從而造成不必要的性能損耗。異步輸出日志的方式很簡單,添加一個基于異步寫日志的appender,并指向原先配置的appender即可

<!-- 異步輸出 info日志-->
    <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="FILEINFO"/>
    </appender>
    <!-- 異步輸出 error日志-->
    <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="FILEERROR"/>
    </appender>
**異步輸出日志性能測試**
既然能提高性能的話,必須進行一次測試比對,同步和異步輸出日志性能到底能提升多少倍?

服務器硬件
	CPU 四核
	內存 8G
測試工具 
    Apache Jmeter

異步輸出日志

線程數(shù):100

Ramp-Up Loop(可以理解為啟動線程所用時間) :0 可以理解為100個線程同時啟用 Logback如何配置以及如何提升TPS

同步輸出日志

線程數(shù):100

Ramp-Up Loop(可以理解為啟動線程所用時間) :0 可以理解為100個線程同時啟用

測試完成,TPS提升3倍多

關于Logback如何配置以及如何提升TPS問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI