docker+php添加SesaLog扩展

php版本:PHP Version 7.4.6

seaslog版本:2.0.2

这样的组合,在docker php容器中,安装时,会报错,报错信息见下图:

 

 该错误是php7.4+2.0.2版本的bug,将seaslog的版本升级到2.1.0就可以了。

 

第一步,下载seaslog版本

http://pecl.php.net/package/SeasLog

第二部:操作编译

1)、将seaslog文件从宿主机copy到php容器中,格式 docker cp 宿主机目录 php容器名:目录

   docker cp /root/www/html/SeasLog-2.1.0.tgz php-fpm:/tmp

2)、进入容器

docker exec -it 容器ID /bin/bash

3)、进入文件放置目录后解压扩展包

tar -zxvf SeasLog-2.1.0.tgz 

4)、更改目录名称

mv SeasLog-2.1.0 seaslog  
(备注:不修改名字也行,用原名字安装)

5)、迁移到php的拓展目录下

cp -r seaslog /usr/src/php/ext 
(备注:/usr/src目录下没有/php/ext/目录,自己创建这两级目录,并且给附上777读写权限,chmod 777 php和 chmod 777 ext)

6)、进入copy后的存放目录,使用docker安装拓展的命令

docker-php-ext-install seaslog

7)、退出后重启容器

ctrl+D或者exit 退出

docker restart php-fpm(php容器名字)

 第三步:配置php.ini文件,因为docker php容器的php.ini文件做了映射到宿主机,所以直接在宿主机上面修改即可

                例如,我的docker php容器php.ini文件映射到宿主机上面的www/php.ini/php.ini-production文件,vim打开后添加如下内容:

 

 

[Seaslog]
extension=seaslog.so
;默认log根目录
seaslog.default_basepath = "/opt/logs/gd_trust/newtrust"
;
;;默认logger目录
seaslog.default_logger = "newtrust"
;
;;日期格式配置 默认"Y-m-d H:i:s"
seaslog.default_datetime_format = "Y-m-d H:i:s"
;
;;日志格式模板 默认"%T | %L | %P | %Q | %t | %M"
seaslog.default_template = "%M"
;
;;是否以目录区分Logger 1是(默认) 0否
seaslog.disting_folder = 0
;
;;是否以type分文件 1是 0否(默认)
seaslog.disting_type = 0
;
;;是否每小时划分一个文件 1是 0否(默认)
seaslog.disting_by_hour = 1
;
;;是否启用buffer 1是 0否(默认)
seaslog.use_buffer = 1
;
;;buffer中缓冲数量 默认0(不使用buffer_size)
seaslog.buffer_size = 100
;
;;cli运行时关闭buffer
;;1是 0否(默认)
seaslog.buffer_disabled_in_cli = 0
;
;;记录日志级别,数字越大,根据级别记的日志越多。;
;;0-EMERGENCY 1-ALERT 2-CRITICAL 3-ERROR 4-WARNING 5-NOTICE 6-INFO 7-DEBUG 8-ALL
;;默认8(所有日志)
;
;; 注意, 该配置项自1.7.0版本开始有变动。
;; 在1.7.0版本之前, 该值数字越小,根据级别记的日志越多:
;; 0-all 1-debug 2-info 3-notice 4-warning 5-error 6-critical 7-alert 8-emergency
;; 1.7.0 之前的版本,该值默认为0(所有日志);
seaslog.level = 6
;
;;日志函数调用回溯层级
;;影响预定义变量 %F 中的行数
;;默认0
seaslog.recall_depth = 0
;
;;自动记录notice 默认0(关闭)
seaslog.trace_notice = 0
;
;;自动记录warning 默认0(关闭)
seaslog.trace_warning = 0
;
;;自动记录错误 默认1(开启)
seaslog.trace_error = 0
;
;;自动记录异常信息 默认0(关闭)
seaslog.trace_exception = 0
;
;;日志存储介质 1File 2TCP 3UDP (默认为1)
seaslog.appender = 1
;
;;写入重试次数
;;默认0(不重试)
seaslog.appender_retry = 0
;
;;接收ip 默认127.0.0.1 (当使用TCP或UDP时必填)
seaslog.remote_host = "127.0.0.1"
;
;;接收端口 默认514 (当使用TCP或UDP时必填)
seaslog.remote_port = 514
;
;;接收端口的超时时间 默认1秒
seaslog.remote_timeout = 1
;
;;过滤日志中的回车和换行符 (默认为0)
seaslog.trim_wrap = 0
;
;;是否开启抛出SeasLog自身异常 1开启(默认) 0关闭
seaslog.throw_exception = 1
;
;;是否开启忽略SeasLog自身warning 1开启(默认) 0关闭
seaslog.ignore_warning = 1
;
;;是否开启性能追踪 1开启 0关闭(默认)
seaslog.trace_performance = 0
;
;;性能追踪时的千分比采样率
;;默认10,即百分之一
seaslog.trace_performance_sample_rate = 10
;
;;性能追踪时的开始层级 默认从第1层开始
seaslog.trace_performance_start_depth = 1
;
;;性能追踪时深度层级 默认5层
seaslog.trace_performance_max_depth = 5
;
;;性能追踪时每层的函数最大数 按wall_time降序排列top 默认top5
seaslog.trace_performance_max_functions_per_depth = 5
;
;;性能追踪时当前请求执行时间的记录阈值 只有当请求执行时间大于该值时,才记录性能日志 默认1000ms
seaslog.trace_performance_min_wall_time = 1000
;
;;性能追踪时每个方法执行时间的记录阈值 只有当方法执行时间大于该值时,才参与计算 默认10ms
seaslog.trace_performance_min_function_wall_time = 10

(添加完后,如果要看docker php容器中的php.ini文件是否映射成功了,docker php容器中不能直接查看文件,可以将容器中的php.ini文件复制出来,通过cp命令,然后再宿主机查看)

再重启php容器。

 

第四部:怎么验证是否安装成功

编写一个phpinfo文件,

<?

echo phpinfo();

?>

访问这个文件,如下效果:

 

posted on 2020-11-24 18:41  日月星辰$  阅读(216)  评论(0编辑  收藏  举报