通过Alibaba Cloud Log Log4j Appender采集日志到阿里云日志服务

概述

Log4j是Apache的一个开放源代码项目,通过使用Log4j,您可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;您也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,您能够更加细致地控制日志的生成过程。本文主要演示如何在自己的应用程序中集成Log4j Appender将日志导入到阿里云日志服务Project。

操作步骤

1、添加Maven依赖,pom.xml

    <dependencies>
        <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-logback-appender</artifactId>
            <version>0.1.15</version>
        </dependency>
    </dependencies>

2、resources下面创建:logback.xml

<configuration>
    <!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>

    <appender name="aliyundemo" class="com.aliyun.openservices.log.logback.LoghubAppender">
        <!--必选项-->
        <!-- 账号及网络配置 -->
        <endpoint>http://cn-******.log.aliyuncs.com</endpoint>
        <accessKeyId>******</accessKeyId>
        <accessKeySecret>********</accessKeySecret>

        <!-- sls 项目配置 -->
        <project>*****</project>
        <logStore>******</logStore>
        <!--必选项 (end)-->

        <!--&lt;!&ndash; 可选项 &ndash;&gt;-->
        <topic>topic8</topic>
        <!--<source>source1</source>-->

        <!-- 可选项 详见 '参数说明'-->
        <totalSizeInBytes>104857600</totalSizeInBytes>
        <maxBlockMs>60000</maxBlockMs>
        <ioThreadCount>8</ioThreadCount>
        <batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
        <batchCountThreshold>4096</batchCountThreshold>
        <lingerMs>2000</lingerMs>
        <retries>10</retries>
        <baseRetryBackoffMs>100</baseRetryBackoffMs>
        <maxRetryBackoffMs>100</maxRetryBackoffMs>

        <!--LoghubAppender输出日志的级别-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 打印WARN,ERROR级别的日志 -->
            <level>WARN</level>
        </filter>

        <mdcFields>THREAD_ID,MDC_KEY</mdcFields>
    </appender>

    <!-- 可用来获取StatusManager中的状态 -->
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>

    <!--等级由低到高:debug<info<warn<Error<Fatal;-->
    <!--决定最终采集日志的级别-->
    <root>
        <level value="DEBUG"/>
        <!--<level value="WARN"/>-->
        <!--<level value="ERROR"/>-->
        <appender-ref ref="aliyundemo"/>
    </root>
</configuration>

注意:

1、具体的配置参数细节解释参考:Log4j Appender
2、此处的配置文件名称务必定义为:logback.xml,不要定义为logback-example.xml,官方示例:aliyun-log-logback-appender使用了上面的配置文件命名方式,很多用户配置完成后,程序运行没有问题,但是发现日志实际并未写入日志库,就是因为实际的配置文件并未被读取。具体原因如下:

  • 通过查询log4j读取配置文件的源码:ContextInitializer,可以看出其读取的配置文件的名称是固定的。

3、当然也可以指定自定义名称的配置文件,参考:LOGBACK手动加载配置文件

3、main.class

import ch.qos.logback.core.joran.spi.JoranException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import java.io.IOException;

public class demo {
    private static final Logger LOGGER = LoggerFactory.getLogger(demo.class);

    public static void main(String[] args) throws IOException, JoranException {
        // 指定配置文件
//     LogBackConfigLoader.load(demo.class.getClassLoader().getResource("logback-spring.xml").getPath());

        MDC.put("MDC_KEY","MDC_VALUE");
        MDC.put("THREAD_ID", String.valueOf(Thread.currentThread().getId()));

//        等级由低到高:debug<info<warn<Error<Fatal;
        LOGGER.trace("trace log1");
        LOGGER.debug("debug log1");
        LOGGER.info("info log1");
        LOGGER.warn("warn log1");
        LOGGER.error("error log1");
    }
}

4、项目结构
通过Alibaba Cloud Log Log4j Appender采集日志到阿里云日志服务

5、测试结果
通过Alibaba Cloud Log Log4j Appender采集日志到阿里云日志服务

更多参考

Log4j Appender
logback的使用和logback.xml详解
日志级别的选择:Debug、Info、Warn、Error还是Fatal

上一篇:阿里云物联网平台NTP服务 JAVA 示例参考


下一篇:Chrome 图片解码与 Image Decoding Hint