如何为每个会话创建一个日志文件?
How to create one log file per session?
我想为每个会话创建一个自己的日志文件。
我已经看到可以创建自己的记录器 (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');
是否可以使用服务或实现的 monolog 处理程序将其直接连接到会话?
覆盖路径对我来说很清楚。
您可以创建自己的处理程序:
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
我想为每个会话创建一个自己的日志文件。
我已经看到可以创建自己的记录器 (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');
是否可以使用服务或实现的 monolog 处理程序将其直接连接到会话?
覆盖路径对我来说很清楚。
您可以创建自己的处理程序:
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