从Docker容器

时间:2017-01-19 00:02:23

标签: php nginx docker

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

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

我的PHP经验有限,所以我知道我之前已经有一些研究,但与此同时,我很欣赏以下问题的任何跳跃:

  • 是否有可以插入我的PHP代码的作曲家库,该代码库会写入有尾日志?
  • 我可以在nginxphp-fpm容器级别插入任何内容,以便在获取PHP代码之前记录对这些容器的请求吗?
  • 我需要在nginxphp-fpm个容器中配置任何内容,以确保在运行docker-compose up时日志被挂起?

以下是我的日志记录需求:

  • 请求方法
  • 请求网址
  • 获取查询参数,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

1 个答案:

答案 0 :(得分:0)

容器使用所有默认设置进行记录,但我的客户端指向另一台服务器,但只留下一条路径。

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

; 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

只需用户error_log function即可写入默认操作系统记录器。

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

更新

如果出于您的目的而截断error_log,您也可以简单地编写一个函数

file_put_contents(realpath(dirname(__FILE__)) . './requests.log', $msg, FILE_APPEND);

然后尾随它:tail -f ./requests.log - 无论是从容器内部还是从容器外部,如果您使用的是本地卷。