marco-introini / soap-logger
简单的PHP Soap记录器
V1.1.0
2022-12-15 09:59 UTC
Requires
- php: >=8.1
- ext-json: *
- monolog/monolog: ^3.2
- nesbot/carbon: ^2.62
Requires (Dev)
- pestphp/pest: ^1.22
- pestphp/pest-plugin-faker: ^1.0
- phpunit/phpunit: ^9
README
安装
可以使用Composer进行安装
composer require marco-introini/soap-logger
使用
日志
主日志类可以使用以下参数实例化
- monolog处理器
- 行格式化器
- Soap服务的名称
- 方法的名称
- 如果请求包含soapAction,此信息将自动添加到日志中
$handler = new RotatingFileHandler($_ENV['LOGFILE'], 3,Level::Info); $formatter = new SplunkLineFormatter(allowInlineLineBreaks: true, quoteReplacement: ""); $soapLogger = new SoapLogger($handler,$formatter,"MyDemoService","demoMethodRead"); $soapLogger->log(file_get_contents('php://input'),Step::FROM_CALLER_TO_SERVICE);
记录SoapServer请求和响应XML
以下是获取请求和响应的Soap信封的方法
请求
获取请求非常简单
$request = file_get_contents('php://input'); $soapLogger->log(file_get_contents('php://input'),Step::FROM_CALLER_TO_SERVICE);
响应
获取响应稍微困难一些。我们必须捕获handle()方法的输出。看这个例子
ob_start(); $server = new SoapServer("mywsdlfile.wsdl", array( 'classmap' => array( 'MyMethodResponse' => MyMethodResponse::class, 'MyMethodRequest' => MyMethodRequest::class ) )); $server->addFunction("myMethod"); $server->handle(); $response = ob_get_contents(); ob_end_clean(); $soapLogger->log($response,Step::FROM_SERVICE_TO_CALLER); echo $response;
在$response变量中我们有响应XML。
重要:一定要记得输出响应!
基于文件大小的轮转
非常常见的Soap日志非常冗长,因此有一个基于文件大小的Monolog日志轮转方法非常有用。这在使用普通Monolog时是不可能的。因此,我编写了一个简单的工厂来生成一个可以进行日志轮转的Monolog处理器。
make工厂接受以下参数
- 日志文件路径
- 最大字节数
- 要轮转的文件数量(将保留这些数量的日志轮转)
- 日志级别
$handler = RotateOnFileSizeHandler::make($_ENV['LOGFILE'],50000000,1,Level::Info); $formatter = new SplunkLineFormatter(allowInlineLineBreaks: true, quoteReplacement: ""); $soapLogger = new SoapLogger($handler,$formatter,"MyDemoService","myMethod","myCorrelationId"); $soapLogger->log(file_get_contents('php://input'),Step::FROM_CALLER_TO_SERVICE);
使用标准Monolog Logger
$handler = RotateOnFileSizeHandler::make($logfile, 1000, 1, Level::Info); $logger = new Monolog\Logger($logTemp); $logger->pushHandler($handler); $logger->log(Level::Info,'log message');
测试
测试是使用Pest创建的
./vendor/bin/pest
许可
该项目在MIT许可下作为开源软件发布