如何在Yii2中为不同的目的维护不同的日志文件

时间:2014-07-01 10:02:35

标签: php logging config yii2

我正在使用Yii2进行项目。我有一个消费第三方服务的课程。这个类有两个方法sendRequest和processResponse。我希望在实际发送之前在sendRequest中维护有效负载的单独日志,并在进行任何处理之前为processResponse中收到的原始响应数据另一个日志。此外,我希望在两个日志上记录轮换,因为文件可能会无限增长,并希望两个文件都与默认的app.log分开。这可能吗?我如何使用Yii2 API实现这一点?

4 个答案:

答案 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');