许多年前,我写了一个名为Kaboom的笑话库。它的目的是检测开发环境中的错误报告是否配置不当,如果是的话,就抛出一个异常,以达到Kaboom的目的。
昨天,我正在为Sculpin(一个我参与的开源静态网站生成器)写一些代码,我想确保当我走到其他优先事项时,可能包含路径遍历漏洞的特定代码不会被遗忘。
为了达到这个目的,我添加了一个unix的时间戳检查,"今天加一天",硬编码为魔法数字。这样,当我回到PR的时候,它就会以一种非常明显的方式停止工作,让我知道这个问题还没有得到解决。
然后,我在推特上发布了这个消息。一些人对它很感兴趣。当然,他们也有顾虑,但这种反应激励我重写我的Kaboom项目,并将其发布给Packagist。
介绍一下Kaboom v1.0
在我今天发布的Kaboom 1.0中,你可以配置绊网(使用->todo() 或->custom() 方法),当这些绊网被绊倒时,你定义的行为就会发生。默认情况下,这意味着抛出一个异常,但它可以被修改为包括写到日志或任何你想要的自定义实现。你可以让它通过Twilio发送一个消息,在Slack中通知你,更新相关的Jira票据--任何你想要的。(注意:Twilio/Slack/Jira处理程序还没有被编码。)
要开始使用,请运行composer require beryllium/kaboom ,然后像这样在你的代码中实例化它。
$kaboom = new Beryllium\Kaboom\Kaboom();
$kaboom->todo(
"Get this done before halloween!",
"2020-10-20"
);
10月20日之后,上述代码会开始抛出异常--所以你会马上知道有什么东西被遗漏了。
哦,但你不希望它破坏生产?如果你像这样将Kaboom实例化,那么生产环境将继续正常工作。
$kaboom = new Beryllium\Kaboom\Kaboom(
$env === 'prod'
? new Beryllium\Kaboom\Handlers\NullHandler()
: new Beryllium\Kaboom\Handlers\ExceptionHandler()
);
生产环境会收到一个Null处理程序,当绊网被触发时,它是一个无用的东西。
readme中还有一些调用的例子,以及关于使用->custom() 方法来建立基于匿名函数的绊网的信息。
$env = 'dev';
$kaboom = new Kaboom(new LoggingHandler($logger));
$kaboom->custom(
"Error reporting is not set correctly!",
fn() => strtolower($env) === 'dev' && error_reporting() !== -1
);
LoggingHandler在其构造函数中接受任何PSR-3兼容的LoggerInterface。
在依赖注入容器中设置你的配置,可以让你得到你想要的复杂度。内含的GroupHandler ,让你可以堆积一堆处理程序,所有的处理程序都会依次被ping。来吧,推出你自己的处理程序--如果你想出了一个更好的,请把它贡献出来。
祝您愉快!许多快乐的Kabooms!