项目中,有时候需要对系统中已处理的一些业务数据日志进行提取分析,通常log4j默认提供的日志级别可能不够用,这时候我们就需要对日志级别进行扩展,以满足我们的需求.
本文就简单介绍一下log4j2的日志级别扩展,直接上代码:
1 import org.apache.logging.log4j.Level; 2 import org.apache.logging.log4j.LogManager; 3 import org.apache.logging.log4j.Logger; 4 import org.apache.logging.log4j.Marker; 5 import org.apache.logging.log4j.message.Message; 6 import org.apache.logging.log4j.message.MessageFactory; 7 import org.apache.logging.log4j.spi.AbstractLogger; 8 import org.apache.logging.log4j.spi.ExtendedLoggerWrapper; 9 import org.apache.logging.log4j.util.MessageSupplier; 10 import org.apache.logging.log4j.util.Supplier; 11 12 /**log4j2日志扩展,支持业务日志 13 * 业务日志为最高级别 14 * 使用方式与扩展前基本相同:</br> 15 * 使用CustomLogger log=CustomLogger.getLogger(loggerName);</br> 16 * 替代原来的:Logger log=LogManager.getLogger(loggerName);</br> 17 * 记录用于数据分析的业务日志 使用log.business(msg);</br> 18 * @author jessezeng 19 * 20 */ 21 public final class CustomLogger extends ExtendedLoggerWrapper { 22 private static final long serialVersionUID = 103418572168532L; 23 private final ExtendedLoggerWrapper logger; 24 25 private static final String FQCN = CustomLogger.class.getName(); 26 private static final Level BUSINESS = Level.forName("BUSINESS", 50); 27 28 private CustomLogger(final Logger logger) { 29 super((AbstractLogger) logger, logger.getName(), logger.getMessageFactory()); 30 this.logger = this; 31 } 32 33 public static CustomLogger getLogger() { 34 final Logger wrapped = LogManager.getLogger(); 35 return new CustomLogger(wrapped); 36 } 37 38 public static CustomLogger getLogger(final Class<?> loggerName) { 39 final Logger wrapped = LogManager.getLogger(loggerName); 40 return new CustomLogger(wrapped); 41 } 42 43 public static CustomLogger getLogger(final Class<?> loggerName, final MessageFactory factory) { 44 final Logger wrapped = LogManager.getLogger(loggerName, factory); 45 return new CustomLogger(wrapped); 46 } 47 48 public static CustomLogger getLogger(final Object value) { 49 final Logger wrapped = LogManager.getLogger(value); 50 return new CustomLogger(wrapped); 51 } 52 53 public static CustomLogger getLogger(final Object value, final MessageFactory factory) { 54 final Logger wrapped = LogManager.getLogger(value, factory); 55 return new CustomLogger(wrapped); 56 } 57 58 public static CustomLogger getLogger(final String name) { 59 final Logger wrapped = LogManager.getLogger(name); 60 return new CustomLogger(wrapped); 61 } 62 63 public static CustomLogger getLogger(final String name, final MessageFactory factory) { 64 final Logger wrapped = LogManager.getLogger(name, factory); 65 return new CustomLogger(wrapped); 66 } 67 68 public void business(final Marker marker, final Message msg) { 69 logger.logIfEnabled(FQCN, BUSINESS, marker, msg, (Throwable) null); 70 } 71 72 public void business(final Marker marker, final Message msg, final Throwable t) { 73 logger.logIfEnabled(FQCN, BUSINESS, marker, msg, t); 74 } 75 76 public void business(final Marker marker, final Object message) { 77 logger.logIfEnabled(FQCN, BUSINESS, marker, message, (Throwable) null); 78 } 79 80 public void business(final Marker marker, final Object message, final Throwable t) { 81 logger.logIfEnabled(FQCN, BUSINESS, marker, message, t); 82 } 83 84 public void business(final Marker marker, final String message) { 85 logger.logIfEnabled(FQCN, BUSINESS, marker, message, (Throwable) null); 86 } 87 88 public void business(final Marker marker, final String message, final Object... params) { 89 logger.logIfEnabled(FQCN, BUSINESS, marker, message, params); 90 } 91 92 public void business(final Marker marker, final String message, final Throwable t) { 93 logger.logIfEnabled(FQCN, BUSINESS, marker, message, t); 94 } 95 96 public void business(final Message msg) { 97 logger.logIfEnabled(FQCN, BUSINESS, null, msg, (Throwable) null); 98 } 99 100 public void business(final Message msg, final Throwable t) { 101 logger.logIfEnabled(FQCN, BUSINESS, null, msg, t); 102 } 103 104 public void business(final Object message) { 105 logger.logIfEnabled(FQCN, BUSINESS, null, message, (Throwable) null); 106 } 107 108 public void business(final Object message, final Throwable t) { 109 logger.logIfEnabled(FQCN, BUSINESS, null, message, t); 110 } 111 112 public void business(final String message) { 113 logger.logIfEnabled(FQCN, BUSINESS, null, message, (Throwable) null); 114 } 115 116 public void business(final String message, final Object... params) { 117 logger.logIfEnabled(FQCN, BUSINESS, null, message, params); 118 } 119 120 public void business(final String message, final Throwable t) { 121 logger.logIfEnabled(FQCN, BUSINESS, null, message, t); 122 } 123 124 public void business(final Supplier<?> msgSupplier) { 125 logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, (Throwable) null); 126 } 127 128 public void business(final Supplier<?> msgSupplier, final Throwable t) { 129 logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, t); 130 } 131 132 public void business(final Marker marker, final Supplier<?> msgSupplier) { 133 logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, (Throwable) null); 134 } 135 136 public void business(final Marker marker, final String message, final Supplier<?>... paramSuppliers) { 137 logger.logIfEnabled(FQCN, BUSINESS, marker, message, paramSuppliers); 138 } 139 140 public void business(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) { 141 logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, t); 142 } 143 144 public void business(final String message, final Supplier<?>... paramSuppliers) { 145 logger.logIfEnabled(FQCN, BUSINESS, null, message, paramSuppliers); 146 } 147 148 public void business(final Marker marker, final MessageSupplier msgSupplier) { 149 logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, (Throwable) null); 150 } 151 152 public void business(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) { 153 logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, t); 154 } 155 156 public void business(final MessageSupplier msgSupplier) { 157 logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, (Throwable) null); 158 } 159 160 public void business(final MessageSupplier msgSupplier, final Throwable t) { 161 logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, t); 162 } 163 }
代码实际上很简单,需要注意的地方是:
26 private static final Level BUSINESS = Level.forName("BUSINESS", 50); // 50用于指定级别
注意上面红色的数字,这个数字用于指定级别的高低,可以根据自己的需要定义不同的值,log4j2中默认级别值可以参考如下:
1 OFF(0), 2 3 4 FATAL(100), 5 6 7 ERROR(200), 8 9 10 WARN(300), 11 12 13 INFO(400), 14 15 16 DEBUG(500), 17 18 19 TRACE(600), 20 21 22 ALL(Integer.MAX_VALUE);