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中 <root> 下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 解析
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- all log for console -->
<!-- 控制台输出 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %l %M - %m%n" />
</layout>
</appender>
<!-- 自定义输出方式 -->
<!-- access log -->
<appender name="access" class="org.apache.log4j.DailyRollingFileAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} - %m%n" />
</layout>
<param name="Append" value="true" />
<param name="File" value="D:/lives/logs/access.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.'" />
<!-- 过滤器配置 -->
<filter class="com.lives.platform.common.log.AccessLogFilter" />
</appender>
<!-- 根目录:那些配置生效 -->
<root>
<priority value ="INFO"/>
<appender-ref ref="console" />
<appender-ref ref="access" />
</root>
</log4j:configuration>
maven-pox.xml 管理
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lives</groupId>
<artifactId>lives_platform</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>lives_platform Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.1.1.RELEASE</spring.version>
</properties>
<dependencies>
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<package.environment>test</package.environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<package.environment>prod</package.environment>
</properties>
</profile>
</profiles>
<build>
<finalName>lives_platform</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
<webResources>
<resource>
<directory>src/main/resources/properties/${package.environment}</directory>
<targetPath>WEB-INF/classes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
</project>
运行效果图