コードでlog 4 j関連パラメータを構成する

4677 ワード

log 4 jを使用してkafkaにログを書き込む際に問題が発生したのは、KafkaLog 4 jAppenderに異常が発生した後のログ処理が直接logを使用するとkafkaにログが書き込まれ、最終的にデッドサイクルになるため、以上のクラスで異常が発生した場合、ローカルファイルにログを書き込むには2つの方法が使用できます.
  • log 4 j.propertiesでこのクラスの出力をローカル
  • に個別に構成する
  • は、コードにおいて
  • を直接実現する.
    本文は第2の方式を記録して、主な機能点はコード方式を使用してLog 4 jを配置するloggerの具体的なコードは以下の通りである.
    関連するクラスはlog 4 jでslf 4 jではありません
    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();
                        }
                    }
                });

    効果は図のようだ
    ログ4 jのプロファイルを添付
    # 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