日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

日志打印的這10個坑,你至少踩過一個...

來源: 責編: 時間:2024-06-27 07:57:17 156觀看
導讀前言大家好,我是撿田螺的小男孩.我們日常開發中,經常需要打印日志.但是不當的日志使用可能會導致各種問題。整理了日志打印的10個坑,希望大家都能避坑~~1.忽視日志級別,反手就是INFO常見的日志級別有5種,分別是error、

前言

大家好,我是撿田螺的小男孩.LWn28資訊網——每日最新資訊28at.com

我們日常開發中,經常需要打印日志.但是不當的日志使用可能會導致各種問題。整理了日志打印的10個坑,希望大家都能避坑~~LWn28資訊網——每日最新資訊28at.com

1.忽視日志級別,反手就是INFO

常見的日志級別有5種,分別是error、warn、info、debug、trace。日常開發中,我們需要選擇恰當的日志級別,不要反手就是打印info哈~LWn28資訊網——每日最新資訊28at.com

  • ERROR:錯誤日志,指比較嚴重的錯誤,對正常業務有影響,需要運維配置監控的;
  • WARN:警告日志,一般的錯誤,對業務影響不大,但是需要開發關注;
  • INFO:信息日志,記錄排查問題的關鍵信息,如調用時間、出參入參等等;
  • DEBUG:用于開發DEBUG的,關鍵邏輯里面的運行時數據;
  • TRACE:最詳細的信息,一般這些信息只記錄到日志文件中

2.過度日志記錄

  • 問題:記錄了過多的日志信息,導致日志文件過大,難以管理和分析。

比如這個例子(過度記錄DEBUG級別的日志):LWn28資訊網——每日最新資訊28at.com

// 過度記錄DEBUG級別的日志public void processData() {    logger.debug("Entering processData method.");    // 業務邏輯    logger.debug("Exiting processData method.");}

正例應該這樣(僅記錄必要的日志信息)LWn28資訊網——每日最新資訊28at.com

// 僅在異常和重要步驟中記錄日志public void processData() {    try {        logger.info("Start processing data.");        // 業務邏輯        logger.info("Finished processing data.");    } catch (Exception e) {        logger.error("Error occurred while processing data: ", e);    }}

我們應當根據日志的重要性設置不同的日志級別(如ERROR、WARN、INFO、DEBUG),只記錄必要的日志信息,避免日志打印處理成流水賬.LWn28資訊網——每日最新資訊28at.com

3.將debug日志直接帶到生產環境

有些伙伴亂用日志級別,甚至將DEBUG級別的日志用于生產環境。LWn28資訊網——每日最新資訊28at.com

反例(將DEBUG級別的日志直接用于生產環境):LWn28資訊網——每日最新資訊28at.com

logger.debug("This is a debug message,should not be logged in production");

正例 (debug日志級別,最好判斷一下是否開啟):LWn28資訊網——每日最新資訊28at.com

if(log.isDebugEnable()){  logger.debug("This is a debug message,should not be logged in production"); }

4.日志缺少上下文信息

大家可以看下這行日志,覺得有啥問題LWn28資訊網——每日最新資訊28at.com

logger.info("User login request");

很明顯,日志缺少上下文信息,并不方便排查.比如說,你想知道是哪個用戶的登錄請求嘛? 至少把userId 打印出來吧,如下:LWn28資訊網——每日最新資訊28at.com

logger.info("User login request,userId:{}",userId);

5.同步IO導致性能問題

同步日志記錄會阻塞主線程,影響系統性能。因此使用異步日志框架(比如Log4j 2的異步日志記錄器)來減少對性能的影響。LWn28資訊網——每日最新資訊28at.com

// 使用Log4j 2的異步日志<Configuration status="WARN">    <Appenders>        <Console name="Console" target="SYSTEM_OUT">            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>        </Console>        <Async name="AsyncConsole">            <AppenderRef ref="Console"/>        </Async>    </Appenders>    <Loggers>        <Root level="info">            <AppenderRef ref="AsyncConsole"/>        </Root>    </Loggers></Configuration>

6.日志配置不合理:

有些日志配置文件復雜,難以維護;配置文件中存在硬編碼路徑。如下:LWn28資訊網——每日最新資訊28at.com

// log4j.properties 示例log4j.rootLogger=INFO, filelog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/var/log/tianluoboy.log

應當使用靈活的配置LWn28資訊網——每日最新資訊28at.com

// logback.xml 示例<configuration>    <property name="LOG_HOME" value="${LOG_HOME:-/var/log/myapp}"/>    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        <file>${LOG_HOME}/tianluoboy.log</file>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <fileNamePattern>${LOG_HOME}/tianluoboy.%d{yyyy-MM-dd}.log</fileNamePattern>            <maxHistory>30</maxHistory>        </rollingPolicy>        <encoder>            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>        </encoder>    </appender>    <root level="info">        <appender-ref ref="FILE"/>    </root></configuration>

7.日志內容泄露敏感信息

日志中記錄了用戶的敏感信息(如密碼、信用卡號),存在安全風險。LWn28資訊網——每日最新資訊28at.com

logger.info("User password: {}", password);

