通常、サービスを受けるだけlogger
で、ログは次の場所に移動します。
%kernel.root_dir%/%kernel.environment%.log
SOAPサービスからのメッセージをログに記録したいのは次の場合のみです。
%kernel.root_dir%/%kernel.environment%.soap.log
メインログファイルではありません。
クックブックを読みましたが、monologの構成方法がわかりません。
何か助け、手がかり?
MonologBundleは、フレームワーク全体で同じハンドラーを使用してすべてをログに記録します。つまり、サービスの1つが別のハンドラーにログを記録する必要がある場合は、独自のロガー/ハンドラーを作成し、それをサービスに挿入する必要があります。
これは(yamlの)設定の例である可能性があります:
services:
my_logger:
class: Symfony\Bridge\Monolog\Logger
arguments: [soap]
calls:
- [pushHandler, [@my_handler]]
my_handler:
class: Monolog\Handler\StreamHandler
# 200 = INFO, see Monolog::Logger for the values of log levels
arguments: [%kernel.root_dir%/%kernel.environment%.soap.log, 200]
soap_service:
class: Your\Soap\Client
arguments: [@my_logger]
これがそれを明らかにすることを願っています。
更新: symfony 2.1以降、どのチャンネルがどのハンドラーを受け取るかを設定することもできるので、代わりに次のようなことを行うことができます:
services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }
これにより、新しいsoapチャネル(つまり、すべてのハンドラーを受信するロガーインスタンス)が作成され、このチャネルにさまざまなハンドラーが構成されます。
monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
channels: [!soap]
soap:
type: stream
path: %kernel.root_dir%/%kernel.environment%.soap.log
level: info
channels: [soap]
これは、メインハンドラーが石鹸チャネル以外のすべてを受信し、石鹸ハンドラーが石鹸チャネルのみを受信することを意味します。channels
メインログファイルにすべてを含めるだけでなく、soapログのみのコピーを個別に持つ場合は、メインハンドラーのキーを削除することもできます。これにより、柔軟性が大幅に向上します。ご覧のとおり、チャネルは配列であるため、必要なチャネルを一覧表示したり、ブラックリスト!name
表記を使用して一部を除外したり、その他すべてを含めたりできます。
同様の問題が発生したため、Monologサービスの代わりにMonologライブラリを直接使用することにしました。
MonologはMonolog\Handler\StreamHandler
ファイルへの書き込みに使用します。githubページには簡単な例があります。
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');
サービスを引き続き使用して、新しいハンドラーをプッシュすることは可能かもしれません(完了したらポップします。そうしないと、カスタムログに必要以上に誤って書き込む可能性があります)が、これはテストしていません。正直なところ、ライブラリを直接使用する方が簡単なようでした。
このリンクで説明されているように、 config.ymlにカスタムチャネルを作成することで同じ問題を解決しました。メッセージを別のファイルに記録する方法。
monolog:
channels: ['my_logger']
handlers:
my_logger:
level: debug
type: stream
path: '%kernel.logs_dir%/my_logger.log'
channels: [my_logger]
この後、 monolog.logger.my_loggerという名前の動的に作成されたサービスを使用してルーガーにアクセスできます。