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日志级别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长沙哪招jaVa后端开发人才_求职:Ja
- 下一篇: java shiro原理_Springb