文档章节

java 日志 自定义过滤

逝去的回忆
 逝去的回忆
发布于 2016/09/29 14:24
字数 545
阅读 58
收藏 0
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>


运行效果图


© 著作权归作者所有

逝去的回忆
粉丝 16
博文 136
码字总数 219872
作品 0
深圳
高级程序员
私信 提问
Elasticsearch的基友Logstash

Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。 一、原理 Input 可以从文件中、存储中、数据库中抽取数据,Input有两...

甩锅侠
2017/12/11
0
0
OpenRASP v0.41 正式发布

OpenRASP v0.41 正式发布了,包含如下重大变更 Java 版本 配置选项改名为 ,并支持模板化配置 即自动替换模板里的 关键词为当前请求ID PHP 版本 配置选项改名为 并支持模板化配置,同Java版本...

OpenRASP
2018/09/25
850
0
使用TProfiler分析并调优项目中的Fastjson序列化代码

新项目年后就上线了,现在业务上没什么问题,就用[TProfiler][1]做了下性能分析,果然有坑。 一、TProfiler入门 高手请自觉略过本节。 1.简介 TProfiler是阿里巴巴开源的一款性能分析工具。号...

bfleeee
2015/02/15
1K
0
HanLP-停用词表的使用示例

停用词表的修改 停用词表在“pyhanlpstaticdatadictionary”路径下的“stopwords.txt”文件中,CoreStopWordDictionary.apply方法支持去除停用词。如果需要修改停用词表,则直接编辑文件“s...

左手的倒影
05/22
41
1
logstash+elasticsearch +kibana 日志管理系统

Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。 kibana 也是...

xiaoyuan234
2018/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
22分钟前
4
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
24分钟前
36
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
25分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
今天
6
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部