日志打印是每个程序必须具备的基本功能,用于方便问题排查及恢复现场。然而日志的用途不仅仅局限于此。
可以通过日志打印做一些额外的事情,比如说,每一条符合要求的日志需要存储到阿里云日志服务上。
做这个事情,前提还不能影响程序的原本的逻辑,也不能给程序增加额外的负担。
这个时候,Log4j的Appender就是比较好选择。
看示例:
package com.longlong.log.demo;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogDemo {
private static final Logger logger = Logger.getLogger(LogDemo.class);
public static void main(String[] args) {
PropertyConfigurator.configure("C:/Temp/demo_log4j.conf");
logger.info("hello, this is my first demo for log4j appender");
}
}
package com.longlong.log.log;
import org.apache.log4j.spi.LoggingEvent;
public class LogCenterService extends org.apache.log4j.AppenderSkeleton {
public LogCenterService() {
}
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(LoggingEvent event) {
String level = event.getLevel().toString();
String msg = event.getRenderedMessage();
System.out.println("LogCenterService -> log out : level = " + level + ", msg = " + msg);
//TODO 调用阿里云日志服务的API接口上传日志。
}
}
配置文件:
log4j.rootLogger = info, stdout, logcenter
#stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d %5p %c{1}:%3L - %m%n
log4j.appender.logcenter = com.longlong.log.log.LogCenterService
示例就展示完了,很简单。看看结果:
2018-04-18 17:42:17,380 INFO LogDemo: 13 - hello, this is my first demo for log4j appender
LogCenterService -> log out : level = INFO, msg = hello, this is my first demo for log4j appender