All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pamirs.pradar.BaseContextEncoder Maven / Gradle / Ivy

There is a newer version: 1.0.2
Show newest version
package com.pamirs.pradar;

import com.pamirs.pradar.json.ResultSerializer;
import org.apache.commons.lang.StringUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Pradar 日志格式编码,为针对异步队列调用做优化,不允许多线程并发调用
 */
abstract class BaseContextEncoder {
    public abstract void encode(BaseContext ctx, PradarAppender appender) throws IOException;
}

/**
 * Pradar 调用日志的输出
 */
class DefaultInvokeContextEncoder extends BaseContextEncoder {

    private int DEFAULT_BUFFER_SIZE = 256;
    private StringBuilder buffer = new StringBuilder(DEFAULT_BUFFER_SIZE);


    private List traceForUnitTest = new ArrayList(100);


    @Override
    public void encode(BaseContext base, PradarAppender eea) throws IOException {
        AbstractContext ctx;
        if (base instanceof AbstractContext) {
            ctx = (AbstractContext) base;
        } else {
            return;
        }

        //Pradar TODO
        StringBuilder buffer = this.buffer;
        buffer.delete(0, buffer.length());
        buffer.append(ctx.getTraceId() == null ? "" : ctx.getTraceId()).append('|')
                .append(ctx.getStartTime()).append('|')
                .append(Pradar.AGENT_ID).append('|')
                .append(ctx.getTraceNode()).append('|')
                .append(ctx.getNodeId()).append('|')
                .append(ctx.getInvokeId() == null ? "" : ctx.getInvokeId()).append('|')
                .append(ctx.getLogType()).append('|')
                .append(ctx.getInvokeType()).append('|')
                .append(PradarCoreUtils.makeLogSafe(AppNameUtils.appName())).append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getTraceAppName() == null ? "" : ctx.getTraceAppName())).append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getUpAppName() == null ? "" : ctx.getUpAppName())).append('|')
                .append(ctx.getLogTime() - ctx.getStartTime()).append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getMiddlewareName() == null ? "" : ctx.getMiddlewareName())).append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getServiceName() == null ? "" : ctx.getServiceName())).append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getMethodName() == null ? "" : ctx.getMethodName())).append('|')
                .append(ctx.getRemoteIp() == null ? "" : ctx.getRemoteIp()).append('|')
                .append(ctx.getPort()).append('|')
                .append(ctx.getResultCode() == null ? "" : ctx.getResultCode()).append('|')
                .append(ctx.getRequestSize() < 0 ? 0 : ctx.getRequestSize()).append('|')
                .append(ctx.getResponseSize() < 0 ? 0 : ctx.getResponseSize()).append('|')
                .append(PradarCoreUtils.makeLogSafe(ResultSerializer.serializeRequest(ctx.getRequest() == null ? "" : ctx.getRequest(), Pradar.getPluginRequestSize()))).append('|')
                .append(PradarCoreUtils.makeLogSafe(ResultSerializer.serializeResponse(ctx.getResponse() == null ? "" : ctx.getResponse(), Pradar.getPluginResponseSize()))).append('|')
                .append(ctx.isClusterTest() ? '1' : '0').append('|')
                .append(PradarCoreUtils.makeLogSafe(ctx.getCallBackMsg() == null ? "" : ctx.getCallBackMsg()));

        final int samplingInterval = PradarSwitcher.getSamplingInterval();
        if (samplingInterval >= 2 && samplingInterval <= 9999) {
            buffer.append("|#").append(samplingInterval);
        }

        ctx.logContextData(buffer);
        buffer.append(PradarCoreUtils.NEWLINE);
        eea.append(buffer.toString());

        if (!StringUtils.isEmpty(System.getProperty("pradar.UnitTest"))) {
            if (traceForUnitTest.size() > 98) {
                traceForUnitTest.clear();
            }
            traceForUnitTest.add(buffer.toString());
        }
        ctx.destroy();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy