日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

采集Log4j日志

使用Log4j2記錄和管理Java應用的運行日志后,您可以使用Log4j2 Appender或Logtail將日志采集到日志服務,以便于后續的查詢分析。

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。

前提條件

  • 已創建Project和Logstore。更多信息,請參見管理Project管理Logstore

  • 如果使用Appender方式采集,則必須創建RAM用戶并授予日志服務Logstore的寫入權限,配置權限的步驟請參見配置權限助手

操作步驟

說明

本文以Java語言為示例,使用Log4j2版本進行演示。通過Log4j其他語言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語法和用法與在Java程序中一樣。

步驟一:在項目中添加Log4j2的配置文件

  1. maven工程中引入依賴。

    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.23.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.23.1</version>
      </dependency>
    </dependencies>
  2. 修改配置文件。

    默認會在classpath路徑下尋找配置文件,如果不存在則需要手動創建。下面以log4j2.xml為例,log4j2.xml中定義兩個Appender,分別輸出到控制臺和文件app.log中。定義根日志器的日志級別是error,輸出到控制臺。定義名為com.example.demo.log的日志器級別是warn,輸出到文件中。更多Log4j2配置方式,請參見官網Log4j – Configuring Log4j 2 (apache.org)

    <!-- status="WARN",設置Log4j 2自身的內部狀態,而不是應用程序的日志記錄,它用于在配置過程中捕獲和報告潛在問題。 -->
    <Configuration status="WARN">
        <!-- 定義兩個輸出日志的目標(Appender)  start  -->
        <Appenders>
            <!-- 定義了一個名為"Console"的控制臺輸出Appender,日志將被打印到系統標準輸出。 -->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
            <!--  定義了一個名為"MyFile"的文件輸出Appender,日志會被寫入到”app.log“這個文件中。-->
            <File name="MyFile" fileName="app.log">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/>
            </File>
        </Appenders>
        <!-- 定義兩個輸出日志的目標(Appender)  end  -->
    
        <!-- 配置日志記錄的行為(Logger)      start  -->
        <Loggers>
            <!-- 定義了名為com.example.demo.log的日志器,其級別設置為trace。它引用了"MyFile" Appender,即"com.example.demo.log" Logger會將trace及以上的日志會輸出到它自己的Appender("MyFile")。 -->
            <Logger name="com.example.demo.log" level="warn">
                <AppenderRef ref="MyFile" />
            </Logger>
            <!-- 定義了根日志器(Root Logger),其級別設置為error。它引用了"Console" Appender,即error及以上的日志會輸出到控制臺。 -->
            <Root level="error">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
        <!-- 配置日志記錄的行為(Logger)      end  -->
    </Configuration>
  3. 基本使用。

    編寫測試代碼,讀取定義好的Appender,進行日志輸出,代碼示例如下:

        public void logExampleDemo() {
            // 獲取名為 "com.example.demo.log" 的 Logger 實例
            Logger logger = LogManager.getLogger("com.example.demo.log");
    
            // 記錄不同級別的日志消息
            logger.trace("trace level");
            logger.debug("debug level");
            logger.info("info level");
            logger.warn("warn level");
            logger.error("error level");
            logger.fatal("fatal level");
        }
  4. 日志樣例輸出,如下所示。

    2024-05-28 13:37:16:295 CST [http-nio-8080-exec-8] TRACE com.example.demo.log - trace level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] DEBUG com.example.demo.log - debug level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] INFO  com.example.demo.log - info level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] WARN  com.example.demo.log - warn level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] ERROR com.example.demo.log - error level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] FATAL com.example.demo.log - fatal level

步驟二:采集Log4j日志到日志服務

說明
  • Log4j2 Appender采集是Log4j2內置的日志采集方式,對于已集成Log4j2的應用程序,只需進行簡單的配置,即可啟用Appender實時發送日志,無需寫入服務器的硬盤。適用于需要即時處理大量日志數據的大數據應用場景。

  • 使用Logtail采集需要在服務器上安裝Logtail組件,Logtail組件支持多種處理插件。

通過Log4j2 Appender采集Log4j日志

