概述
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