用代码配置log4j相关参数
在使用log4j将日志写到kafka时碰到一个问题,就是KafkaLog4jAppender出现异常后的日志处理
直接使用log会将日志写到kafka,最终死循环,所以以上的类中如果出现异常,可以将日志写到本地文件中
可以使用两种方式:
- 在log4j.properties中单独配置这个类的输出到本地
- 在代码中直接实现
本文记录第二种方式,主要功能点为使用代码方式配置Log4j 的logger
具体代码如下:
注意,相关的类都是log4j的,不是slf4j的
public class KafkaLog4jAppender extends AppenderSkeleton { private static final Logger log = Logger.getLogger(KafkaLog4jAppender.class.getName()); // private static final Logger log = LoggerFactory.getLogger(KafkaLog4jAppender.class.getName()); }
@Override public void activateOptions() { //log4j单独配置,将当前类中错误信息输出到文件中 log.removeAllAppenders();//移除所有的appender log.setLevel(Level.WARN);//设置日志级别 log.setAdditivity(false);//移除继承关系 // 生成新的Appender DailyRollingFileAppender appender = new DailyRollingFileAppender(); PatternLayout layout = new PatternLayout(); String conversionPattern = "%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n"; layout.setConversionPattern(conversionPattern); appender.setLayout(layout); // log输出路径 appender.setFile("d://temp//kafka.error"); appender.setDatePattern("'.'yyyy-MM-dd'.log'"); appender.setEncoding("UTF-8"); // 适用当前配置 appender.activateOptions(); // 将新的Appender加到Logger中 log.addAppender(appender); }
在下面就可以直接使用了
producer.send(record, new Callback() { @Override public void onCompletion(RecordMetadata metadata, Exception exception) { if (!Objects.isNull(exception)) { log.warn("kafka异步日志发送失败,消息内容:" + message); exception.printStackTrace(); } } });
效果如图
另附一个Log4j的配置文件
# LOG4J配置 log4j.rootCategory=info,stdout,kafka # 控制台输出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n #error级别的日志输出到单独的文件 #log4j.logger.error=errorfile # error日志输出 log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.errorfile.file=d:/temp/test.error.log log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd log4j.appender.errorfile.Threshold=ERROR log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n ## appender kafka log4j.appender.kafka=com.xiang.demo.log4j.log4jdemo.config.KafkaLog4jAppender log4j.appender.kafka.topic=kafka_log #log4j.appender.kafka.acks=0 log4j.appender.kafka.brokerList=192.168.21.215:9092 #log4j.appender.kafka.compressionType=none #是否同步 #log4j.appender.kafka.syncSend=false log4j.appender.kafka.layout=org.apache.log4j.PatternLayout log4j.appender.kafka.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n ## appender rabbitmq #log4j.appender.rabbitmq=com.xiang.demo.log4j.log4jdemo.config.RabbitmqLog4jAppender #log4j.appender.rabbitmq.host= #log4j.appender.rabbitmq.username= #log4j.appender.rabbitmq.password= #log4j.appender.rabbitmq.virtualhost=/log #log4j.appender.rabbitmq.qububname=log4j_log_rabbitmq #log4j.appender.rabbitmq.layout=org.apache.log4j.PatternLayout #log4j.appender.rabbitmq.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n ## kafka包下的日志配置 异常只输出到本地,不输入到kafka #取消kafka的日志继承关系 log4j.additivity.org.apache.kafka=false log4j.logger.org.apache.kafka=warn,stdout,kfkerrfile log4j.additivity.com.xiang.demo.log4j.log4jdemo.config.KafkaLog4jAppender=false log4j.logger.com.xiang.demo.log4j.log4jdemo.config.KafkaLog4jAppender=warn,kfkapderrfile log4j.appender.kfkapderrfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.kfkapderrfile.file=d:/temp/kafka.appender.error log4j.appender.kfkapderrfile.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.kfkapderrfile.layout=org.apache.log4j.PatternLayout log4j.appender.kfkapderrfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n log4j.appender.kfkerrfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.kfkerrfile.file=d:/temp/kafka.error log4j.appender.kfkerrfile.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.kfkerrfile.layout=org.apache.log4j.PatternLayout log4j.appender.kfkerrfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
相关推荐
chw0 2020-11-04
sdaq 2020-07-26
MrLiar 2020-07-07
sdaq 2020-06-16
丨Fanny丨Cri 2020-06-13
CXC0 2020-06-08
MrLiar 2020-06-04
丨Fanny丨Cri 2020-06-03
丨Fanny丨Cri 2020-05-17
JavaWinner 2020-05-10
JavaWinner 2020-05-04
CXC0 2020-04-20
CXC0 2020-04-10
丨Fanny丨Cri 2020-02-18
MrLiar 2020-02-16
CXC0 2020-02-09