image
  1. Maven工程中引入依賴。

    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>2.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log-log4j2-appender</artifactId>
        <version>0.1.12</version>
    </dependency>
  2. 修改配置文件。

    以XML型配置文件log4j2.xml為例(不存在則在項目根目錄創建),配置Loghub相關的appender與Logger,例如:

    <Appenders>
        <Loghub name="Loghub"
                project="your project"
                logStore="your logStore"
                endpoint="your project endpoint"
                accessKeyId="your accessKey id"
                accessKeySecret="your accessKey secret"
                totalSizeInBytes="104857600"
                maxBlockMs="0"
                ioThreadCount="8"
                batchSizeThresholdInBytes="524288"
                batchCountThreshold="4096"
                lingerMs="2000"
                retries="10"
                baseRetryBackoffMs="100"
                maxRetryBackoffMs="100"
                topic="your topic"
                source="your source"
                timeFormat="yyyy-MM-dd'T'HH:mmZ"
                timeZone="UTC"
                ignoreExceptions="true">
            <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
        </Loghub>
    </Appenders>
    <Loggers>
        <Root level="warn">
            <AppenderRef ref="Loghub"/>
        </Root>
    </Loggers>

    其中project、logStore、endpoint、accessKeyId、accessKeySecret為必選參數,是必須填寫的。可選參數在不填寫的情況下,使用默認值。詳細說明如下:

    參數名

    參數含義

    project

    日志服務的Proiect名。

    logStore

    日志服務的Logstore名。

    endpoint

    日志服務的公網域名,獲取方式請參見服務接入點

    accessKeyId

    用戶身份識別ID,獲取方式,請參見創建AccessKey

    accessKeySecret

    用于驗證您擁有該AccessKey ID的密碼。獲取方式,請參見創建AccessKey

  3. 測試demo示例。

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class Log4j2AppenderExample {
    
        private static final Logger LOGGER = LogManager.getLogger(Log4j2AppenderExample.class);
    
        public static void main(String[] args) throws InterruptedException {
            LOGGER.trace("log4j2 trace log");
            LOGGER.debug("log4j2 debug log");
            LOGGER.info("log4j2 info log");
            LOGGER.warn("log4j2 warn log");
            LOGGER.error("log4j2 error log", new RuntimeException("Runtime Exception"));
            Thread.sleep(1000 * 5);
        }
    }

通過Logtail采集Log4j日志

image
重要

配置Logtail時需要提供文件路徑,請您保證應用程序日志可正常寫入到日志文件中。

  1. 安裝Logtail

    安裝Logtail的操作步驟,請按照安裝Logtail(Linux系統)完成。

  2. 配置Logtail采集配置

    日志服務提供配置向導,幫助您快速完成Logtail采集配置。操作步驟請按照采集主機文本日志完成。

步驟三:查看日志

  1. 登錄日志服務控制臺

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

    image

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

    image

  4. 查看日志數據是否上傳成功。在Logstore中查詢和分析日志,單擊消費預覽快速查看日志。

    image

  5. 查詢分析日志。

    重要

    日志上傳到Logstore后,必須創建索引才能進行查詢分析。配置索引,具體操作,請參見創建索引

    輸入查詢和分析語句,然后單擊最近15分鐘,設置查詢和分析的時間范圍。日志查詢結果如下所示。

    Appender方式采集

    日志樣式如下。

    level: ERROR
    location: com.aliyun.openservices.log.log4j.example.Log4jAppenderExample.main(Log4jAppenderExample.java:16)
    message: error log
    throwable: java.lang.RuntimeException: xxx
    thread: main
    time: 2018-01-02T03:15+0000
    log: 0 [main] ERROR com.aliyun.openservices.log.log4j.example.Log4jAppenderExample - error log
    __source__: xxx
    __topic__: yyy

    在Logstore頁面進行查詢分析。

    image

    使用Logtail方式采集

    在Logstore頁面進行查詢分析。

    image

    您可以輸入查詢語句用于日志數據的查看、簡單搜索和過濾。更多信息,請參見查詢和分析日志。簡單示例如下。

    • 統計最近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

相關文檔