class DefaultServiceStrategyMonitor extends StrategyMonitor implements ServiceStrategyMonitor {
    @Value("${" + StrategyConstant.SPRING_APPLICATION_STRATEGY_TRACER_ENABLED + ":false}")
    protected Boolean tracerEnabled;

    @Value("${" + StrategyConstant.SPRING_APPLICATION_STRATEGY_TRACER_METHOD_CONTEXT_OUTPUT_ENABLED + ":false}")
    protected Boolean tracerMethodContextOutputEnabled;

    @Value("${" + StrategyConstant.SPRING_APPLICATION_STRATEGY_ALARM_ENABLED + ":false}")
    protected Boolean alarmEnabled;

    @Autowired(required = false)
    protected List<ServiceStrategyMonitorAdapter> serviceStrategyMonitorAdapterList;

    @Override
    public void monitor(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation) {
        spanBuild();

        loggerOutput();
        loggerDebug();

        alarm(createContextMap(interceptor, invocation));
    }

    @Override
    public void monitor(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation, Object returnValue) {
        spanOutput(createContextMap(interceptor, invocation, returnValue));
    }

    @Override
    public void error(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation, Throwable e) {
        spanError(e);
    }

    @Override
    public void release(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation) {
        loggerClear();

        spanFinish();
    }

    private Map<String, String> createContextMap(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation) {
        if (!alarmEnabled) {
            return null;
        }

        Map<String, String> contextMap = new LinkedHashMap<String, String>();

        String className = interceptor.getMethod(invocation).getDeclaringClass().getName();
        String methodName = interceptor.getMethodName(invocation);
        contextMap.put(DiscoveryConstant.CLASS, className);
        contextMap.put(DiscoveryConstant.METHOD, methodName);

        return contextMap;
    }

    private Map<String, String> createContextMap(ServiceStrategyMonitorInterceptor interceptor, MethodInvocation invocation, Object returnValue) {<FILL_FUNCTION_BODY>}
}

        if (!tracerEnabled) {
            return null;
        }

        Map<String, String> contextMap = new LinkedHashMap<String, String>();

        String className = interceptor.getMethod(invocation).getDeclaringClass().getName();
        String methodName = interceptor.getMethodName(invocation);
        contextMap.put("* " + DiscoveryConstant.CLASS, className);
        contextMap.put("* " + DiscoveryConstant.METHOD, methodName);

        if (tracerMethodContextOutputEnabled) {
            String[] methodParameterNames = interceptor.getMethodParameterNames(invocation);
            Object[] arguments = interceptor.getArguments(invocation);
            Map<String, Object> parameterMap = ClassUtil.getParameterMap(methodParameterNames, arguments);
            if (CollectionUtils.isNotEmpty(serviceStrategyMonitorAdapterList)) {
                for (ServiceStrategyMonitorAdapter serviceStrategyMonitorAdapter : serviceStrategyMonitorAdapterList) {
                    Map<String, String> customizationMap = serviceStrategyMonitorAdapter.getCustomizationMap(interceptor, invocation, parameterMap, returnValue);
                    for (Map.Entry<String, String> entry : customizationMap.entrySet()) {
                        contextMap.put("* " + entry.getKey(), entry.getValue());
                    }
                }
            }
        }

        return contextMap;
    
<methods>public non-sealed void <init>() ,public void alarm(Map<java.lang.String,java.lang.String>) ,public com.nepxion.discovery.plugin.strategy.monitor.StrategyAlarm getStrategyAlarm() ,public com.nepxion.discovery.plugin.strategy.monitor.StrategyLogger getStrategyLogger() ,public com.nepxion.discovery.plugin.strategy.monitor.StrategyTracer getStrategyTracer() ,public void loggerClear() ,public void loggerDebug() ,public void loggerOutput() ,public void spanBuild() ,public void spanError(java.lang.Throwable) ,public void spanFinish() ,public void spanOutput(Map<java.lang.String,java.lang.String>) <variables>protected com.nepxion.discovery.plugin.strategy.monitor.StrategyAlarm strategyAlarm,protected com.nepxion.discovery.plugin.strategy.monitor.StrategyLogger strategyLogger,protected com.nepxion.discovery.plugin.strategy.monitor.StrategyTracer strategyTracer