通常、logger
サービスを取得するだけで、ログは次の場所に移動します。
%kernel.root_dir%/%kernel.environment%.log
SOAP services [〜#〜] only [〜#〜]にメッセージを記録したい:
%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]
これは、メインハンドラーがsoapチャネル以外のすべてを受け取り、soapハンドラーがsoapチャネルのみを受け取ることを意味します。また、メインログファイルにすべてを保持するが、soapログのみのコピーを個別に保持する場合は、メインハンドラーのchannels
キーを削除することもできます。これにより柔軟性が大幅に向上します。また、チャンネルは配列であるため、必要なチャンネルを一覧表示するか、ブラックリスト!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という名前のサービスを使用してloogerにアクセスできます