kcmerrill / snitchin

此包最新版本(dev-master)的许可证信息不可用。

事物追踪器

dev-master 2015-07-03 05:06 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:12:40 UTC


README

##Snitchin Snitchin 是一个简单的日志记录器,但它不仅仅是一个日志记录器,我将其视为一种发射器。它可以处理文件、电子邮件、Slack 频道、HTTP GET/PUT 请求以及你所能想到的任何东西。

在深入具体细节之前,让我们先了解一些术语。

###术语表 追踪器 - 简而言之,它是一种将信息存储到文件、curl 请求、电子邮件、Slack 频道、控制台或你想象中的任何地方的方式。它是一个接受两个参数的回调函数。第一个参数是 $log_entry,它是一个数组,包含一些基本值,如时间戳、消息、级别和级别文本等。第二个参数是 $options,它是一个混合数组,用于使追踪器启动运行。例如,options 可以是一个字符串,表示要保存信息的文件路径。另一个快速示例可以是用于发布追踪器的 Slack 频道 URL。

级别 - 一个整数值(已给出预设),您可以自定义它,这将确定是否调用追踪器。预设包括以下内容

  • 致命: 60
  • 错误: 50
  • 警告: 40
  • 信息: 30
  • 调试: 20
  • 跟踪: 10

您可以使用 levels() 方法创建新级别。默认情况下,如果您创建一个不带数值的新级别,将分配 61。默认发射器级别是 60,这意味着您创建的任何自定义级别都将自动发射。

频道 - 一种区分不同发射事件的途径。您将获得一个“默认”频道,您可以创建所需数量的频道。一些可能感兴趣创建的频道:“测试”、“安全”、“特定于应用程序”等。

##安装 最简单的方法是使用 composer 和 Packagist。包名为 "kcmerrill/snitchin"。

##快速但全面的演示

  <?php
  require_once 'vendor/autoload.php';
  use \kcmerrill\utility\snitchin as snitchin;

  $log = new snitchin($argv);
  $log->channel('security','slack|file|email|newcustomthingy');
  $log['security']->snitcher('file','/tmp/snitchin.txt');
  $log['security']->snitcher('slack','https://hooks.slack.com/services/_something_/_else_/_goes_here_');
  $log['security']->snitcher('email','kcmerrill@gmail.com');
  $log['security']->snitcher('newcustomthingy', function($log_entry, $options) {
    /*
      Do something really cool with log_entry! Here what the 'file' entry looks like. Mostly.
    */
    echo '[' . date('F j, Y, g:i a', $log_entry['timestamp']) . '] ' . str_pad(strtoupper($log_entry['level']['text']), 10, ' ', STR_PAD_RIGHT) . $log_entry['msg'] . ' ' . json_encode($log_entry['additional_params'], TRUE) . PHP_EOL
  });
  
  if(bad_csrf_token()){
    $log['security']->CSRF('Oh no! Is someone hacking our website? No CSRF token!'); 
  } else {
    $log->info('A valid CSRF token was passed!');
  }

##让我们逐行分析

$log = new snitchin($argv);

创建一个新的 snitchin。Snitchin 类接受两个参数。snitchin($level, $default_snitches)。$Level 可以是一个整数值,也可以是 argv。在命令行上,您可以使用 -vvvvvvvv(最多 15 个 v)来确定发射级别。下一个参数 $default_snitches 接受一个字符串,或一个包含默认追踪器的字符串数组。有各种不同类型的追踪器。HTTP、Slack、文件、标准、JSON 等...

$log->channel('security','slack|file|email|newcustomthingy');

创建一个名为 security 的新频道。让此频道使用 Slack、文件和电子邮件进行事件。另外,让我们添加一个自定义追踪器。因为它是安全相关的,所以每当此频道被触发时,它都必须很重要。您现在可以通过使用它的名称 $log['security'] 来访问 security 频道。

$log['security']->snitcher('file','/tmp/snitchin.txt');
$log['security']->snitcher('slack','https://hooks.slack.com/services/_something_/_else_/_goes_here_', 61);
$log['security']->snitcher('email','kcmerrill@gmail.com');

在这里,我们设置了 security 频道的追踪器。文件追踪器接受一个字符串作为它的选项值。这告诉文件追踪器事件应保存的位置。对于 Slack 和电子邮件追踪器也是如此。Slack 追踪器接受由 Slack 生成的 webhook,而电子邮件追踪器接受一个字符串,该字符串是发送信息的电子邮件地址。需要注意的是 注意 Slack 中的整数值与其他追踪器不同?基本上,默认情况下,将使用默认发射器级别,除非有其他声明。在这种情况下,我们只想在级别大于或等于 61 时将事物发送到 Slack。

$log['security']->snitcher('newcustomthingy', function($log_entry, $options) {
  /*
    Do something really cool with log_entry! Here what the 'file' entry looks like. Mostly.
  */
  echo '[' . date('F j, Y, g:i a', $log_entry['timestamp']) . '] ' . str_pad(strtoupper($log_entry['level']['text']), 10, ' ', STR_PAD_RIGHT) . $log_entry['msg'] . ' ' . json_encode($log_entry['additional_params'], TRUE) . PHP_EOL
});

这就是snitchin真正派上用场的地方。它允许您执行所需的所有操作以生成自定义的snitches。在这个例子中,它只是将信息简单地输出到控制台。再次强调,您可以想到的任何内容都可以放在这里。发送电子邮件、抓取网页、发送电子邮件、发送到Slack等...

if(bad_csrf_token()){
  $log['security']->CSRF('Oh no! Is someone hacking our website? No CSRF token!');  
} else {
  $log->info('A valid CSRF token was passed!');
}

我们将在下一秒详细分解这个过程。假设这是一个已提交的表单,并且它有一个无效的CSRF令牌。我们希望将此消息发送到相应的安全通道,并通知相应的snitchers!

$log['security']->CSRF('Oh no! Is someone hacking our website? No CSRF token!');  

CSRF()仅在安全通道上执行,因为它的使用是$log['security']; 什么是CSRF()?这是我们刚刚创建的新级别。实时创建!默认情况下,实时创建的级别将具有61的发出级别!这意味着自定义级别将在默认情况下始终发出。执行上述行相当于执行以下操作

$log['security']->level('CSRF', 61);

如果level()函数的第二个参数提供了值,则会创建一个新的发出级别。如果为空,它将尝试返回该级别的值。

$log->info('A valid CSRF token was passed!');

记得我上面提到过,默认情况下,您提供了一个默认通道吗?上述行相当于执行以下操作

$log['default']->info('A valid CSRF token was passed!');

截图或它从未发生过。哎呀。观众真难搞。下面是例子!在下面的例子中,我们利用了标准snitcher(控制台输出)和Slack snitcher。您可以看到,我的Slack窗口是打开的,我只有Slack snitcher来响应发出级别大于61的事件(默认的自定义级别)。

Default snitchin behavior