noflash/shout

简单而强大的带有轮换支持的日志库。

v1.0.0 2015-02-08 00:05 UTC

This package is auto-updated.

Last update: 2024-09-04 12:21:25 UTC


README

代码仍然应该正常工作。然而,该项目不再维护。请使用 Symfony LoggerMonolog

Shout! Build Status

小型、快速且符合PSR-3的日志库。是的,它是为了责备你的每一个失败(可能甚至不是你的)而创建的。

特性

  • 将日志记录到任何文件/流(包括 php://stdout)
  • 可自定义的行格式
  • RFC 5424 和用户定义的日志级别
  • 限制日志记录到最大级别

要求

安装

使用composer

由于它的简单性和自动依赖关系管理,composer是推荐的安装方法。

  1. 当然你需要composer - 安装只需不到一分钟
  2. 在您的终端中运行 php composer.phar require noflash/shout 来安装Shout及其依赖
  3. vendor/autoload.php 包含在您的应用程序源代码中

手册

详细信息将很快提供。
基本上,您需要下载 PSR-3接口,将它们放在目录中(例如,vendor),并包含所有文件(或使用PSR-4兼容的自动加载器)。

用法

大多数时候,您会与其他需要 PSR-3 日志记录器的库一起使用Shout。配置与其他项目一起使用的记录器与在您自己的项目中使用它没有区别。基本用法只需要几行代码

<?php
require_once("vendor/autoload.php");

use noFlash\Shout\Shout;
$logger = new Shout();
$logger->info("Hello world");

此示例(也位于 examples目录 中,作为 BasicUsage.php)将在标准输出(stdout)上打印 <01.01.2015 13:22:46> [INFO] Hello world!,带有尾部换行符(\n)。
有关更多示例,您应该查看各种 示例 - 它们都有很好的注释。

可用方法

  • emergency/alert/...(message, context) - 每个日志级别都有一个同名的方法。因此,如果您想记录“warning”,只需使用 Shout->warning("Be warned!")。第二个参数可以是表示为字符串的任何信息的数组(通过(由 print_r() 格式化)。
  • log(level, message, context) - 它具有与以下方法相同的效果,因此调用 Shout->log("warning", "Be warned!") 产生与上述示例相同的结果。
  • rotate() - 执行手动日志轮换。默认情况下,它还会重置轮换计时器,以防止它传递 false 作为第一个参数。
  • flush() - 尝试以非阻塞模式发送剩余的缓冲区。如果缓冲区已完全写入,则返回 true

配置

Shout默认预配置,但允许配置几乎任何事情。以下列表指定了配置方法以及默认值(括号中指定)。

  • setDestination(php://stdout) - 指定日志目标,您可以使用任何有效的文件路径或支持写入的流位置。您还可以使用 %1$s 表示当前 Unix 时间戳或 %2$s 表示当前日期(格式根据 datetimeFormat)。目标也可以通过传递给 Shout 类构造函数的第一个参数来指定。
  • setWriteMode(Shout::FILE_APPEND) - Shout 打开新文件时,可以将其追加到文件中(Shout::FILE_APPEND)或截断并从开头写入(Shout::FILE_OVERWRITE)。此方法接受任何有效的 fopen() 模式,允许写入。使用此方法将重新打开文件。您也可以将模式作为第二个构造函数参数传递。
  • setBlocking(true) - 日志目标可以以阻塞或非阻塞模式打开。阻塞模式通常更快,但有时可能会锁定整个应用程序,直到完整日志消息被写入。使用非阻塞模式有另一个缺点 - 将日志消息发送给 Shout 后,它会在内部缓冲,然后推送到目标,如果下一次只能写入缓冲区的一部分,则将在下一次消息或调用 Shout->flush() 后再次尝试。
  • setRotate(false) - 禁用/启用基于 RotateInterval 的自动日志旋转。即使没有修饰符的目标也可以使用日志旋转(但只有在 WriteMode 设置为 Shout::FILE_OVERWRITE 时才有意义),但它旨在用于将目标设置为例如 /var/log/awesome_app_%d.log
  • setRotateInterval(86400) - 定义旋转发生的时间间隔,以秒为单位。请注意,Shout 不会在没有传递新消息的情况下触发旋转,因此如果您在 00:00:00 开始记录,将旋转设置为 1 小时,在 00:59:59 发送第一条消息,然后在 03:00:05 发送下一条消息,则日志将在 03:00:05 时旋转 - 不会创建空文件。
  • setLineFormat(<%1$s> [%2$s] %3$s [%4$s] [%5$s]\n) - 行应该如何格式化。您可以使用 6 个修饰符
    • %1$s - 日期
    • %2$s - 日志级别(大写)
    • %3$s - 消息文本
    • %4$s - 上下文(由 print_r() 格式化)
    • %5$s - Unix 时间戳
  • setDatetimeFormat(d.m.Y H:i:s) - 它接受任何 date() 兼容的格式。
  • setMaximumLogLevel(999) - 每个日志级别都包含其数值(默认值由 RFC 5424 中的 表 2. 系统日志消息严重性 定义)。此方法允许指定发送到目标的最大日志级别,例如,如果您将其设置为 1,则只有 ALERT 和 EMERGENCY 消息将通过。
  • setLevelPriority(level, value) - 事实上 PSR-3 声明禁止自定义日志级别,但 Shout 支持它们。默认情况下,具有自定义级别的消息没有优先级(因此它们被忽略 MaximumLogLevel)。此方法允许设置优先级(甚至可以更改内置级别的优先级,但不建议这样做)。