這都把用戶的密碼打印出來了...解決方法就是,不能打印密碼這些關鍵信息,如果是手機號、郵箱等敏感信息,則可以脫敏、或者掩碼處理。LWn28資訊網——每日最新資訊28at.com

8.日志文件輪轉和歸檔配置不當。

如果日志文件過大時未能及時輪轉,就很坑.LWn28資訊網——每日最新資訊28at.com

// 簡單的日志配置,沒有輪轉策略log4j.appender.file.File=tianluoboy.log

日志要配置合理的輪轉和歸檔策略,避免文件過大.LWn28資訊網——每日最新資訊28at.com

// logback.xml 示例<configuration>    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        <file>tianluoboy.logg</file>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <fileNamePattern>tianluoboy.%d{yyyy-MM-dd}.log</fileNamePattern>            <maxHistory>30</maxHistory>        </rollingPolicy>        <encoder>            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>        </encoder>    </appender>    <root level="info">        <appender-ref ref="FILE"/>    </root></configuration>

9.日志框架漏洞的問題

有些日志框架,在低版本,可能會存在安全漏洞問題.甚至有些可能會存在漏洞還沒被發現.LWn28資訊網——每日最新資訊28at.com

我們如何做呢? 如果是低版本存在安全漏洞的日志框架,我們要盡快升級到最新版本.LWn28資訊網——每日最新資訊28at.com

比如Log4Shell 是Log4j 2.x中一個嚴重的遠程代碼執行(RCE)漏洞。攻擊者可以通過特制的日志消息來觸發JNDI查找請求,從而在受影響的系統上執行任意代碼。LWn28資訊網——每日最新資訊28at.com

可以升級到Log4j 2.17.0或更高版本,這些版本已經修復了該漏洞。LWn28資訊網——每日最新資訊28at.com

尚未被發現的漏洞,也可能潛在地影響應用程序的安全性。我們要使用成熟的日志框架,并且要定時更新和維護.LWn28資訊網——每日最新資訊28at.com

10.錯誤配置LevelFilter造成日志重復記錄

錯誤配置LevelFilter可能導致日志重復記錄的問題.比如你這樣配置:LWn28資訊網——每日最新資訊28at.com

<Configuration status="WARN">    <Appenders>        <Console name="ConsoleAppender" target="SYSTEM_OUT">            <PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>            <Filters>                <LevelFilter level="INFO" notallow="ACCEPT" notallow="DENY"/>            </Filters>        </Console>        <File name="FileAppender" fileName="app.log">            <PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>            <Filters>                <LevelFilter level="INFO" notallow="ACCEPT" notallow="DENY"/>            </Filters>        </File>    </Appenders>    <Loggers>        <Root level="INFO">            <AppenderRef ref="ConsoleAppender"/>            <AppenderRef ref="FileAppender"/>        </Root>    </Loggers></Configuration>

在上述配置中,由于兩個appender的LevelFilter條件相同,導致每條INFO級別的日志都會同時被兩個appender記錄,產生了重復日志。LWn28資訊網——每日最新資訊28at.com

可以使用不同的過濾器策略來確保日志只被一個appender記錄:LWn28資訊網——每日最新資訊28at.com

<Configuration status="WARN">    <Appenders>        <Console name="ConsoleAppender" target="SYSTEM_OUT">            <PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>            <Filters>                <LevelFilter level="INFO" notallow="ACCEPT" notallow="DENY"/>            </Filters>        </Console>        <File name="FileAppender" fileName="app.log">            <PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>            <Filters>                <LevelFilter level="DEBUG" notallow="ACCEPT" notallow="DENY"/>                <LevelFilter level="INFO" notallow="DENY" notallow="DENY"/>            </Filters>        </File>    </Appenders>    <Loggers>        <Root level="DEBUG">            <AppenderRef ref="ConsoleAppender"/>            <AppenderRef ref="FileAppender"/>        </Root>    </Loggers></Configuration>

在這個配置中,ConsoleAppender只記錄INFO級別及以上的日志,而FileAppender記錄DEBUG級別但排除INFO級別的日志。這樣可以避免INFO級別的日志被兩個appender同時記錄。LWn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-96759-0.html日志打印的這10個坑,你至少踩過一個...

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 避免消息積壓的終極指南:四個關鍵技巧

下一篇: 一文搞懂大廠商品中心設計!

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法??梢杂脕戆l現應用程序、操作系統和網絡協議等中的漏洞或
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀?! ∶绹鴷r間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內容審核等。此前,T
Top 主站蜘蛛池模板: 伽师县| 报价| 五家渠市| 许昌县| 淮北市| 贞丰县| 云南省| 古田县| 泽库县| 晋宁县| 霍州市| 济南市| 太湖县| 信宜市| 淳化县| 新民市| 常山县| 金阳县| 沽源县| 长春市| 柳河县| 潞城市| 新干县| 太原市| 庆阳市| 兴业县| 镇雄县| 长沙县| 黑河市| 策勒县| 延川县| 枞阳县| 神木县| 长兴县| 丰台区| 绵竹市| 右玉县| 会泽县| 永年县| 潮安县| 正宁县|