我正在使用Yii2进行项目。我有一个消费第三方服务的课程。这个类有两个方法sendRequest和processResponse。我希望在实际发送之前在sendRequest中维护有效负载的单独日志,并在进行任何处理之前为processResponse中收到的原始响应数据另一个日志。此外,我希望在两个日志上记录轮换,因为文件可能会无限增长,并希望两个文件都与默认的app.log分开。这可能吗?我如何使用Yii2 API实现这一点?
答案 0 :(得分:41)
我最终通过在@ app / config / main.php中添加2个额外的文件目标来恢复使用Yii2记录器。文件目标分别有类别= ['订单']和[' pushNotifications'],因此在我的代码中我使用:
Yii::info($message, 'pushNotifications');
或
Yii::info($message, 'orders');
这是我的日志配置:
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
[
'class' => 'yii\log\FileTarget',
'levels' => ['info'],
'categories' => ['orders'],
'logFile' => '@app/runtime/logs/Orders/requests.log',
'maxFileSize' => 1024 * 2,
'maxLogFiles' => 20,
],
[
'class' => 'yii\log\FileTarget',
'levels' => ['info'],
'categories' => ['pushNotifications'],
'logFile' => '@app/runtime/logs/Orders/notification.log',
'maxFileSize' => 1024 * 2,
'maxLogFiles' => 50,
],
],
],
答案 1 :(得分:1)
由于我不太确定如何配置Yii2记录器来做我想做的事情,并且谷歌搜索主题并没有多大帮助我决定使用第三方记录器。我选择的是Monolog。仅在一个类中需要此功能,因此我创建了一个静态getLogger方法,该方法返回了Monolog \ Logger的实例。
public static function getLogger($name) {
$logger = new \Monolog\Logger($name);
$logger->pushHandler(new \Monolog\Handlers\RotatingFileHandle(Yii::getAlias("@app/runtime/logs/$name.log")), \Monolog\Logger::INFO);
return $logger;
}
然后在sendRequest方法中我使用:
static::getLogger('orders')->info($outgoingXmlPayload.$curlResponseXml);
在processResponse方法中,我使用:
static::getLogger('pushNotifications')->info($notificationXml);
我很高兴听到(或阅读)任何有更好解决方案的人。谢谢。 --Ab
答案 2 :(得分:0)
如果我们需要在累积文件中收集更多子类别,Asterisk *
也可能会派上用场:
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'flushInterval' => 100, // may prevent from memory exhaustion
'targets' => [
[
'class' => 'yii\log\FileTarget',
'categories' => ['eshop1*'],
'logFile' => '@app/runtime/logs/eshop1.log',
'logVars' => [], // don't log global vars
],
[
'class' => 'yii\log\FileTarget',
'categories' => ['eshop2*'],
'logFile' => '@app/runtime/logs/eshop2.log',
'logVars' => ['GET', 'POST'], // log some globals
'exportInterval' => 100, // may prevent from memory exhaust
],
],
],
答案 3 :(得分:0)
这项工作对我来说,对于开发日志来说
'components' => [
'log' => [
'traceLevel' => YII_DEBUG ? 10 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'logFile' => '@runtime/logs/dev.log',
'categories' => ['dev'],
'levels' => ['trace'],
],
],
],
已使用
Yii::debug('log step 1', 'dev');