Browse Source

调整GateWayAPI日志输出格式

airhead 8 years ago
parent
commit
1aafdcc758

+ 3 - 2
hos-logger/src/main/java/com/yihu/hos/logger/camel/aggregator/EHRLogAggregator.java

@ -1,5 +1,6 @@
package com.yihu.hos.logger.camel.aggregator;
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;
@ -12,9 +13,9 @@ public class EHRLogAggregator implements AggregationStrategy {
    @Override
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        Object newBody = newExchange.getIn().getBody();
        ArrayList<Object> list = null;
        ArrayList<Object> list;
        if (oldExchange == null) {
            list = new ArrayList<Object>();
            list = new ArrayList<>();
            list.add(newBody);
            newExchange.getIn().setBody(list);
            return newExchange;

+ 3 - 2
hos-logger/src/main/java/com/yihu/hos/logger/camel/expression/EHRLogExpression.java

@ -6,7 +6,8 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 * Created by l4qiang on 2017-04-14.
 */
public class EHRLogExpression {
    public String getBreadcrumbId(ILoggingEvent event){
        return event.getMDCPropertyMap().get("camel.breadcrumbId");
    public String getBreadcrumbId(ILoggingEvent event) {
        String routeId = event.getMDCPropertyMap().get("camel.routeId").substring(0, 2);
        return routeId + "#" + event.getMDCPropertyMap().get("camel.breadcrumbId");
    }
}

+ 38 - 18
hos-logger/src/main/java/com/yihu/hos/logger/camel/processor/EHRLogProcesser.java

@ -10,6 +10,7 @@ import org.apache.camel.Processor;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Map;
/**
 * ehr log处理
@ -22,38 +23,57 @@ public class EHRLogProcesser implements Processor {
    public void process(Exchange exchange) throws Exception {
        exchange.getOut().setBody("");
        ArrayList arrayList = exchange.getIn().getBody(ArrayList.class);
        if (arrayList.size() != 3) {
        if (arrayList.size() != 4) {
            return;
        }
        Object first = arrayList.get(0);
        Object last = arrayList.get(2);
        Object last = arrayList.get(arrayList.size() - 1);
        try {
            ILoggingEvent firstEvent = (ILoggingEvent) first;
            ILoggingEvent lastEvent = (ILoggingEvent) last;
            ILoggingEvent request = (ILoggingEvent) first;
            ILoggingEvent response = (ILoggingEvent) last;
            Map<String, String> mdcPropertyMap = request.getMDCPropertyMap();
            if (mdcPropertyMap == null || !mdcPropertyMap.get("camel.routeId").equals("api")) {
                return;
            }
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode = objectMapper.readValue(firstEvent.getMessage(), JsonNode.class);
            JsonNode requestNode = objectMapper.readValue(request.getMessage(), JsonNode.class);
            JsonNode responseNode = objectMapper.readValue(response.getMessage(), JsonNode.class);
            JsonNode inNode = requestNode.with("in");
            JsonNode outNode = responseNode.with("out");
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("time", new Timestamp(firstEvent.getTimeStamp()).toString());
            objectNode.put("time", new Timestamp(request.getTimeStamp()).toString());
            objectNode.put("logType", 1);
            objectNode.put("caller", jsonNode.get("appKey").asText());
            objectNode.put("caller", inNode.get("appKey").asText());
            ObjectNode dataNode = objectMapper.createObjectNode();
            dataNode.put("responseTime", lastEvent.getTimeStamp() - firstEvent.getTimeStamp());
            dataNode.put("url", jsonNode.get("CamelHttpUrl").asText());
            dataNode.put("responseTime", response.getTimeStamp() - request.getTimeStamp());
            dataNode.put("url", inNode.get("CamelHttpUrl").asText());
            dataNode.put("responseCode", outNode.get("CamelHttpResponseCode").asText());
            dataNode.put("response", outNode.get("body").asText());
            dataNode.put("api", inNode.get("api").asText());
            dataNode.put("appKey", inNode.get("appKey").asText());
            ObjectNode paramNode = objectMapper.createObjectNode();
            paramNode.put("api", jsonNode.get("api").asText());
            paramNode.put("appKey", jsonNode.get("appKey").asText());
            paramNode.put("sign", jsonNode.get("sign").asText());
            paramNode.put("timestamp", jsonNode.get("timestamp").asText());
            paramNode.put("v", jsonNode.get("v").asText());
            if (jsonNode.has("param")) {
                paramNode.put("param", jsonNode.get("param").asText());
            paramNode.put("api", inNode.get("api").asText());
            paramNode.put("appKey", inNode.get("appKey").asText());
            paramNode.put("sign", inNode.get("sign").asText());
            paramNode.put("timestamp", inNode.get("timestamp").asText());
            paramNode.put("v", inNode.get("v").asText());
            if (inNode.has("param")) {
                paramNode.put("param", inNode.get("param").asText());
            }
            if (jsonNode.has("token")) {
                paramNode.put("token", jsonNode.get("token").asText());
            if (inNode.has("token")) {
                paramNode.put("token", inNode.get("token").asText());
            }
            dataNode.set("params", paramNode);
            objectNode.set("data", dataNode);

+ 2 - 1
hos-logger/src/main/java/com/yihu/hos/logger/camel/route/EHRLogRouterBuilder.java

@ -33,7 +33,8 @@ public class EHRLogRouterBuilder extends RouteBuilder {
        context.addComponent(DESTINATION_NAME, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(DESTINATION_NAME + ":topic:" + QUEUE_NAME)
                .aggregate(method(new EHRLogExpression(), "getBreadcrumbId"), new EHRLogAggregator())
                .completionSize(3)
                .completionSize(4)
                .completionTimeout(20 * 1000)
                .process(new EHRLogProcesser())
                .to("file://" + loggerConfiguration.getEhrLogDir());
    }

+ 9 - 0
hos-logger/src/main/java/com/yihu/hos/logger/model/HosLog.java

@ -16,6 +16,7 @@ public class HosLog {
    private String id;
    @Indexed
    private String exchangeId;
    private String messageId;
    private String correlationId;
    private String transactionKey;
    @Indexed
@ -56,6 +57,14 @@ public class HosLog {
        this.exchangeId = exchangeId;
    }
    public String messageId() {
        return this.messageId;
    }
    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }
    public String getCorrelationId() {
        return correlationId;
    }

+ 2 - 0
hos-logger/src/main/java/com/yihu/hos/logger/service/HosLogService.java

@ -39,6 +39,8 @@ public class HosLogService {
        hosLog.setFireTime(new Date(event.getTimeStamp()));
        hosLog.setExchangeId(mdcPropertyMap.get("camel.exchangeId"));
        hosLog.setMessageId(mdcPropertyMap.get("camel.messageId"));
        hosLog.setCorrelationId(mdcPropertyMap.get("camel.correlationId"));
        hosLog.setTransactionKey(mdcPropertyMap.get("camel.transactionKey"));
        hosLog.setRouteId(mdcPropertyMap.get("camel.routeId"));
        hosLog.setBreadcrumbId(mdcPropertyMap.get("camel.breadcrumbId"));

+ 1 - 1
hos-logger/src/main/resources/application.yml

@ -16,7 +16,7 @@ camel:
spring:
  profiles: dev
  activemq:
      broker-url: tcp://172.19.103.57:61616
      broker-url: tcp://172.19.103.42:61616
      user: admin
      password: admin
  data: