概述
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)-->
<!--<!– 可选项 –>-->
<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、项目结构
5、测试结果
更多参考
Log4j Appender
logback的使用和logback.xml详解
日志级别的选择:Debug、Info、Warn、Error还是Fatal