日志配置
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 | 独立记录的日志级别 |
time_format | 时间记录格式,与date函数设置一致,如 'YmdHis c',可以自定义时间格式,默认是'c' |
single | 是否单一文件日志 |
max_files | 最大日志文件数(超过自动清理 V5.1.6+) |
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插件
chrome浏览器 翻墙访问: https://chrome.google.com/webstore/detail/socketlog/apkmbfpihjhongonfcgdagliaglghcod 进行安装
配置 socketlog插件,如图
SocketLog-server
a:
Centos 7安装npm,运行以下命令(已安装的可跳过)
运行命令:curl -sL https://rpm.nodesource.com/setup_13.x | bash -和yum install -y nodejs
b:
运行 npm install -g socketlog-server直接安装。
运行 socketlog-server 启动服务。
将会在本地起一个websocket服务 ,监听端口是1229 。
socketlog-server服务器使用到1229和1116端口,若服务器开启了防火墙,需要开放这两个端口
效果如下:
server
client
日志写入
版本 | 新增功能 |
---|---|
5.0.4 | 命令行模式下日志自动定时写入 |
5.0.4 | debug 日志类型仅用于调试模式记录 |
手动记录
一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,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');