2017-01-04 7 views
0

laravel 5.3でカスタムログを作成し、実行時にいくつかの追加情報を追加する必要があります。MonologとLaravelを使用してランタイムでログフォーマットを変更する

これまでのところ、私はそれをやっていましたが、私ができることは、ログの新しいインスタンスを追加することでコードが機能しないためです。

私のハンディキャップは、私が戻っていかなければならないか、これが可能であれば、ロギングシステムの現在のハンドラであり、単純にフォーマット変更を渡すことです。

以下のコードは、フォーマット行を変更することができますが、一度だけ変更することができます。

私がもう一度それを実行すると、行の複製を開始し、それ以外の方法でハンドラを作成するか、適切な既存のものを使用します。

$maxFiles = config('app.log_max_files'); 
$path  = storage_path('/logs/cprsync.log'); 

// Really I don't need this because this are on Laravel App, but with this method y can create a $handler for modify format 
$handler = new RotatingFileHandler($path, is_null($maxFiles) ? 5 : $maxFiles, config('app.log_level')); 
(is_null(config('cprsync.activejob'))) ? $job = '' : $job=' ['.config('cprsync.activejob').']'; 
$logFormat = "[%datetime%] [%level_name%]".$job.": %message% %context% %extra%\n"; 

$formatter = new LineFormatter($logFormat,null,true,true); 
$handler->setFormatter($formatter); // What I really want is to make this change ... 

// Push handler 
$log->getMonolog()->pushHandler($handler); 

答えて

0

(symfonyの中にあなただけservices.ymlにいくつかのYAMLのルールを置くことができ、あなたのログフォーマットを変更したように)、それはきれいだ場合、私は知りませんが、これは非常に有効であると思われますオプションと基本的にはあなたがすでにやっていることに基づいています:

http://laravel-tricks.com/tricks/monolog-for-custom-logging

TL; DRは:基本的には、コードOPが含まれている機能write()でカスタムログクラスを作成し掲載しています。あなたのファサードにそのクラスを追加してログすることができます。MyCustomLogger::write($message);

EDIT:これは実行時にフォーマットを変更しないため、実際にOPが要求したものではありません。

+0

あなたの答えは質問に答えることはできませんが、別の質問やその他の回答につながります。私は、ログの追加クラスを行うにはパスを求めていませんが、ログの形式だけを変更する可能性については、既にアプリケーションに存在します。私はまた、修正がすでに私のために働いていることを示しました。ありがとうございました – abkrim

+1

ええ、私はあなたが投稿した後、ほんの数秒後にそれを理解しました。私の意見では、後で見つけて拡張して修正する方が簡単なので、いくつかのログラインでいくつかの魔法を使うのではなく、明示的なクラスを宣言する方が良いでしょう。あなたの質問にまだ答えません;) – Loek

関連する問題