flume+log4j整合到web项目

来源:互联网 发布:软件下载大全 应用 编辑:程序博客网 时间:2024/05/13 18:43

    这里的我的maven来构建此项目pom里面内容如下:

<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>Flume-master</groupId>    <artifactId>Flume-master</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>war</packaging>    <name>Flume-master</name>    <properties>        <jackson.version>1.9.3</jackson.version>        <flume.version>1.4.0</flume.version>        <tomcat.version>7.0.42</tomcat.version>        <jetty.version>8.1.13.v20130916</jetty.version>    </properties>    <repositories>        <repository>            <id>oracleReleases</id>            <name>Oracle Released Java Packages</name>            <url>http://download.oracle.com/maven</url>            <layout>default</layout>        </repository>        <repository>            <id>java.net2</id>            <name>Repository hosting the jee6 artifacts</name>            <url>http://download.java.net/maven/2</url>        </repository>    </repositories>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.codehaus.jackson</groupId>                <artifactId>jackson-core-asl</artifactId>                <version>${jackson.version}</version>            </dependency>            <dependency>                <groupId>org.codehaus.jackson</groupId>                <artifactId>jackson-mapper-asl</artifactId>                <version>${jackson.version}</version>            </dependency>        </dependencies>    </dependencyManagement>    <dependencies>    <dependency>       <groupId>javax</groupId>       <artifactId>javaee-web-api</artifactId>       <version>6.0</version>       <scope>provided</scope>    </dependency>    <dependency>       <groupId>jstl</groupId>       <artifactId>jstl</artifactId>       <version>1.2</version>    </dependency>                <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>1.7.5</version>        </dependency>        <dependency>            <groupId>org.apache.flume.flume-ng-clients</groupId>            <artifactId>flume-ng-log4jappender</artifactId>            <version>${flume.version}</version>            <exclusions>                <exclusion>                    <groupId>org.mortbay.jetty</groupId>                    <artifactId>jetty</artifactId>                </exclusion>                <exclusion>                    <groupId>org.mortbay.jetty</groupId>                    <artifactId>jetty-util</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.11</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <finalName>FlumeWebApp</finalName>        <resources>            <resource>                <directory>src/main/resources</directory>                <filtering>true</filtering>                <includes>                    <include>**/*</include>                </includes>            </resource>        </resources>        <pluginManagement>            <plugins>                <plugin>                    <groupId>org.apache.tomcat.maven</groupId>                    <artifactId>tomcat7-maven-plugin</artifactId>                    <version>2.1</version>                </plugin>            </plugins>        </pluginManagement>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>2.3.2</version>                <inherited>true</inherited>                <configuration>                    <source>1.6</source>                    <target>1.6</target>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-war-plugin</artifactId>                <version>2.1.1</version>                <configuration>                    <failOnMissingWebXml>false</failOnMissingWebXml>                </configuration>            </plugin>            <!--            <plugin>                <groupId>org.apache.tomcat.maven</groupId>                <artifactId>tomcat7-maven-plugin</artifactId>            </plugin>            -->            <plugin>                <groupId>org.mortbay.jetty</groupId>                <artifactId>jetty-maven-plugin</artifactId>                <version>${jetty.version}</version>                <configuration>                    <stopPort>9999</stopPort>                    <stopKey>stop</stopKey>                    <webApp>                        <contextPath>/${project.build.finalName}</contextPath>                    </webApp>                </configuration>            </plugin>        </plugins>    </build>    <profiles>        <profile>            <id>hdfs</id>            <activation>                <activeByDefault>true</activeByDefault>            </activation>            <properties>                <flume.Port>44444</flume.Port>            </properties>        </profile>        <profile>            <id>hbase</id>            <activation>                <activeByDefault>false</activeByDefault>            </activation>            <properties>                <flume.Port>61616</flume.Port>            </properties>        </profile>    </profiles></project>

   这里可能依赖了一些多余的jar,但是最好还是全要了先,

  然后再项目的log4j.properties里面添加flume的日志配置

log4j.rootCategory = DEBUG,consolelog4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern = %d{HH:mm:ss} %p %c{1}: %m%nlog4j.logger.com.log.LogFilter = DEBUG,flumelog4j.additivity.com.log.LogFilter = falselog4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppenderlog4j.appender.flume.Hostname = localhost.localdomainlog4j.appender.flume.Port = 44444log4j.appender.flume.UnsafeMode = truelog4j.appender.flume.layout = org.apache.log4j.PatternLayoutlog4j.appender.flume.layout.ConversionPattern = %d{mm}\t%d{ss}\t%p\t%c{1}\t%m

然后写一些log4j的日志打印信息,这里我在一个过滤里面写,

package com.log;import java.io.IOException;import java.sql.Date;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;/** */@WebFilter(value = "/log/*")public class LogFilter implements Filter{    private Logger m_logger = Logger.getLogger(getClass());    @Override    public void init(final FilterConfig filterConfig) throws ServletException    {    }    @Override    public void doFilter(            final ServletRequest servletRequest,            final ServletResponse servletResponse,            final FilterChain filterChain) throws IOException, ServletException    {//    m_logger.debug("---------------------------------"+filterChain);    System.out.println("--"+filterChain);        if (servletRequest instanceof HttpServletRequest)        {            final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;            final String queryString = httpServletRequest.getQueryString();            final String pathInfo = httpServletRequest.getRequestURI();            System.out.println("---------------------------------"+queryString);            if (pathInfo.endsWith("/debug/"))            {                m_logger.debug(queryString);            }            else if (pathInfo.endsWith("/error/"))            {                m_logger.error(queryString);            }            else if (pathInfo.endsWith("/warn/"))            {                m_logger.warn(queryString);            }            else            {                m_logger.info(queryString);            }        }        filterChain.doFilter(servletRequest, servletResponse);    }    @Override    public void destroy()    {    }}

然后将项目的war包放到linux的tomcat上,访问项目后,你会看到agent会接收到项目里面的log日志了,这里的启动flume的agent部分就不说了。

详细代码可以参考github的源码flumeMaster

0 0