从Docker容器记录PHP API请求信息

从Docker容器记录PHP API请求信息,php,nginx,docker,Php,Nginx,Docker,我正在做一个项目,我有一个iOs应用程序连接到一个PHP API。我想将所有传入的请求记录到网站服务中,以用于开发目的(即我需要一个可以关闭并基于环境变量的解决方案)。API在docker容器中运行,该容器作为docker compose服务启动 PHP API没有使用任何类型的MVC框架 我的PHP经验有限,因此我知道我还有一些研究工作要做,但同时,我希望能从以下问题入手: 是否有一个编写器库,我可以将它插入到我的PHP代码中,并将其写入一个详细的日志 我是否可以在nginx或php fpm

我正在做一个项目,我有一个iOs应用程序连接到一个PHP API。我想将所有传入的请求记录到网站服务中,以用于开发目的(即我需要一个可以关闭并基于环境变量的解决方案)。API在docker容器中运行,该容器作为docker compose服务启动

PHP API没有使用任何类型的MVC框架

我的PHP经验有限,因此我知道我还有一些研究工作要做,但同时,我希望能从以下问题入手:

  • 是否有一个编写器库,我可以将它插入到我的PHP代码中,并将其写入一个详细的日志
  • 我是否可以在
    nginx
    php fpm
    容器级别插入任何内容,以便在访问php代码之前记录对这些容器的请求
  • 是否需要在
    nginx
    php fpm
    容器中配置任何内容,以确保在运行
    docker compose up
    时跟踪日志
以下是我的日志记录需求:

  • 请求方法
  • 请求URL
  • GET查询参数、PUT和POST参数(将采用JSON格式)
  • 响应代码
  • 响应体
    • 我感兴趣的日志都是application/json。然而,我不介意厨房水槽选项,任何东西都会被记录下来
  • 请求和响应头
    • 99%的时间我都不需要这些,所以它们不是我的需要。但最好将它们配置为开/关
下面是docker compose.yml文件

version: '2'
services:

  gearman:
    image:gearmand

  redis:
    image: redis

  database:
    image: mariadb
    environment:
     MYSQL_ROOT_PASSWORD: ******
     MYSQL_DATABASE: database
    volumes:
     - dbdata:/var/lib/mysql
    ports:
      - 3306:3306

  sphinx:
    image:sphinx
    links:
      - database

  memcached:
    image: memcached
    ports:
     - "11211:11211"

  php_fpm:
    image:php-fpm
    links:
     - redis
     - memcached
     - database
    environment:
     REDIS_SERVER: redis
     DATABASE_HOST: database
     RW_DATABASE_HOST: database
     RO_DATABASE_HOST0: database
     DATABASE_USER: root
     DATABASE_PASS: ******
    volumes:
     - ./website:/var/www/website/
     - /var/run

  nginx:
    image:nginx
    links:
     - php_fpm
    ports:
     - "80:80"
    volumes_from:
      - php_fpm

volumes:
  dbdata:
    driver: local

容器使用所有默认设置进行日志记录,但我的客户端指向另一台服务器,只是为了留下一条线索

在php_fpm容器内(
docker exec-it dev_php_fpm_1/bin/bash
),您可以
cat/etc/php5/fpm/php.ini
,其中显示默认的错误日志设置:

; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog
只需用户写入默认操作系统记录器

使用docker logs-f-t dev_php_fpm_1记录您的php_fpm服务


更新:

如果出于您的目的错误日志被截断,您也可以简单地编写一个函数

file_put_contents(realpath(dirname(__FILE__)) . './requests.log', $msg, FILE_APPEND);
然后跟踪它:
tail-f./requests.log
-从容器内部或容器外部(如果您使用的是本地卷)