【发布时间】:2018-11-17 22:58:22
【问题描述】:
我成功地实现了一个用于测试目的的 Monolog 记录器。现在我正试图在一个项目中使用它。该项目不使用任何 MVC 框架。
我正在尝试编写一个通用类文件来包装对 Monolog 实例的访问。
通用类文件:文件:app_log.php
require 'autoload.php';
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Processor\UidProcessor;
use Monolog\Processor\WebProcessor;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\ProcessIdProcessor;
use Monolog\Formatter\LineFormatter;
class app_log {
public function info(){
$logger = new Logger('applog');
$handler = new RotatingFileHandler('useractivity.log', 0, Logger::INFO);
$handler->setFormatter(new LineFormatter("[%datetime%] %extra.process_id% %channel%.%level_name%: %message% %extra% %context% \n"));
$logger->pushHandler($handler);
$logger->pushProcessor(new WebProcessor);
}
}
其他文件:users.php
include_once 'app_log.php';
class users extends dbconnector{
function login(){
// Some project code.
$logger = new app_log();
$logger->info('User logged successfully');
}
}
到目前为止效果很好,我想包括文件名、方法名、请求参数。但我在日志中得到app_log.php 文件名而不是users.php 和方法名称是'info' 而不是'login'。
例子:
[2018-06-07 20:55:50] 4410 applog.INFO: User logged successfully {"file":"/var/www/portal/lib/app_log.php","line":59,"class":"app_log","function":"info"} []
你们能帮忙吗?
【问题讨论】:
-
为什么不在
app_log类中使用singleton模式,它会让您的日志记录更加轻松。