中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

java日志打印怎么使用

發布時間:2022-01-19 10:28:00 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

本篇內容介紹了“java日志打印怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、簡介

  • 日志打印是java代碼開發中不可缺少的重要一步。

  • 日志可以排查問題,可以搜集數據

java日志打印怎么使用

二、常用日志框架

比較常用的日志框架就是logback, 一些老項目會使用log4j,他們用的都是slf4j-api統一接口。

(1) 使用log4j

log4j使用:
1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties

代碼中

import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(xx.class);

(2) 使用logback

logback使用:
1. slf4j-api-1.5.11.jar
2. logback-core.jar
3. logback-classic.jar
4. logback.xml

代碼同log4j

import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(xx.class);

三、日志級別

TRACE < DEBUG < INFO < WARN < ERROR

日常使用較多的是error, info , debug

四、logback簡單介紹

簡單介紹下常用的logback,logback優點:

  • 比log4j更快

  • 和log4j使用了同一個接口,slf4j-api,可以非常方便切換

  • 定義了功能非常豐富的appender

  • 支持日志壓縮

logback要正確理解xml配置文件

  • configuration:總的父節點

  • property:自定義屬性

  • appender:輸出控制器,可以輸出到控制臺,自定義文件等

  • logger:日志級別

  • root:控制器級別

一個例子:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">

    <contextName>XXXXXXXX</contextName>
    <property name="log.path" value="./log/"/>
    <!-- 日志最大的歷史 30天 -->
    <property name="maxHistory" value="30"/>

    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%-5level] [%logger{30}:%line] %msg%n"/>

    <!--輸出到控制臺-->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是為開發使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
        <!--LevelFilter: 級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。-->
        <!--例如:將過濾器的日志級別配置為INFO,所有INFO級別的日志交給appender處理,非INFO級別的日志,被過濾掉。-->
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--<level>INFO</level>-->
        <!--<onMatch>ACCEPT</onMatch>-->
        <!--<onMismatch>DENY</onMismatch>-->
        <!--</filter>-->

        <!--ThresholdFilter: 臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當日志級別低于臨界值時,日志會被拒絕。-->
        <!-- 過濾掉所有低于 DEBUG 級別的日志,留下DEBUG及以上級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 時間滾動輸出 level為 INFO 日志 -->
    <appender name="errorFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--LevelFilter: 級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。-->
        <!--例如:將過濾器的日志級別配置為INFO,所有INFO級別的日志交給appender處理,非INFO級別的日志,被過濾掉。-->
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--<level>INFO</level>-->
        <!--<onMatch>ACCEPT</onMatch>-->
        <!--<onMismatch>DENY</onMismatch>-->
        <!--</filter>-->

        <!--ThresholdFilter: 臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當日志級別低于臨界值時,日志會被拒絕。-->
        <!-- 過濾掉所有低于 DEBUG 級別的日志,留下DEBUG及以上級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

        <!-- 正在記錄的日志文件的路徑及文件名 -->
        <file>${log.path}/error.log</file>

        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志歸檔路徑以及格式 -->
            <fileNamePattern>${log.path}/error-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>
            <!--日志文件保留天數-->
            <maxHistory>${maxHistory}</maxHistory>
            <!-- 日志總保存量為2GB -->
            <totalSizeCap>2GB</totalSizeCap>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件達到 最大100MB時會被壓縮和切割 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 時間滾動輸出 level為 INFO 日志 -->
    <appender name="infoFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--LevelFilter: 級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。-->
        <!--例如:將過濾器的日志級別配置為INFO,所有INFO級別的日志交給appender處理,非INFO級別的日志,被過濾掉。-->
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--<level>INFO</level>-->
        <!--<onMatch>ACCEPT</onMatch>-->
        <!--<onMismatch>DENY</onMismatch>-->
        <!--</filter>-->

        <!--ThresholdFilter: 臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當日志級別低于臨界值時,日志會被拒絕。-->
        <!-- 過濾掉所有低于 DEBUG 級別的日志,留下DEBUG及以上級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <!-- 正在記錄的日志文件的路徑及文件名 -->
        <file>${log.path}/info.log</file>

        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志歸檔路徑以及格式 -->
            <fileNamePattern>${log.path}/info-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>
            <!--日志文件保留天數-->
            <maxHistory>${maxHistory}</maxHistory>
            <!-- 日志總保存量為10GB -->
            <totalSizeCap>2GB</totalSizeCap>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件達到 最大100MB時會被壓縮和切割 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 時間滾動輸出 level為 INFO 日志 -->
    <appender name="debugFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--LevelFilter: 級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。-->
        <!--例如:將過濾器的日志級別配置為INFO,所有INFO級別的日志交給appender處理,非INFO級別的日志,被過濾掉。-->
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">-->
        <!--<level>INFO</level>-->
        <!--<onMatch>ACCEPT</onMatch>-->
        <!--<onMismatch>DENY</onMismatch>-->
        <!--</filter>-->

        <!--ThresholdFilter: 臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當日志級別低于臨界值時,日志會被拒絕。-->
        <!-- 過濾掉所有低于 DEBUG 級別的日志,留下DEBUG及以上級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>

        <!-- 正在記錄的日志文件的路徑及文件名 -->
        <file>${log.path}/debug.log</file>

        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志歸檔路徑以及格式 -->
            <fileNamePattern>${log.path}/debug-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>
            <!--日志文件保留天數-->
            <maxHistory>${maxHistory}</maxHistory>
            <!-- 日志總保存量為2GB -->
            <totalSizeCap>2GB</totalSizeCap>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件達到 最大100MB時會被壓縮和切割 -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>


    <logger name="com.baomidou" level="debug"/>


    <root level="info">
        <appender-ref ref="consoleAppender"/>
        <appender-ref ref="errorFileAppender"/>
        <appender-ref ref="infoFileAppender"/>
        <appender-ref ref="debugFileAppender"/>
    </root>

