これも可能ですが、まず既存のハンドラを削除する必要があります。
Monologにはすでにいくつかのログハンドラが設定されていますので、$monolog->popHandler();
のものを取り除く必要があります。次にWistar'sの提案を使用して、新しいログを追加する簡単な方法は$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
です。複数のハンドラ
については
public function fire (Writer $log)
{
$monolog = $log->getMonolog();
$monolog->popHandler();
$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
$log->useFiles('/var/log/nginx/ds.console.log', $level='error');
...
あなたは(たとえばあなたがSentryを使用している場合)、複数のログハンドラを設定している場合はハンドラが明確である前に、あなたは1以上をポップする必要があるかもしれません。ハンドラを保持したい場合は、ハンドラをすべてループし、保持したいものをreaddする必要があります。
$monolog->popHandler()
は、存在しないハンドラをポップしようとすると例外がスローされます。そのためには、jump through hoopsを動作させる必要があります。ログファイルをより細かく制御するために
public function fire (Writer $log)
{
$monolog = $log->getMonolog();
$handlers = $monolog->getHandlers();
$numberOfHandlers = count($handlers);
$saveHandlers = [];
for ($idx=0; $idx<$numberOfHandlers; $idx++)
{
$handler = $monolog->popHandler();
if (get_class($handler) !== 'Monolog\Handler\StreamHandler')
{
$saveHandlers[] = $handler;
}
}
foreach ($saveHandlers as $handler)
{
$monolog->pushHandler($handler);
}
$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
$log->useFiles('/var/log/nginx/ds.console.log', $level='error');
...
、代わりに$log->useFiles()
のあなたは、このようなものを使用することができます
$logStreamHandler = new \Monolog\Handler\StreamHandler('/var/log/nginx/ds.console.log');
$pid = getmypid();
$logFormat = "%datetime% $pid [%level_name%]: %message%\n";
$formatter = new \Monolog\Formatter\LineFormatter($logFormat, null, true);
$logStreamHandler->setFormatter($formatter);
$monolog->pushHandler($logStreamHandler);
を私はそれを試したことがないが、あなたはこの 'ログイン:: useFiles($パスを、と思いますか$レベル) 'は助けることができますか?参照してください:https://laravel.com/api/5.3/Illuminate/Log/Writer.html#method_useFiles – Wistar
@Wistarは提案に感謝しますが、それは違いはありません。 –
(http://stackoverflow.com/questions/32552450/laravel-how-to-log-info-to-separate-fileを参照)は、このメソッドを使用するレポートを持っています。 2番目の答えに示唆されていることを試しましたか? Log :: info([info to log]); ' – Wistar