los / loslog
LosLog 提供了一些日志工具
Requires
- php: ^7.1
- laminas/laminas-diactoros: ^1.7 || ^2.0
- laminas/laminas-log: ^2.9
- laminas/laminas-stratigility: ^3.0
- psr/container: ^1.0
- psr/log: ^1.0
Requires (Dev)
- laminas/laminas-coding-standard: ^1.0
- mikey179/vfsstream: ^1.6
- phpstan/phpstan: ^0.9.2
- phpunit/phpunit: ^7.0
- rollbar/rollbar: ^1.4
- satooshi/php-coveralls: ^2.0
- squizlabs/php_codesniffer: ^2.7
Suggests
- rollbar/rollbar: Needed if you want to use Rollbar logger
This package is auto-updated.
Last update: 2024-09-10 23:55:00 UTC
README
简介
这是 2.0 版本的文档。请参阅 README-1.0 以获取 1.0 版本的文档。
本模块提供了一些有用的日志类
- LosLog = 适用于 PSR-7 兼容框架/应用的错误中间件
- HttpLog = 用于记录 PSR-7 应用程序中的请求和响应
- ErrorLogger = PHP 错误
- ExceptionLogger = PHP 异常
- StaticLogger = “快捷方式”到通用的文件记录器。可以附加到 Zend Server 中的 Z-Ray
- Rollbar writer = 一个 Rollbar 记录器。将错误和异常上传到 Rollbar 服务
要求
- php >= 5.6.0
- laminas/laminas-stratigility
- laminas/laminas-diactoros
- laminas/laminas-log
安装
有关 composer 文档,请参阅 getcomposer.org。
php composer.phar require los/loslog
用法
将文件 loslog.global.php.dist 复制到您的 config/autoload/ 中,将其重命名为 loslog.global.php,并根据需要更改默认选项。
LosLog 中间件
Zend Expressive
Expressive 2.0 引入了一种新的处理错误的方法,使用 ErrorHandler 的监听器和 delegator 工厂,因此这是首选方法。
将 delegator 工厂添加到 ErrorHandler,例如
return [ 'dependencies' => [ 'factories' => [ LosMiddleware\LosLog\LosLog::class => LosMiddleware\LosLog\LosLogFactory::class, ], 'delegators' => [ ErrorHandler::class => [ LosMiddleware\LosLog\ErrorHandlerListenerDelegatorFactory::class, ], ], ], ];
通用用法
如果使用其他框架,您可以将 LosLogFactory 添加到您的工厂系统中,手动创建一个 LosLog 实例或直接调用 LosLogFactory。
HttpLog 中间件
它将以紧凑或完整模式记录请求和响应。如果存在,它将包括 X-Request-Id 和 X-Response-Time 头部。
Zend Expressive
将中间件添加到您的 pipeline 中的第一个中间件,例如
return [ 'middleware_pipeline' => [ 'before' => [ 'middleware' => [ LosMiddleware\LosLog\HttpLog::class, ], 'priority' => 10000, ], ], ];
在 loslog.global.php(或 loslog.local.php)中设置所需的选项
'http_logger_file' => 'http.log', 'log_request' => true, 'log_response' => true, 'full' => false,
您可以将它与 los/request-id 和 los/response-time 集成。顺序很重要,使用如下
return [ 'middleware_pipeline' => [ 'before' => [ 'middleware' => [ LosMiddleware\RequestId\RequestId::class, LosMiddleware\LosLog\HttpLog::class, LosMiddleware\ResponseTime\ResponseTime::class ], 'priority' => 10000, ], ], ];
这将产生
2015-11-20T14:04:51+00:00 INFO (6): Request: GET /shop/v1/item/1 RequestId: 12dbf2d2-52c5-4954-b573-3aa2fee58612
2015-11-20T14:04:51+00:00 INFO (6): Response: 200 OK RequestId: 12dbf2d2-52c5-4954-b573-3aa2fee58612 ResponseTime: 14.90ms
ErrorLogger
要启用 ErrorLogger,只需在您的 public/index.php 中添加 registerHandlers 即可
Zend Framework 2
chdir(dirname(__DIR__)); require 'init_autoloader.php'; \LosMiddleware\LosLog\ErrorLogger::registerHandlers(); Laminas\Mvc\Application::init(require 'config/application.config.php')->run();
Zend Expressive
chdir(dirname(__DIR__)); require 'vendor/autoload.php'; /** @var \Interop\Container\ContainerInterface $container */ $container = require 'config/container.php'; \LosMiddleware\LosLog\ErrorLogger::registerHandlers('error.log', '/tmp'); /* @var \Mezzio\Application $api */ $app = $container->get('Mezzio\Application'); $app->run();
您可以使用记录器与您的 phpunit 测试一起使用。只需在创建 autoload 之后在 bootstrap 文件中调用它即可
\LosLog\Log\ErrorLogger::registerHandlers();
输出示例
2015-10-30T17:58:10-02:00 ERR (3): Error: Call to a member function format() on a non-object in <filename> on line <line>
默认日志文件为 data/log/error.log
ExceptionLogger
要启用 ExceptionLogger,只需在您的 public/index.php 中添加 registerHandlers 即可
Zend Framework 2
chdir(dirname(__DIR__)); require 'init_autoloader.php'; \LosMiddleware\LosLog\ExceptionLogger::registerHandlers('exception.log', '/tmp'); Laminas\Mvc\Application::init(require 'config/application.config.php')->run();
Zend Expressive
chdir(dirname(__DIR__)); require 'vendor/autoload.php'; /** @var \Interop\Container\ContainerInterface $container */ $container = require 'config/container.php'; \LosMiddleware\LosLog\ExceptionLogger::registerHandlers('exception.log', '/tmp'); /* @var \Mezzio\Application $api */ $app = $container->get('Mezzio\Application'); $app->run();
输出示例
2015-11-01T09:23:53-02:00 ERR (3): Exception- An exception was raised while creating "Application\Service\Test"; no instance returned in <dir>/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php in line 733.
Previous: "data/logs2/erros.log" cannot be opened with mode "a" in <dir>/vendor/zendframework/zendframework/library/Zend/Log/Writer/Stream.php in line 87.
Previous: fopen(data/logs2/erros.log): failed to open stream: No such file or directory in <dir>/vendor/zendframework/zendframework/library/Zend/Log/Writer/Stream.php in line 84.
Trace:
#0 <dir>/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(843): Laminas\ServiceManager\ServiceManager->createServiceViaCallback(Object(Closure), 'teste', 'Application\Service\Tes...')
#1 <dir>/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(487): Laminas\ServiceManager\ServiceManager->createFromFactory('teste', 'Application\Service\Tes...')
#2 <dir>/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php(442): Laminas\ServiceManager\ServiceManager->create(Array)
#3 <dir>/src/Application/Module.php(29): Laminas\ServiceManager\ServiceManager->get('Application\Service\Tes...')
#4 [internal function]: Application\Module->onBootstrap(Object(Laminas\Mvc\MvcEvent))
#5 <dir>/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func(Array, Object(Laminas\Mvc\MvcEvent))
#6 <dir>/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(208): Laminas\EventManager\EventManager->triggerListeners('bootstrap', Object(Laminas\Mvc\MvcEvent), Array)
#7 <dir>/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(146): Laminas\EventManager\EventManager->trigger('bootstrap', Object(Laminas\Mvc\MvcEvent))
#8 <dir>/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(243): Laminas\Mvc\Application->bootstrap()
#9 <dir>/public/index.php(23): Laminas\Mvc\Application::init(Array)
#10 {main}
默认日志文件为 data/log/exception.log
StaticLogger
此记录器通常用于记录开发或调试消息、数组和对象。只需在代码的任何地方调用它即可。
\LosMiddleware\LosLog\StaticLogger::save("Test message"); \LosMiddleware\LosLog\StaticLogger::save("Test message 2", 'test.log');
将生成
2015-10-29T19:32:30-02:00 DEBUG (6): Test message
或一个对象
\LosMiddleware\LosLog\StaticLogger::save($myObj);
将生成
2015-10-30T17:26:37-03:00 DEBUG (7): {"User\\Entity\\User":[],"nome":{"type":"string","content":"Leandro"},"sobrenome":{"type":"string","content":"Silva"},"permissao":{"type":"string","content":"usuario"},"email":{"type":"string","content":"leandro@leandrosilva.info"},"acessos":{"type":"object","class":"Doctrine\\ORM\\PersistentCollection"},"login":{"type":"NULL","content":null},"senha":{"type":"string","content":"admin"},"inputFilter":{"type":"NULL","content":null},"id":{"type":"integer","content":3},"cadastrado":{"type":"object","class":"DateTime"},"atualizado":{"type":"object","class":"DateTime"}}
默认日志文件为 data/log/static.log
Z-Ray
Z-Ray 是来自 Zend Server 的一个很棒的资源,它提供了有关请求、错误和框架的多个信息。它还具有添加您自己的信息的可能性,因此我添加了 StaticLogger 消息到其中。
更多信息可以在 这里 查看。
安装
LosLog 模块可通过官方 Z-Ray 插件系统获取,只需从您的 Zend Server UI 访问选项卡并安装它。
用法
只需使用 StaticLogger,消息就会出现在 Z-Ray 栏的 LosLog 部分中。
可选地,您可以将文件参数传递为“null”值,以仅使用 Z-Ray,而无需将消息写入文件
\LosMiddleware\LosLog\StaticLogger::save("Test message", null);