ThinkPHP5.1框架下⾃带⽇志功能详解及远程调试
use think\facade\Log;
Log::init([
// ⽇志记录⽅式,⽀持 file socket 或者⾃定义驱动类 'type' => 'File',
//⽇志保存⽬录
葵花脱粒机
'path' => "../logs/$dir/",
//单个⽇志⽂件的⼤⼩限制,超过后会⾃动记录到第⼆个⽂件
'file_size' =>2097152,
室外高增益天线//⽇志的时间格式,与date函数设置⼀致,可以⾃定义时间格式,默认是` c `
'time_format' =>'YmdHis c',
//是否⽤json格式写⼊到⽇志⽂件
'json' => false,
]);
⽇志的配置⽂件是配置⽂件⽬录下的log.php⽂件,如果需要针对不同的模块设置不同的⽇志类型,则需要在模块配置⽬录下的log.php中配置,系统在进⾏⽇志写⼊之前会读取该配置⽂件进⾏初始化。 ⽇志配置参数根据不同的⽇志类型有所区别,内置的⽇志类型包括:file、socket,⽇志类型使⽤type参数配置即可。
⽇志驱动
驱动通⽤
参数 描述
type ⽇志类型(或者驱动类名称)
level 允许记录的⽇志级别
allow_key 允许⽇志写⼊的授权key
close 是否关闭⽇志写⼊(V5.1.8+)
File 驱动
参数 描述
file_size ⽇志⽂件⼤⼩限制(超出会⽣成多个⽂件)
path ⽇志存储路径
apart_level 独⽴记录的⽇志级别
时间记录格式,与date函数设置⼀致,如 'YmdHis c',
time_format
可以⾃定义时间格式,默认是'c'
语音云平台single 是否单⼀⽂件⽇志
max_files 最⼤⽇志⽂件数(超过⾃动清理 V5.1.6+)
json 是否⽤json格式写⼊到⽇志⽂件
json 是否⽤json格式写⼊到⽇志⽂件
Socket 驱动
Socket驱动 需要中间服务作为转发,⼤概的逻辑是通过向 localhost的某个端⼝(默认1116)进⾏ 资源传输,然后通过 中间服务 发送给客户端
本质上就是 CURL+WebSocket,TP框架的逻辑可以查看 Socket.php。这⾥推荐使⽤ socketlog,web开发的时候 可以配
置 chrome的 socketlog插件 ⼀起使⽤。
撞钉tp-config
Log::init([
'type' => 'Socket'
]);
SocketLog-client
安装 chrome的 socketlog插件
配置 socketlog插件,如图
SocketLog-server
a:
Centos 7安装npm,运⾏以下命令(已安装的可跳过)
b:
摄像机三角支架运⾏ npm install -g socketlog-server直接安装。
运⾏ socketlog-server 启动服务。
将会在本地起⼀个websocket服务 ,监听端⼝是1229 。
socketlog-server服务器使⽤到1229和1116端⼝,若服务器开启了防⽕墙,需要开放这两个端⼝
效果如下:
server
client
⽇志写⼊
版本新增功能
5.0.4命令⾏模式下⽇志⾃动定时写⼊
5.0.4debug⽇志类型仅⽤于调试模式记录
⼿动记录
⼀般情况下,系统的⽇志记录是⾃动的,⽆需⼿动记录,但是某些时候也需要⼿动记录⽇志信息,Log类提供了3个⽅法⽤于记录⽇志。⽅法描述 Log::record()记录⽇志信息到内存
Log::save()把保存在内存中的⽇志信息(⽤指定的记录⽅式)写⼊
耐老化测试
Log::write()实时写⼊⼀条⽇志信息
由于系统在请求结束后会⾃动调⽤Log::save⽅法,所以通常,你只需要调⽤Log::record记录⽇志信息即可。
record⽅法⽤法如下:
Log::record('测试⽇志信息');
默认的话记录的⽇志级别是INFO,也可以指定⽇志级别:
Log::record('测试⽇志信息,这是警告级别','notice');
采⽤record⽅法记录的⽇志信息不是实时保存的,如果需要实时记录的话,可以采⽤write⽅法,例如:
Log::write('测试⽇志信息,这是警告级别,并且实时写⼊','notice');
⽇志级别
ThinkPHP对系统的⽇志按照级别来分类,并且这个⽇志级别完全可以⾃⼰定义,系统内部使⽤的级别
包括:log 常规⽇志,⽤于记录⽇志
error 错误,⼀般会导致程序的终⽌
notice 警告,程序可以运⾏但是还不够完美的错误
info 信息,程序输出信息
debug 调试,⽤于调试信息
sql SQL语句,⽤于SQL记录,只在数据库的调试模式开启时有效
系统提供了不同⽇志级别的快速记录⽅法,例如:
Log::error('错误信息');
Log::info('⽇志信息');
// 和下⾯的⽤法等效
Log::record('错误信息','error');
Log::record('⽇志信息','info');