全部產品
Search
文件中心

Simple Log Service:分析Log4j日誌

更新時間:Jun 30, 2024

本文以電商平台的日誌為例,介紹Log4j日誌的分析操作。

前提條件

  • 已採集Log4j日誌。具體操作,請參見採集Log4j日誌

  • 已配置索引。具體操作,請參見建立索引

    本案例的索引如下圖所示。指定欄位查詢

背景資訊

Log4j是Apache的一個開放原始碼專案,通過使用Log4j,您可以配置日誌傳輸的目的地,例如控制台、檔案、GUI組件、Socket伺服器、NT的事件記錄器、UNIX Syslog守護進程等;您也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的層級,您能夠更加細緻地控制日誌的產生過程。這些可以通過一個設定檔來靈活地進行配置,而不需要修改應用的代碼。Log4j由三個重要的組件構成,如下所示:

  • 日誌格式化器(Layouts)

    Layouts控制日誌資訊的格式化方式。常用Layouts有:

    Layouts

    含義

    HTMLLayout

    表示日誌輸出格式化為HTML表格形式。

    SimpleLayout

    表示使用簡單的輸出格式化,格式如預設的INFO層級的訊息。

    PatternLayout

    根據自訂格式輸出日誌,您可以設定包括時間戳記、記錄層級、線程名、類名、方法名、日誌訊息等元素的排列和格式。

  • 日誌輸出端(Appenders)

    Appenders定義了日誌資訊的輸出目的地。您可以配置多個Appender,將日誌發送到不同的地方。常用Appenders有:

    Appenders

    含義

    ConsoleAppender

    將日誌輸出到控制台。

    FileAppender

    將日誌輸出到檔案中。

    DailyRollingFileAppender

    將日誌輸出到一個檔案,並且每天輸出到新的檔案。

    RollingFileAppender

    將日誌資訊輸出到一個檔案,並且指定檔案的尺寸,當檔案大小達到指定尺寸時,會自動把檔案改名,同時產生一個新的檔案。

    JDBCAppender

    將日誌資訊儲存到資料庫中。

  • 日誌記錄器(Loggers)

    Loggers定義了日誌記錄的進入點,負責捕獲日誌資訊。每個Logger都會基於其重要性或嚴重程度分配到一個記錄層級。Log4j定義了8個層級的log,優先順序從高到低依次為:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。日誌記錄的層級具有繼承性,子類會記錄父類的所有記錄層級。每種記錄層級的含義如下:

    記錄層級

    含義

    OFF

    關閉所有日誌記錄。

    FATAL

    指出嚴重的錯誤事件,將會導致應用程式的退出。

    ERROR

    指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。

    WARN

    表明會出現潛在的錯誤情形。

    INFO

    一般用在粗粒度層級上,強調應用程式的運行過程。

    DEBUG

    一般用於調試應用程式時,對診斷問題提供協助。

    TRACE

    用於對程式追蹤,輸出程式運行中的變數,顯示執行的流程。

    ALL

    列印所有的日誌記錄。

說明

一個Logger可以對應多個Appender,一個Appender只能對應一個Layout。

例如某電商公司,希望通過分析使用者行為習慣資料(例如使用者登入方式、上線的時間點及時間長度、瀏覽頁面、頁面停留時間、平均下單時間、消費水平等)、平台穩定性、系統報錯、資料安全性等資訊擷取平台的最佳營運方案。針對此需求,Log Service提供一站式資料擷取與分析功能,協助客戶儲存並分析日誌。

Log Service採集到的日誌範例如下所示。

  • 記錄使用者登入行為的日誌

    level:  INFO  
    location:  com.aliyun.log4jappendertest.Log4jAppenderBizDemo.login(Log4jAppenderBizDemo.java:38)
    message:  User login successfully. requestID=id4 userID=user8  
    thread:  main  
    time:  2022-01-26T15:31+0000
  • 記錄使用者購買行為的日誌

    level:  INFO  
    location:  com.aliyun.log4jappendertest.Log4jAppenderBizDemo.order(Log4jAppenderBizDemo.java:46)
    message:  Place an order successfully. requestID=id44 userID=user8 itemID=item3 amount=9  
    thread:  main  
    time:  2022-01-26T15:31+0000

操作步驟

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  4. 輸入查詢和分析語句,然後單擊最近15分鐘,設定查詢和分析的時間範圍。

    更多資訊,請參見步驟一:輸入查詢和分析語句

    • 統計最近1小時發生錯誤最多的3個位置。

      level: ERROR | select location ,count(*) as count GROUP BY  location  ORDER BY count DESC LIMIT 3
    • 統計最近15分鐘各種記錄層級的日誌條數。

      * | select level ,count(*) as count GROUP BY level ORDER BY count DESC
    • 統計最近1小時登入次數最多的三個使用者。

      login | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, count(*) as count GROUP BY userID ORDER BY count DESC LIMIT 3
    • 統計最近15分鐘每個使用者的付款總額。

      order | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, sum(cast(regexp_extract(message, 'amount=(?<amount>[a-zA-Z\d]+)', 1) AS double)) AS amount GROUP BY userID