marco-introini / soap-logger

简单的PHP Soap记录器

V1.1.0 2022-12-15 09:59 UTC

This package is auto-updated.

Last update: 2024-09-15 14:07:07 UTC


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许可下作为开源软件发布