【问题标题】:How to create one log file per session?如何为每个会话创建一个日志文件?
【发布时间】:2015-02-02 14:17:52
【问题描述】:

我想为每个会话创建一个自己的日志文件。
我已经看到可以创建自己的记录器(source):

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

是否可以使用服务或实现的独白处理程序直接将其连接到会话?
覆盖路径对我来说很清楚。

【问题讨论】:

  • 你可以做的是用会话值命名日志文件
  • 记得管理销毁的会话(impl custom handler)
  • @AhmedDaou 哪个处理程序支持这个?
  • @CSchulz 类似这样的'path/to/your_'.$_SESSION['session'].'log'
  • 哼...所以终于没有注册服务之类的了?

标签: symfony logging monolog symfony-2.6


【解决方案1】:

您可以创建自己的处理程序:

class LogSessionHandler extends AbstractProcessingHandler
{
  protected $session;

  public function setSession(\Symfony\Component\HttpFoundation\Session\Session $session)
  {
    $this->session = $session;
  }

  protected function write(array $record)
  {
    $fp = fopen('/path/to/log/'.$this->session->getId().'.log','a');
    if ($fp) fwrite($fp, (string) $record['formatted']);
    fclose($fp);
  }
}

在 services.yml 中:

logger_session:
    class: ..\..\SessionDatabaseHandler
    calls:
        - [ setSession, [ @session ] ]

在 config_prod.yml:

monolog:
    handlers:
        ...
        session:
            type: service
            level: error
            id: logger_session

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多