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; ...
随机推荐
- talent-aio源码阅读小记(一)
近来在oschina上看到一个很火的java 即时通讯项目talent-aio,恰巧想了解一下这方面的东西,就阅读了一下项目的源码,这里对自己阅读源码后的一些心得体会做一下备忘,也希望能够对其他项目中 ...
- python面向对象的反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) getattr # 根据字符串的形式,去对象中找成员.hasattr # 根据字符 ...
- 页面引入外部字体ttf,如何提取所需要的ttf字体或者加载过慢的解决方法-1127更新
最近几天编写手机端的页面之后,文中需要华文行楷字体,在网上下载后,引入到了自己的前端页面,以为没有什么事了,继续码代码 @font-face { font-family:huawen; src: ur ...
- CentOS 7.X 设置系统时间
在CentOS 6版本,时间设置有date.hwclock命令, 硬件时钟和系统时钟 (1) 硬件时钟 RTC(Real-Time Clock)或CMOS时钟,一般在主板上靠电池供电,服务器断电后也会 ...
- DNSSec
Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...
- 【Regularization】林轩田机器学习基石
正则化的提出,是因为要解决overfitting的问题. 以Linear Regression为例:低次多项式拟合的效果可能会好于高次多项式拟合的效果. 这里回顾上上节nonlinear transf ...
- python-压缩解压
压缩解压包 #导入模块 import zipfile #新建压缩包并将db与ooo.xml压缩到文件中 z = zipfile.ZipFile('laxi.zip','w') z.write('db' ...
- 原始套接字--icmp相关
icmp请求 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <uni ...
- git使用及一些配置、问题
安装https://git-for-windows.github.io/ 一.绑定用户名.邮件地址 git config --global user.name "Your Name" ...
- nyoj 题目737 合并石子(一)
石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的 ...