因为项目中需要输出一些特别的日志来做数据统计。如果开启log4j提供的INFO日志级别,每天生成的日志文件就会变得越来越大。这样就得写个定

时任务来删除这个文件。为了只输出所需的日志级别,唯有自己定义一个log4j的级别,这样一来就好控制了,而且不需要对之前的代码进行修改。好了,废话

不多说,上代码:

1、CustomerLog

package common.log;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.net.SyslogAppender;

public class CustomerLog {

/**

* 继承Level

* @author Sevencm

*

*/

private static class CustomerLogLevel extends Level{

public CustomerLogLevel(int level, String levelStr, int syslogEquivalent) {

super(level, levelStr, syslogEquivalent);

}

}

/**

* 自定义级别名称,以及级别范围

*/

private static final Level CustomerLevel = new CustomerLogLevel(20050,"CUSTOMER",SyslogAppender.LOG_LOCAL0);

/**

* 使用日志打印logger中的log方法

*

* @param logger

* @param objLogInfo

*/

public static void customerLog(Logger logger,Object objLogInfo){

logger.log(CustomerLevel, objLogInfo);

}

}

2、Log Filter

package common.log;

import org.apache.log4j.spi.Filter;

import org.apache.log4j.spi.LoggingEvent;

public class CustomerLogFilter 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("CUSTOMER")){

return LevelType.CUSTOMER.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),

CUSTOMER(20050);

int type;

public int getType() {

return type;

}

private LevelType(int type) {

this.type = type;

}

}

}

3、配置文件的设置:

log4j:configuration SYSTEM "log4j.dtd">

4、测试类

package common.test;

import org.apache.log4j.Logger;

import common.log.CustomerLog;

public class Test {

private static final Logger logger = Logger.getLogger("customer");

public static void main(String[] args) {

CustomerLog.customerLog(logger, "自定义日志级别");

logger.info("哈哈哈哈");

}

}

5、运行结果:

2014-05-24 17:22:45,647 [CUSTOMER] customer - 自定义日志级别

2014-05-24 17:22:45,648 [INFO] customer - 哈哈哈哈

6、通过修改

上面的 Value 值来控制日志的输出级别。

另外说明常用log4j日志级别具体值:

public class Level extends Priority

implements Serializable {

public static final int TRACE_INT = 5000;

public static final Level OFF = new Level(2147483647, "OFF", 0);

public static final Level FATAL = new Level(50000, "FATAL", 0);

public static final Level ERROR = new Level(40000, "ERROR", 3);

public static final Level WARN = new Level(30000, "WARN", 4);

public static final Level INFO = new Level(20000, "INFO", 6);

public static final Level DEBUG = new Level(10000, "DEBUG", 7);

public static final Level TRACE = new Level(5000, "TRACE", 7);

}

像FATAL、ERROR这些级别,实际上对应一数字50000、40000

java自定义日志级别_自定义log4j日志级别相关推荐

  1. linux上设置了log4j没有产生日志文件_关于 log4j 升级到 log4j2 的小结

    关于升级 jar 包等前提要求 删掉原先的 log4j-1.XX 等 jar 包 从 1.XX 升级到 2.XX 平稳升级需要的 jar 包,其中包括用 sl4j-1.7.25 (1.7.21 暂时也 ...

  2. java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...

    EL的不足,由JSTL来加强  -> 自定义标签来实现. 1:自定义标签 1:自定义标签也是类. 2:让用户在JSP页面使用,不引用Java代码的情况下,调用Java代码. 2:标签开的类的继承 ...

  3. log4j中调试与错误日志分开_idea中log4j日志插件报错

    visual studio code权威指南计算机 65.34元 包邮 (需用券) 去购买 > idea中log4j日志插件报错 在运行测试代码的时候,出现以下错误! 在 src/ main / ...

  4. linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...

  5. windows log日志分割_如何将日志记录到 Windows事件日志 中

    每当出现一些未捕获异常时,操作系统都会将异常信息写入到 Windows 事件日志 中,可以通过 Windows 事件查看器 查看,如下图: 这篇文章将会讨论如何使用编程的方式将日志记录到 Window ...

  6. centos 日志审计_生产环境日志审计

    日志审计,就是记录所有系统和相关用户行为的信息,并且可以自动分析,处理.在中小企业环境中,一般都是在单个服务器上记录日志,而大型企业的生产环境当中,会有专门的日志服务器乃至集群.本文通过sudo配合c ...

  7. 安装程序未能打开日志文件_桌面安装工具日志记录错误的说明 - Office 365 | Microsoft Docs...

    Microsoft 365 桌面安装程序工具日志记录错误的说明 2020/9/8 适用于: Microsoft 365 本文内容 原始 KB 数:   2404500 当您尝试使用 Microsoft ...

  8. 网络日志管理_企业网络日志对具体对网络安全维护有哪些帮助?

    网络日志管理对企业网络健康发展非常重要,众所周知,日志是判定企业网络中各类用户行为的重要依据,其不仅能排查出各类网络漏洞,还对企业网络合规性审计有很大帮助.因此网络日志的采集.分析.归档.留存成为目前 ...

  9. mysql修改数据库级别_设置数据库兼容级别的两种方法

    兼容级别设置为 80 兼容级别设置为 90 影响的可能性 对于 FROM 子句中的锁提示,WITH 关键字始终是可选的. 但在一些例外情况中,仅当用 WITH 关键字指定表提示时,FROM 子句中才支 ...

最新文章

  1. 你知道 int(1) 和 int(10) 的区别吗?
  2. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  3. 如何搭建一个完整的手机直播系统源码?
  4. h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
  5. mac地址容量的作用_S6520X+MAC地址容量检查命令
  6. 坐标转换 计算机图形学_计算机图形学的转换类型
  7. rpm mysql 忘记密码_mysql密码忘记该怎么办?
  8. Oracle数据库表中字段顺序的修改方法
  9. STM32学习笔记之一(初窥STM32)
  10. 8,888+ 字,彻底征服 Spring AOP!
  11. 最大对称字符串的长度
  12. 解决UE4官方文档C++API查询慢问题
  13. 《华为交换机学习指南》学习笔记·一
  14. 让RTL8187无线网卡在linux 2.6.28内核支持aircrack-ng注入。
  15. JAVA 实现高级计算器程序
  16. 【Python】爬取贝壳网深圳二手房数据
  17. 5G NR 随机接入过程(2)
  18. php怎么把图片设置为背景,ppt怎么把图片设为背景
  19. 均线黄金交叉的不同周期分类详解
  20. /usr/local/bin/zsh没有文件或目录问题

热门文章

  1. exec和source命令的区别
  2. 系统中多种隐藏超级用户添加方法第1/2页
  3. 使用FindAncestor查找方式绑定且不需要使用datacontext
  4. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
  5. java 多线程 day12 读写锁
  6. java之yield(),sleep(),wait()区别详解
  7. 4.Hibernate O/R 映射
  8. DataGridView显示数据库数据(一)
  9. delphi 执行一个外部程序,当外部程序结束后言主程序立即响应
  10. 如何设置Winform控件的ClientRectangle