</configuration>

五、常見問題

  • 1、日志打的少,不好排查問題?

我們經常會遇到一個生產問題,去看日志,啥都沒有,只能重新加日志,發包,再排查問題;
所以我們要養成打日志的習慣,開發環境可以debug看,生產看不了,只能加日志,在開發的時候就把必要的日志加上;
比較重要的是接口的入參,返回,重要節點開始,結束,mq發送接收等。

  • 2、error, info , debug分別都什么時候使用?

error: 捕獲異常的時候使用,這個沒有異議
info: 比較重要的信息,使用頻次不是非常高的場景,比如入參出參
debug: 一個是不是特別重要的信息,但是又不能少,還有數據量大的數據,比如大量mq信息,訪問頻繁的接口入參出參

  • 3、開啟debug好多無用的debug信息怎么辦?

把項目的目錄定為debug,其它定成info。這樣只有本項目的debug日志會打印了
logging.level.root=info
logging.level.cn.mypackage=debug

  • 4、需要自定義日志文件嗎?

logback可以把日志寫進自定義文件,debug,info,error分開存儲,歷史數據還能壓縮;
按自己項目的需求來,大型項目建議分開存儲。

  • 5、springboot啟動命令自帶的日志和自定義日志文件的日志重復怎么辦?

我們一般啟動springboot項目命令為:nohup java -jar XXXXXXXX.jar >> XXXXXXX.log 2>&1 &
這個會生成一個日志文件,logback配置也會生成自己的日志文件,就會重復,造成空間浪費,如何取舍?

如果你們公司統一打包腳本的話,就用命令生成的日志文件吧,把logback配置去掉;
如果你們公司自由度比較高,就用logback生成的日志,把命令改成  >/dev/null 就可以了

  • 6、debug日志正確寫法?

有些人可能打debug日志直接logger.debug("****");
如果項目的日志級別比較高,就比較浪費性能,可以加一個
if (log.isDebugEnabled()) {
    log.debug("XXXXXXXXXXXXX");
}
  • 7、動態日志級別?

有些公司支持動態配置文件,比如diamond,nacos等,可以修改配置文件的級別,動態生效
logging.level.root=info
#logging.level.root=debug

日常開在info,出了問題開debug找,資源有限可以這樣做,不推薦生產使用

“java日志打印怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

屏山县| 喀喇沁旗| 类乌齐县| 奉新县| 荣昌县| 中西区| 剑河县| 四川省| 昔阳县| 盐津县| 奉贤区| 社旗县| 榆社县| 昌图县| 格尔木市| 当涂县| 琼海市| 邻水| 华阴市| 北票市| 鲁甸县| 海宁市| 珲春市| 屏东市| 镇坪县| 田林县| 上栗县| 南溪县| 海门市| 精河县| 贞丰县| 德兴市| 台南市| 宜川县| 阜南县| 若尔盖县| 揭阳市| 隆德县| 上林县| 武乡县| 安阳县|