log4j2 扩展日志级别,支持将系统日志与业务处理日志拆分
项目中,有时候需要对系统中已处理的一些业务数据日志进行提取分析,通常log4j默认提供的日志级别可能不够用,这时候我们就需要对日志级别进行扩展,以满足我们的需求.
本文就简单介绍一下log4j2的日志级别扩展,直接上代码:
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.spi.AbstractLogger;
import org.apache.logging.log4j.spi.ExtendedLoggerWrapper;
import org.apache.logging.log4j.util.MessageSupplier;
import org.apache.logging.log4j.util.Supplier; /**log4j2日志扩展,支持业务日志
* 业务日志为最高级别
* 使用方式与扩展前基本相同:</br>
* 使用CustomLogger log=CustomLogger.getLogger(loggerName);</br>
* 替代原来的:Logger log=LogManager.getLogger(loggerName);</br>
* 记录用于数据分析的业务日志 使用log.business(msg);</br>
* @author jessezeng
*
*/
public final class CustomLogger extends ExtendedLoggerWrapper {
private static final long serialVersionUID = 103418572168532L;
private final ExtendedLoggerWrapper logger; private static final String FQCN = CustomLogger.class.getName();
private static final Level BUSINESS = Level.forName("BUSINESS", 50); private CustomLogger(final Logger logger) {
super((AbstractLogger) logger, logger.getName(), logger.getMessageFactory());
this.logger = this;
} public static CustomLogger getLogger() {
final Logger wrapped = LogManager.getLogger();
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final Class<?> loggerName) {
final Logger wrapped = LogManager.getLogger(loggerName);
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final Class<?> loggerName, final MessageFactory factory) {
final Logger wrapped = LogManager.getLogger(loggerName, factory);
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final Object value) {
final Logger wrapped = LogManager.getLogger(value);
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final Object value, final MessageFactory factory) {
final Logger wrapped = LogManager.getLogger(value, factory);
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final String name) {
final Logger wrapped = LogManager.getLogger(name);
return new CustomLogger(wrapped);
} public static CustomLogger getLogger(final String name, final MessageFactory factory) {
final Logger wrapped = LogManager.getLogger(name, factory);
return new CustomLogger(wrapped);
} public void business(final Marker marker, final Message msg) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msg, (Throwable) null);
} public void business(final Marker marker, final Message msg, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msg, t);
} public void business(final Marker marker, final Object message) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, (Throwable) null);
} public void business(final Marker marker, final Object message, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, t);
} public void business(final Marker marker, final String message) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, (Throwable) null);
} public void business(final Marker marker, final String message, final Object... params) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, params);
} public void business(final Marker marker, final String message, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, t);
} public void business(final Message msg) {
logger.logIfEnabled(FQCN, BUSINESS, null, msg, (Throwable) null);
} public void business(final Message msg, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, null, msg, t);
} public void business(final Object message) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, (Throwable) null);
} public void business(final Object message, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, t);
} public void business(final String message) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, (Throwable) null);
} public void business(final String message, final Object... params) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, params);
} public void business(final String message, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, t);
} public void business(final Supplier<?> msgSupplier) {
logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, (Throwable) null);
} public void business(final Supplier<?> msgSupplier, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, t);
} public void business(final Marker marker, final Supplier<?> msgSupplier) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, (Throwable) null);
} public void business(final Marker marker, final String message, final Supplier<?>... paramSuppliers) {
logger.logIfEnabled(FQCN, BUSINESS, marker, message, paramSuppliers);
} public void business(final Marker marker, final Supplier<?> msgSupplier, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, t);
} public void business(final String message, final Supplier<?>... paramSuppliers) {
logger.logIfEnabled(FQCN, BUSINESS, null, message, paramSuppliers);
} public void business(final Marker marker, final MessageSupplier msgSupplier) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, (Throwable) null);
} public void business(final Marker marker, final MessageSupplier msgSupplier, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, marker, msgSupplier, t);
} public void business(final MessageSupplier msgSupplier) {
logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, (Throwable) null);
} public void business(final MessageSupplier msgSupplier, final Throwable t) {
logger.logIfEnabled(FQCN, BUSINESS, null, msgSupplier, t);
}
}
代码实际上很简单,需要注意的地方是:
26 private static final Level BUSINESS = Level.forName("BUSINESS", ); // 50用于指定级别
注意上面红色的数字,这个数字用于指定级别的高低,可以根据自己的需要定义不同的值,log4j2中默认级别值可以参考如下:
OFF(0),
FATAL(100),
ERROR(200),
WARN(300),
INFO(400),
DEBUG(500),
TRACE(600),
ALL(Integer.MAX_VALUE);
log4j2 扩展日志级别,支持将系统日志与业务处理日志拆分的更多相关文章
- 使用log4j2分离系统日志与业务日志
前一篇文章介绍了log4j2 扩展日志级别,支持将系统日志与业务处理日志拆分,现在介绍一下通过日志级别将系统日志与业务日志分类,要达到这个目的很容易,只需要配置一下log4j的xml文件: <? ...
- log4j2和logback动态修改日志级别工具类
工作中,在排查线上问题时,有以下场景在不重新部署或重启服务的情况下,需要动态调整线上日志级别 1.线上有些日志打印过多干扰有用的日志,需要动态修改线上日志记录器的打印日志级别,调高一些日志级别,打印出 ...
- java log4j基本配置及日志级别配置详解
java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾 ...
- SpringBoot实用小技巧之动态设置SpringBoot日志级别
有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下.此时如果线上想查看调试级别 ...
- Spring Boot 测试时的日志级别
1.概览 该教程中,我将向你展示:如何在测试时设置spring boot 日志级别.虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测试,选择正确的日志级别是非常重要的. 2.日志级别的重要性 ...
- SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出
写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...
- Log4j配置记录(特定java包/类的日志级别控制)
最近使用log4j,关于日志级别的如何配置生效百思不得其解,花了些时间,误打误撞终于整了,记录一下,备忘. 注意: 1.图中的2(log4j.logger.com.taobao)限制级别最高,它直接指 ...
- Log4j.properties 属性详解以及 LOG4J日志级别详解
转自:https://blog.csdn.net/lovely0903jpp/article/details/82261607 假如项目的生产环境上增加请求以及响应信息的打印,这个时候,对于新手来说, ...
- springboot中动态修改logback日志级别
springboot中动态修改logback日志级别 在spring boot中使用logback日志时,项目运行中,想要修改日志级别. 代码如下: import org.slf4j.Logger; ...
随机推荐
- android IPC 进程间通讯
参考资料: http://blog.csdn.net/birdsaction/article/details/39451849 在这里我说一下学习技术的方法,别人的博客,别人的东西,再简单,自己没有写 ...
- 运用Pascal来破坏DLL的一个实例
运用Pascal来破坏DLL文件的一个实例 关于Pascal静态调用和动态的调用DLL的学习您可以看Delphi/Lazarus栏目. Uses Dos; {调用DOS库} Const Root='C ...
- thinkphp3.1.3验证码优化
现状 thinkphp3.1.3版本中的验证码字符分布不均匀,在自定义宽高时很明显. 调用代码: Image::buildImageVerify(6, 5, 'png', 150, 50); 生成的验 ...
- 【 Logistic Regression 】林轩田机器学习基石
这里提出Logistic Regression的角度是Soft Binary Classification.输出限定在0~1之间,用于表示可能发生positive的概率. 具体的做法是在Linear ...
- Javascript在浏览器中的加载顺序详解!
现在前端用javascript用的比较多,当然真心的说这个语言是一个非常业余的语言,但是用的人很多,所以也比较火.今天想完成一个javascript外部文件自动加载的设计(类似于java或者php的i ...
- 利用binlog server及Xtrabackup备份集来恢复误删表(drop)
Preface Today I'm gonna test how to rescue a dropped table from binlog server based on a ful ...
- Python 字符串换行的几种方式
第一种: x0 = '<?xml version="1.0"?>' \ '<ol>' \ ' <li><a href="/pyt ...
- Python SimpleHTTPServer简单HTTP服务器
搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目 ...
- 剑指offer-从尾到头打印链表03
class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code ...
- hnust 神奇的序列
问题 E: 神奇的序列 时间限制: 1 Sec 内存限制: 128 MB提交: 635 解决: 84[提交][状态][讨论版] 题目描述 Aurora在南宁发现了一个神奇的序列,即对 ...