提交 d7cbeab0 编写于 作者: Y youyong205

refactor broker-service

上级 28784efd
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>1.3.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>broker-service</artifactId>
<name>broker-service</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>dal-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>web-framework</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>test-framework</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.google.code.javaparser</groupId>
<artifactId>javaparser</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>plexus-maven-plugin</artifactId>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.broker.build.ComponentsConfigurator</className>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warName>broker-service-${env}-${version}</warName>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/cat</contextPath>
<defaultsDescriptor>src/main/webapp/WEB-INF/web.xml</defaultsDescriptor>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>2281</port>
<maxIdleTime>500000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<packaging>war</packaging>
<env>alpha</env>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
<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">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>1.3.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>broker-service</artifactId>
<name>broker-service</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>dal-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>web-framework</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>test-framework</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.google.code.javaparser</groupId>
<artifactId>javaparser</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.4.3</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>plexus-maven-plugin</artifactId>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.broker.build.ComponentsConfigurator</className>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warName>broker-service-${env}-${version}</warName>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/cat</contextPath>
<defaultsDescriptor>src/main/webapp/WEB-INF/web.xml</defaultsDescriptor>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>2281</port>
<maxIdleTime>500000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<packaging>war</packaging>
<env>alpha</env>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
</project>
......@@ -28,7 +28,7 @@ public class AppDataProto extends ProtoData {
public AppDataProto() {
}
public AppDataProto addCount(int count) {
m_count = m_count + count;
return this;
......@@ -156,4 +156,12 @@ public class AppDataProto extends ProtoData {
m_version = version;
return this;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
return sb.toString();
}
}
package com.dianping.cat.broker.api.log;
import java.net.URL;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import com.dianping.cat.broker.api.app.proto.AppDataProto;
public class AppLogManager implements Initializable {
protected Logger m_logger = Logger.getLogger(AppLogManager.class);
private BlockingQueue<AppDataProto> m_datas = new LinkedBlockingQueue<AppDataProto>(2000);
@Override
public void initialize() throws InitializationException {
URL file = this.getClass().getClassLoader().getResource("config/log4j.xml");
DOMConfigurator.configure(file);
Threads.forGroup("cat").start(new StoreManager());
}
public boolean offer(AppDataProto proto) {
return m_datas.offer(proto);
}
public class StoreManager implements Task {
@Override
public String getName() {
return "store-app-log";
}
@Override
public void run() {
while (true) {
try {
AppDataProto proto = m_datas.poll(5, TimeUnit.MICROSECONDS);
if (proto != null) {
}
} catch (InterruptedException e) {
break;
}
}
}
@Override
public void shutdown() {
}
}
}
......@@ -18,9 +18,9 @@ import com.dianping.cat.helper.TimeHelper;
import com.dianping.cat.message.Event;
import com.dianping.cat.message.Transaction;
public class LogManager {
public class ErrorLogManager {
public volatile static LogManager s_manager;
public volatile static ErrorLogManager s_manager;
private BlockingQueue<Entity> m_datas = new LinkedBlockingQueue<Entity>(2000);
......@@ -30,11 +30,11 @@ public class LogManager {
private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMddHH");
public static LogManager getInstance() {
public static ErrorLogManager getInstance() {
if (s_manager == null) {
synchronized (LogManager.class) {
synchronized (ErrorLogManager.class) {
if (s_manager == null) {
s_manager = new LogManager();
s_manager = new ErrorLogManager();
s_manager.initialize();
}
}
......
......@@ -12,15 +12,15 @@ import javax.servlet.http.HttpServletRequest;
import org.unidal.helper.Files;
import com.dianping.cat.broker.api.log.LogManager;
import com.dianping.cat.broker.api.log.ErrorLogManager;
public class LogServlet implements Servlet {
private LogManager m_instance;
private ErrorLogManager m_instance;
@Override
public void init(ServletConfig config) throws ServletException {
m_instance = LogManager.getInstance();
m_instance = ErrorLogManager.getInstance();
}
public ServletConfig getServletConfig() {
......
......@@ -23,6 +23,7 @@ import com.dianping.cat.Cat;
import com.dianping.cat.broker.api.app.AppConsumer;
import com.dianping.cat.broker.api.app.proto.AppDataProto;
import com.dianping.cat.broker.api.app.proto.ProtoData;
import com.dianping.cat.broker.api.log.AppLogManager;
import com.dianping.cat.broker.api.page.RequestUtils;
import com.dianping.cat.config.app.AppConfigManager;
import com.dianping.cat.message.Event;
......@@ -46,9 +47,14 @@ public class Handler implements PageHandler<Context>, LogEnabled {
@Inject
private UrlParser m_parser;
@Inject
private AppLogManager m_logManager;
private Logger m_logger;
private volatile int m_error;
private volatile int m_analyzerError;
private volatile int m_logError;
public static final String TOO_LONG = "toolongurl.bin";
......@@ -56,6 +62,8 @@ public class Handler implements PageHandler<Context>, LogEnabled {
private static final String VERSION_THREE = "3";
private static final int LONG = 30 * 1000;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
......@@ -95,7 +103,7 @@ public class Handler implements PageHandler<Context>, LogEnabled {
int responseTime = appData.getResponseTime();
if (responseTime < 60 * 1000 && responseTime >= 0) {
if (responseTime < LONG && responseTime >= 0) {
offerQueue(appData);
Cat.logEvent("Command", formatCommand, Event.SUCCESS, null);
......@@ -110,12 +118,26 @@ public class Handler implements PageHandler<Context>, LogEnabled {
} else {
Cat.logEvent("Batch.ResponseTimeError", formatCommand, Event.SUCCESS, String.valueOf(responseTime));
}
logAppInfo(appData);
}
} else {
Cat.logEvent("UnknownCommand", urlBack, Event.SUCCESS, items[4]);
}
}
private void logAppInfo(AppDataProto appData) {
boolean success = m_logManager.offer(appData);
if (!success) {
m_logError++;
if (m_logError % 1000 == 0) {
Cat.logEvent("Discard", "Log", Event.SUCCESS, null);
m_logger.error("Error when offer appData to queue , discard number " + m_logError);
}
}
}
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "batch")
......@@ -152,11 +174,11 @@ public class Handler implements PageHandler<Context>, LogEnabled {
boolean success = m_appDataConsumer.enqueue(appData);
if (!success) {
m_error++;
m_analyzerError++;
if (m_error % 1000 == 0) {
if (m_analyzerError % 1000 == 0) {
Cat.logEvent("Discard", "Batch", Event.SUCCESS, null);
m_logger.error("Error when offer appData to queue , discard number " + m_error);
m_logger.error("Error when offer appData to queue , discard number " + m_analyzerError);
}
}
}
......
......@@ -212,6 +212,9 @@
<requirement>
<role>com.dianping.cat.broker.api.page.batch.UrlParser</role>
</requirement>
<requirement>
<role>com.dianping.cat.broker.api.log.AppLogManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -234,6 +237,10 @@
<role>com.dianping.cat.broker.api.page.batch.UrlParser</role>
<implementation>com.dianping.cat.broker.api.page.batch.UrlParser</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.log.AppLogManager</role>
<implementation>com.dianping.cat.broker.api.log.AppLogManager</implementation>
</component>
<component>
<role>com.dianping.cat.broker.api.page.js.Handler</role>
<implementation>com.dianping.cat.broker.api.page.js.Handler</implementation>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Authors: Chris Taylor, Ceki Gulcu. -->
<!-- Version: 1.2 -->
<!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
element. -->
<!ELEMENT log4j:configuration (renderer*, appender*,plugin*, (category|logger)*,root?,
(categoryFactory|loggerFactory)?)>
<!-- The "threshold" attribute takes a level value below which -->
<!-- all logging statements are disabled. -->
<!-- Setting the "debug" enable the printing of internal log4j logging -->
<!-- statements. -->
<!-- By default, debug attribute is "null", meaning that we not do touch -->
<!-- internal log4j logging settings. The "null" value for the threshold -->
<!-- attribute can be misleading. The threshold field of a repository -->
<!-- cannot be set to null. The "null" value for the threshold attribute -->
<!-- simply means don't touch the threshold field, the threshold field -->
<!-- keeps its old value. -->
<!ATTLIST log4j:configuration
xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
threshold (all|trace|debug|info|warn|error|fatal|off|null) "null"
debug (true|false|null) "null"
reset (true|false) "false"
>
<!-- renderer elements allow the user to customize the conversion of -->
<!-- message objects to String. -->
<!ELEMENT renderer EMPTY>
<!ATTLIST renderer
renderedClass CDATA #REQUIRED
renderingClass CDATA #REQUIRED
>
<!-- Appenders must have a name and a class. -->
<!-- Appenders may contain an error handler, a layout, optional parameters -->
<!-- and filters. They may also reference (or include) other appenders. -->
<!ELEMENT appender (errorHandler?, param*,
rollingPolicy?, triggeringPolicy?, connectionSource?,
layout?, filter*, appender-ref*)>
<!ATTLIST appender
name CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT layout (param*)>
<!ATTLIST layout
class CDATA #REQUIRED
>
<!ELEMENT filter (param*)>
<!ATTLIST filter
class CDATA #REQUIRED
>
<!-- ErrorHandlers can be of any class. They can admit any number of -->
<!-- parameters. -->
<!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)>
<!ATTLIST errorHandler
class CDATA #REQUIRED
>
<!ELEMENT root-ref EMPTY>
<!ELEMENT logger-ref EMPTY>
<!ATTLIST logger-ref
ref CDATA #REQUIRED
>
<!ELEMENT param EMPTY>
<!ATTLIST param
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!-- The priority class is org.apache.log4j.Level by default -->
<!ELEMENT priority (param*)>
<!ATTLIST priority
class CDATA #IMPLIED
value CDATA #REQUIRED
>
<!-- The level class is org.apache.log4j.Level by default -->
<!ELEMENT level (param*)>
<!ATTLIST level
class CDATA #IMPLIED
value CDATA #REQUIRED
>
<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named category. -->
<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
<!ATTLIST category
class CDATA #IMPLIED
name CDATA #REQUIRED
additivity (true|false) "true"
>
<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named logger. -->
<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
name CDATA #REQUIRED
additivity (true|false) "true"
>
<!ELEMENT categoryFactory (param*)>
<!ATTLIST categoryFactory
class CDATA #REQUIRED>
<!ELEMENT loggerFactory (param*)>
<!ATTLIST loggerFactory
class CDATA #REQUIRED>
<!ELEMENT appender-ref EMPTY>
<!ATTLIST appender-ref
ref CDATA #REQUIRED
>
<!-- plugins must have a name and class and can have optional parameters -->
<!ELEMENT plugin (param*, connectionSource?)>
<!ATTLIST plugin
name CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT connectionSource (dataSource?, param*)>
<!ATTLIST connectionSource
class CDATA #REQUIRED
>
<!ELEMENT dataSource (param*)>
<!ATTLIST dataSource
class CDATA #REQUIRED
>
<!ELEMENT triggeringPolicy ((param|filter)*)>
<!ATTLIST triggeringPolicy
name CDATA #IMPLIED
class CDATA #REQUIRED
>
<!ELEMENT rollingPolicy (param*)>
<!ATTLIST rollingPolicy
name CDATA #IMPLIED
class CDATA #REQUIRED
>
<!-- If no priority element is specified, then the configurator MUST not -->
<!-- touch the priority of root. -->
<!-- The root category always exists and cannot be subclassed. -->
<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
<!-- ==================================================================== -->
<!-- A logging event -->
<!-- ==================================================================== -->
<!ELEMENT log4j:eventSet (log4j:event*)>
<!ATTLIST log4j:eventSet
xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
version (1.1|1.2) "1.2"
includesLocationInfo (true|false) "true"
>
<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?,
log4j:locationInfo?, log4j:properties?) >
<!-- The timestamp format is application dependent. -->
<!ATTLIST log4j:event
logger CDATA #REQUIRED
level CDATA #REQUIRED
thread CDATA #REQUIRED
timestamp CDATA #REQUIRED
time CDATA #IMPLIED
>
<!ELEMENT log4j:message (#PCDATA)>
<!ELEMENT log4j:NDC (#PCDATA)>
<!ELEMENT log4j:throwable (#PCDATA)>
<!ELEMENT log4j:locationInfo EMPTY>
<!ATTLIST log4j:locationInfo
class CDATA #REQUIRED
method CDATA #REQUIRED
file CDATA #REQUIRED
line CDATA #REQUIRED
>
<!ELEMENT log4j:properties (log4j:data*)>
<!ELEMENT log4j:data EMPTY>
<!ATTLIST log4j:data
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE_FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/applogs/broker-service/app/app.log" />
<param name="Append" value="true" />
<param name="datePattern" value="'.'yyyy-MM-dd.HH"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d - %c -%-4r [%t] %-5p %x - %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="CONSOLE_FILE" />
</root>
</log4j:configuration>
\ No newline at end of file
......@@ -23,7 +23,7 @@
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/api/*</url-pattern>
......
......@@ -198,20 +198,29 @@
sample如下:
v=1&c=
1400037748182<span class="text-danger">TAB</span>http://dianping.com/shop<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
1400037748182<span class="text-danger">TAB</span>http://dianping.com/shop<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
1400037748182<span class="text-danger">TAB</span>http://dianping.com/shop<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
1400037748182<span class="text-danger">TAB</span>cdn-resource1<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
1400037748182<span class="text-danger">TAB</span>cdn-resource2<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
1400037748182<span class="text-danger">TAB</span>cdn-resource3<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>200<span class="text-danger">TAB</span>300<span class="text-danger">TAB</span>300<span class="text-danger">ENTER</span>
</pre>
<p>参数说明</p>
<table style="width:70%" class="table table-bordered table-striped table-condensed ">
<tr><th>query名</th><th>实际名称</th><th>描述</th><th>类型</th></tr>
<tr><td>v</td><td>version</td><td>API版本号</td><td>暂定为1</td></tr>
<tr><td>t</td><td>timestamp</td><td>发生时间</td><td>long型,1970到现在的毫秒数</td></tr>
<tr><td>dl</td><td>dnslookup</td><td>dns寻址时间</td><td>int</td></tr>
<tr><td>tc</td><td>tcpConnect</td><td>tcp连接建立</td><td>int</td></tr>
<tr><td>rq</td><td>request</td><td>请求时间</td><td>int</td></tr>
<tr><td>rs</td><td>response</td><td>接受时间</td><td>int</td></tr>
<tr><th>实际名称</th><th>描述</th><th>类型</th></tr>
<tr><td>v</td><td>API版本号</td><td>暂定为1</td></tr>
<tr><td>c</td><td>具体内容</td><td>content内容</td></tr>
</table>
<p>content内容说明</p>
<pre>
timstamp<span class="text-danger">TAB</span>targetUrl<span class="text-danger">TAB</span>dnslookup<span class="text-danger">TAB</span>tcpconnect<span class="text-danger">TAB</span>request<span class="text-danger">TAB</span>response<span class="text-danger">ENTER</span>
</pre>
<table style="width:70%" class="table table-bordered table-striped table-condensed ">
<tr><th>实际名称</th><th>描述</th><th>类型</th></tr>
<tr><td>timestamp</td><td>发生时间</td><td>long型,1970到现在的毫秒数</td></tr>
<tr><td>targetUrl</td><td>具体的cdn资源</td><td>cdn资源的一个定义</td></tr>
<tr><td>dnslookup</td><td>dns寻址时间</td><td>int</td></tr>
<tr><td>tcpConnect</td><td>tcp连接建立</td><td>int</td></tr>
<tr><td>request</td><td>请求时间</td><td>int</td></tr>
<tr><td>response</td><td>接受时间</td><td>int</td></tr>
</table>
<br/>
<h4 class="text-success">URL规则配置&nbsp; <a target="_blank" href="/cat/s/config?op=urlPatternUpdate">链接</a></h4>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册