自定义log4j日志级别
转载自: http://blog.csdn.net/seven_cm/article/details/26849821
自定义log4j日志级别
参考了网上资料:http://www.360doc.com/content/13/0527/11/10825198_288498671.shtml
因为项目中需要输出一些特别的日志来做数据统计。如果开启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、配置文件的设置:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
- <appender name="Console" class="org.apache.log4j.ConsoleAppender">
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d [%p] %c{1} - %m%n" />
- </layout>
- <!--过滤器设置输出的级别 -->
- <filter class="common.log.CustomerLogFilter">
- <param name="levelMin" value="info" />
- <param name="levelMax" value="Customer" />
- <param name="AcceptOnMatch" value="true" />
- </filter>
- </appender>
- <!-- 根logger的设置-->
- <root>
- <priority value ="INFO"/>
- <appender-ref ref="Console"/>
- </root>
- </log4j:configuration>
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、通过修改
- <param name="levelMin" value="info" />
上面的 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
自定义log4j日志级别的更多相关文章
- log4j.xml配置,包含自定义log4j日志级别及输出日志到不同文件
一.配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configura ...
- Log4j.properties 属性详解以及 LOG4J日志级别详解
转自:https://blog.csdn.net/lovely0903jpp/article/details/82261607 假如项目的生产环境上增加请求以及响应信息的打印,这个时候,对于新手来说, ...
- (转)log4j日志级别设置成DEBUG时输出Html代码等问题:
log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...
- 基于JMX动态配置Log4J日志级别
先来看比较low的修改日志级别的方式,在写程序里面. http://blog.gssxgss.me/java%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81% ...
- LOG4J日志级别详解
日志记录器(Logger)是日志处理的核心组件. org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 ...
- 如何在JBoss WildFly 8 自定义log4j日志
最近在 JBoss WildFly 8 下部署 Web应用,自定义的 log4j 日志不工作.console下无日志输出,用System.out.println都不输出内容到console. 原因是J ...
- Confluence 6 log4j 日志级别
日志级别 DEBUG - 被设计为用来获得最多的信息和事件,在对应用程序进行调试的时候,这个日志级别通常能够提供最多的有效信息(查看应用程序怎么了) INFO - 有关系统正常运行-计划任务运行,服务 ...
- Log4j 日志级别
转自:http://michales003.iteye.com/blog/1160605 日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).: 1.static ...
- 动态调整Log4j日志级别
log4j2.xml配置文件中支持配置monitorInterval参数,检测到配置改变后重新加载,达到动态调整日志级别的效果. 故调整日志级别无须手动重启服务. log4j2.xml配置文件示意: ...
随机推荐
- .bat批处理基础
批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中.批处理文件的扩展名为bat .目前比较常见的批 ...
- windows lua 多线程 线程同步
今天在改一个程序,改成部分逻辑用lua写,这个程序是多线程的.将程序中部分逻辑改成lua之后,各种非法访问内存错误,各种奇奇怪怪的问题,不分时间,不分地点的出现崩溃.从调用堆栈来看,基本都是使用lua ...
- mysql添加修改字段
ALTER TABLE `uc_organization` ADD COLUMN `agent_id` VARCHAR(50) NOT NULL DEFAULT 0 COMMENT 'sqlserve ...
- js判段URL是否可用(js判段网络是否不可用)
下面亲自測试可行: 兼容全部浏览器,用JQuery的方法,能够判段URL是否可用.也能够判段网络是否不可用(前提:假设URL可用.返回也不是200,那就说明是网络不可用.能够以此作为网络是否可用的判段 ...
- Android AIDL Service 跨进程传递复杂数据
黑夜 黑夜给了我黑色的眼睛,我却用它寻找光明~ 传值方式 AIDL是同意跨进程传递值的,一般来说有三种方式: - 广播:这样的算是比較常见的一种方式了,传递小数据不错 - 文件:这个是保存到文件里.然 ...
- SpringCloud系列十一:自定义Feign
1. 回顾 上文我们讲解了如何为服务消费者配置Feign. 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码 ...
- Atitit.eclipse comment template注释模板
Atitit.eclipse comment template注释模板 1. Code templet1 1.1. Settpath1 1.2. 设置存储1 1.3. 导出设置1 2. Java d ...
- Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap
Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap 1.1. 虚拟机的构成 java虚拟机--处理器.堆栈.寄存器.指令系统. 1 1.2. 虚拟机执行过程 ...
- modelsim显示状态机名称的方法
modelsim显示状态机名称的方法 2015-09-08 15:35 1414人阅读 评论(0) 收藏 举报 分类: FPGA基础知识(40) 版权声明:转载请注明出处:http://blog. ...
- 使用pycharm手动搭建python语言django开发环境(三) 使用django的apps应用 添加应用静态文件
1)在django 工程目录中使用cmd命令行 敲入"python manage.py startapp app名称(例子为blog)" 2)在django工程目录中应该生成了bl ...