0

我编写了一个自定义 Log4J Appender,它负责将日志消息异步发送到第三方服务

所以预计每毫秒调用一次

这是我的自定义 Appender 代码

我在这段代码上运行了Findbugs,它没有报告任何异常。

但是在将此代码发布到生产环境之前,我如何知道此代码是否有任何问题。

有没有为此目的的工具?

请在此分享您的想法,在此先感谢。

package com;

import java.util.ArrayList;
import java.util.Iterator;

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;

public class MyAppender extends AppenderSkeleton {

    public MyAppender() {

    }

    public void append(LoggingEvent event) {
        ArrayList<LoggingEvent> buffer = new ArrayList<LoggingEvent>();
        buffer.add(event);
        flushBuffer(buffer);
    }

    public void flushBuffer(ArrayList<LoggingEvent> buffer) {
        for (Iterator<LoggingEvent> i = buffer.iterator(); i.hasNext();) {
            try {
                LoggingEvent logEvent = (LoggingEvent) i.next();
                String messageRecievied = (String) logEvent.getMessage();
                //System.out.println(messageRecievied);

            } catch (Exception e) {

            }

        }

    }

    @Override
    public void close() {

    }

    @Override
    public boolean requiresLayout() {

        return false;
    }

}
4

3 回答 3

3

测试一下。

弄清楚用例是什么,包括边缘情况。
进行单元测试。

想想部署环境中可能破坏您的代码的任何变量。
创建集成测试以确保这些场景都能正常工作。

创建一个假接收器并对其进行测试。
您需要为您的接收器创建测试,以确保它正确验证。

于 2013-06-21T22:24:40.687 回答
1

能够预测具有任意输入的任意代码的结果是一个 NP 完全问题。因此,没有 100% 确定的方法可以保证代码没有问题(至少在宇宙热死之前。因此,您完全处于风险管理领域。

所以你会怎么做?

测试 单元和系统测试可以帮助您确信您的代码没有错误。使用类似JUnit的东西来做到这一点。使用此类套件,您可以提供特定的输入并检查以确保输出有效。但请注意,这只会针对您提供的输入进行测试,而不针对任何输入进行测试,因此即使是非常好的测试套件也可能会给您带来错误的信心。因此,第二道防线是……

指标 确保您正在测量并了解您所能了解的一切。如果您将新代码投入生产并将数据库写入增加十倍……您可能会遇到问题。或者您的错误消息速度可能会增加 - 或下降到零。除非您正在监控关键指标,否则您无法确定系统的健康状况。但是如果出现问题怎么办?

功能控制 在任何要添加新功能的复杂系统中,对这些功能进行控制是个好主意。将此视为一个全局切换,可让您在旧代码路径和新代码路径之间进行选择。例如:

public void append(LoggingEvent event) {
    if (FeatureController.isActive(this.FEATURE_NAME)){
      ArrayList<LoggingEvent> buffer = new ArrayList<LoggingEvent>();
      buffer.add(event);
      flushBuffer(buffer);
    }
}

这使您可以在新功能引起问题时快速关闭它们。

于 2013-06-21T22:42:22.100 回答
0

不可能存在这样的工具,否则它将是人工智能并且无需您就可以编写整个代码;-)

但如果可能的话,编写单元测试。通过良好的单元测试,您可以部署许多任务并且它在第一次运行时没有任何错误。(该工具称为 JUnit)

第二个工具:EclEmma eclipse 插件:它显示了 junit 测试覆盖率。你有 80% 或更多的覆盖率吗?不?(你太无耻了 ;-))

看看 appache log4j 的 src,我记得他们有一些单元测试,也许有一些用于现有的 appenders。

于 2013-06-21T22:33:35.763 回答