这里的我的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,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{HH:mm:ss} %p %c{1}: %m%n
log4j.logger.com.log.LogFilter = DEBUG,flume
log4j.additivity.com.log.LogFilter = false
log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = localhost.localdomain
log4j.appender.flume.Port = 44444
log4j.appender.flume.UnsafeMode = true
log4j.appender.flume.layout = org.apache.log4j.PatternLayout
log4j.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