Log4j 深入过滤器
项目清单
源码解析
package com.lives.platform.common.log;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
public class AccessLogFilter extends Filter{
/**
* 通过过滤器实现等级配置:
* 1.当使用该过滤器时,数据的leve为AccessLog.LOG_LEVEL
* 2.log4j.xml中 下info指的的全局,即别的如果有用日志的地方而不是通过该自定义的filter的等级输出方式
*/
@Override
public int decide(LoggingEvent event) {
int inputLevel = event.getLevel().toInt();
if (inputLevel == AccessLog.LOG_LEVEL) {
return 0;
}
return -1;
}
}
package com.lives.platform.common.log;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.net.SyslogAppender;
public class AccessLog {
//自定义了等级,不同于debug、info..等的数值就可以了
public static final int LOG_LEVEL = 20050;
private static class CustomerLogLevel extends Level{
private static final long serialVersionUID = 1L;
public CustomerLogLevel(int level, String levelStr, int syslogEquivalent) {
super(level, levelStr, syslogEquivalent);
}
}
/**
* 1.LOG_LEVEL 等级值;
* 2."ACCESS" 日志输出的前缀
*/
private static final Level CustomerLevel = new CustomerLogLevel(LOG_LEVEL, "ACCESS ", SyslogAppender.LOG_LOCAL0);
/**
* 输出日志
*/
public static void log(Logger logger,
Object info){
logger.log(CustomerLevel, info);
}
}
package com.lives.log.test;
import org.apache.log4j.Logger;
import com.lives.platform.common.log.AccessLog;
public class LogTest {
public static void main(String[] args) {
Logger logger = Logger.getLogger(LogTest.class);
AccessLog.log(logger, "request info : " +" logger test ...");
}
}
log4j.xml 解析
maven-pox.xml 管理
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.lives
lives_platform
war
0.0.1-SNAPSHOT
lives_platform Maven Webapp
http://maven.apache.org
UTF-8
3.1.1.RELEASE
org.slf4j
slf4j-log4j12
1.7.5
dev
dev
true
test
test
prod
prod
lives_platform
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
1.8
false
src/main/resources/properties/${package.environment}
WEB-INF/classes
true
运行效果图