java自定义日志级别_自定义log4j日志级别
因为项目中需要输出一些特别的日志来做数据统计。如果开启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日志级别相关推荐
- linux上设置了log4j没有产生日志文件_关于 log4j 升级到 log4j2 的小结
关于升级 jar 包等前提要求 删掉原先的 log4j-1.XX 等 jar 包 从 1.XX 升级到 2.XX 平稳升级需要的 jar 包,其中包括用 sl4j-1.7.25 (1.7.21 暂时也 ...
- java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...
EL的不足,由JSTL来加强 -> 自定义标签来实现. 1:自定义标签 1:自定义标签也是类. 2:让用户在JSP页面使用,不引用Java代码的情况下,调用Java代码. 2:标签开的类的继承 ...
- log4j中调试与错误日志分开_idea中log4j日志插件报错
visual studio code权威指南计算机 65.34元 包邮 (需用券) 去购买 > idea中log4j日志插件报错 在运行测试代码的时候,出现以下错误! 在 src/ main / ...
- linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法
log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...
- windows log日志分割_如何将日志记录到 Windows事件日志 中
每当出现一些未捕获异常时,操作系统都会将异常信息写入到 Windows 事件日志 中,可以通过 Windows 事件查看器 查看,如下图: 这篇文章将会讨论如何使用编程的方式将日志记录到 Window ...
- centos 日志审计_生产环境日志审计
日志审计,就是记录所有系统和相关用户行为的信息,并且可以自动分析,处理.在中小企业环境中,一般都是在单个服务器上记录日志,而大型企业的生产环境当中,会有专门的日志服务器乃至集群.本文通过sudo配合c ...
- 安装程序未能打开日志文件_桌面安装工具日志记录错误的说明 - Office 365 | Microsoft Docs...
Microsoft 365 桌面安装程序工具日志记录错误的说明 2020/9/8 适用于: Microsoft 365 本文内容 原始 KB 数: 2404500 当您尝试使用 Microsoft ...
- 网络日志管理_企业网络日志对具体对网络安全维护有哪些帮助?
网络日志管理对企业网络健康发展非常重要,众所周知,日志是判定企业网络中各类用户行为的重要依据,其不仅能排查出各类网络漏洞,还对企业网络合规性审计有很大帮助.因此网络日志的采集.分析.归档.留存成为目前 ...
- mysql修改数据库级别_设置数据库兼容级别的两种方法
兼容级别设置为 80 兼容级别设置为 90 影响的可能性 对于 FROM 子句中的锁提示,WITH 关键字始终是可选的. 但在一些例外情况中,仅当用 WITH 关键字指定表提示时,FROM 子句中才支 ...
最新文章
- 你知道 int(1) 和 int(10) 的区别吗?
- Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
- 如何搭建一个完整的手机直播系统源码?
- h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
- mac地址容量的作用_S6520X+MAC地址容量检查命令
- 坐标转换 计算机图形学_计算机图形学的转换类型
- rpm mysql 忘记密码_mysql密码忘记该怎么办?
- Oracle数据库表中字段顺序的修改方法
- STM32学习笔记之一(初窥STM32)
- 8,888+ 字,彻底征服 Spring AOP!
- 最大对称字符串的长度
- 解决UE4官方文档C++API查询慢问题
- 《华为交换机学习指南》学习笔记·一
- 让RTL8187无线网卡在linux 2.6.28内核支持aircrack-ng注入。
- JAVA 实现高级计算器程序
- 【Python】爬取贝壳网深圳二手房数据
- 5G NR 随机接入过程(2)
- php怎么把图片设置为背景,ppt怎么把图片设为背景
- 均线黄金交叉的不同周期分类详解
- /usr/local/bin/zsh没有文件或目录问题
热门文章
- exec和source命令的区别
- 系统中多种隐藏超级用户添加方法第1/2页
- 使用FindAncestor查找方式绑定且不需要使用datacontext
- 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
- java 多线程 day12 读写锁
- java之yield(),sleep(),wait()区别详解
- 4.Hibernate O/R 映射
- DataGridView显示数据库数据(一)
- delphi 执行一个外部程序,当外部程序结束后言主程序立即响应
- 如何设置Winform控件的ClientRectangle