Log4j自定义日志级别

使用场景:为了跟踪老项目中多过程的大量数据流转请况,自定义生成需要的JSON格式日志,并通过kafka–ES(go实现类ELK方式,本文未展示)实现数据流转情况跟踪分析。
(本文展示的是处理过后的基本实现代码;水平有限,供交流分享,如有错误,还请指教,谢谢~~)

将此功能封装到了common公共模块,供其他功能模块调用

	<dependency>
			<groupId>project</groupId>
			<artifactId>project-common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
	</dependency>

代码思路:
1=>自定义CustomLogFilter过滤器
2=>自定义CustomLevel日志级别
3=>自定义CustomLogAppender附加规则
4=>自定义RollingCalendar日志时间格式
5=>自定义CustomLog日志类实现类
6=>项目依赖端log输出

1.自定义CustomLogFilter过滤器

package com.common.filter;

import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;

/**
 * <pre>
 * 对象功能:自定义数据日志过滤器
 * </pre>
 */
public class CustomLogFilter extends Filter {

    boolean acceptOnMatch = false;
    private String levelMin;
    private String levelMax;

    public String getLevelMin() {
        return levelMin;
    }

    public void setLevelMin(String levelMin) {
        this.levelMin = levelMin;
    }

    public String getLevelMax() {
        return levelMax;
    }

    public void setLevelMax(String levelMax) {
        this.levelMax = levelMax;
    }

    public boolean isAcceptOnMatch() {
        return acceptOnMatch;
    }

    public void setAcceptOnMatch(boolean acceptOnMatch) {
        this.acceptOnMatch = acceptOnMatch;
    }

    @Override
    public int decide(LoggingEvent lgEvent) {
        int inputLevel = lgEvent.getLevel().toInt();
        if (inputLevel >= getLevel(levelMin) && inputLevel <= getLevel(levelMax)) {
            return 0;
        }
        return -1;
    }

    private int getLevel(String level) {
        level = level.toUpperCase();
        if (level.equals("DATADETAIL")) {
            return LevelType.DATADETAIL.getType();
        }
        if (level.equals("OFF")) {
            return LevelType.OFF.getType();
        }
        if (level.equals("FATAL")) {
            return LevelType.FATAL.getType();
        }
        if (level.equals("ERROR")) {
            return LevelType.ERROR.getType();
        }
        if (level.equals("INFO")) {
            return LevelType.INFO.getType();
        }
        if (level.equals("WARN")) {
            return LevelType.WARN.getType();
        }
        if (level.equals("DEBUG")) {
            return LevelType.DEBUG.getType();
        }
        if (level.equals("ALL")) {
            return LevelType.ALL.getType();
        }
        return LevelType.OFF.getType();
    }

    private static enum LevelType {

        OFF(2147483647),

        FATAL(50000),

        ERROR(40000),

        WARN(30000),

        INFO(20000),

        DEBUG(10000),

        ALL(-2147483648),

        CUSTOM(25000);

        int type;

        public int getType() {
            return type;
        }

        private LevelType(int type) {
            this.type = type;
        }
    }
}

2.自定义CustomLevel日志级别

package com.common.log;

import org.apache.log4j.Level;
import org.apache.log4j.net.SyslogAppender;
/**
 * <pre>
 * 对象功能:定义日志级别
 * </pre>
 */
public interface CustomLevel{
    /**
     * 自定义级别名称,以及级别范围
     */
    public static final Level CUSTOM= new CustomLog.CustomLogLevel(25000,"CUSTOM", SyslogAppender.LOG_LOCAL0);
}

3.自定义CustomLogAppender附加器

package com.common.log;

import org.apache.log4j.FileAppender;
import org.apache.log4j.Priority;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.log4j.Layout;
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.spi.LoggingEvent;

/**
 * <pre>
 * 对象功能:自定义Appender,复写DailyRollingFileAppender
 * </pre>
 */
public class CustomLogAppender 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值