6.0의 로그 비유는 이전 버전에 비해 훨씬 개선되었습니다. 주요 새로운 기능은 다음과 같습니다.
·로그 정보 형식 지정
·다채널 쓰기 지원
· 지연/실시간 쓰기
·로그 정보 처리 이벤트
·로그 수준 지정 채널 쓰기
·로그/채널 닫기 지원
새 버전 변경 사항은 다중 채널 쓰기를 지원한다는 것입니다. 즉, 동시에 추가 로그 채널 쓰기를 추가할 수 있거나 일부 로그 유형에 대해 오류를 이메일 알림으로 보내도록 선택할 수 있습니다. 일부 비정상적인 로그.
기타 변경 사항은 주로 다음과 같습니다.
·WEB 로그와 CLI 로그가 병합되어 단일 형식으로 통합됩니다.
·액세스 정보는 더 이상 기본적으로 기록되지 않으며 직접 기록할 수 있습니다. 필요한 경우
· 독립적인 로그도 JSON 형식 기록을 지원합니다.
로그의 관련 구성은 config/log.php 파일에서 설정할 수 있습니다. 이 문서에서는 주로 새 버전의 변경 사항을 설명합니다. 통나무.
로그 채널
로그 채널의 개념은 로그 정보를 위한 로그 공간을 생성하는 것과 동일합니다. 각 로그 채널의 로그 정보는 독립적인 쓰기 메커니즘 또는 구성 매개변수를 사용합니다. 로그 정보를 사용하면 채널 쓰기를 동적으로 전환하고 동시에 여러 로그 채널에 기록되는 동일한 로그 정보를 지원할 수도 있습니다.
로그 구성 파일의 채널 구성에서 채널을 정의할 수 있습니다. 기본적으로 파일 채널은 하나만 정의됩니다.
// 日志通道列表 'channels' => [ 'file' => [ // 日志记录方式 'type' => 'File', // 日志保存目录 'path' => '', // 单文件日志写入 'single' => false, // 独立日志级别 'apart_level' => [], // 最大日志文件数量 'max_files' => 0, // 使用JSON格式记录 'json' => false, // 日志输出格式化 'format' => '[%s][%s] %s', // 是否实时写入 'realtime_write' => false, ], // 其它日志通道配置 ],
각 로그 채널은 로그 쓰기 방법을 결정하는 유형 매개변수를 지정해야 합니다. 파일은 파일 로그 쓰기를 의미합니다. 다른 쓰기 방법을 지정해야 하는 경우 추가 확장 프로그램을 설치해야 합니다. 그러나 다른 로그 채널에 대해 동일한 유형을 지정할 수도 있지만 다른 쓰기 경로와 같이 다른 구성 매개변수는 다릅니다.
어떤 로그 쓰기 유형을 사용하든 각 로그 채널이 지원할 수 있는 공통 구성은 다음과 같습니다.
레벨 매개변수의 사용법은 명령줄 모드를 제외하고 전역 로그 구성과 일치합니다. 기본 로그는 요청 후 한번만 기록되므로 실시간으로 로그 정보를 작성해야 하는 경우 설정해야 합니다.
'realtime_write'=>true,
명령줄 아래에 있으면 설정 여부에 관계없이 실시간으로 자동으로 로그가 기록됩니다.
기본 채널
기본 매개변수를 설정하여 로그의 기본 채널을 정의합니다. 예:
'default'=>'file',
레벨 채널
다른 로그 수준을 설정하고 다른 로그 채널을 사용할 수 있습니다.
'type_channel'=>[ // 对于error日志级别 同时写入file和email两个日志通道 'error'=>['file','email'], ]
레벨 채널을 설정한 후에는 해당 레벨의 로그가 기본 채널에 기록되지 않으니 주의하세요.
로그 채널은 로그 드라이버의 협조가 필요하며, 로그 드라이버를 맞춤 설정할 수도 있습니다.
채널 전환
현재 로그의 기본 쓰기 채널을 수동으로 전환할 수도 있습니다. 예:
Log::channel('email')->info('这是日志信息');
다중 채널 기록을 사용하도록 전환 지원. 예:
Log::channel(['email', 'file'])->info('这是日志信息');
로그 처리
로그 쓰기 예를 들어 이벤트 모니터링을 지원합니다.
Event::listen('think\event\LogWrite', function($event) { if('file' == $event->channel) { $event->log['info'][] = 'test info'; } });
클로저의 매개변수는 LogWrite 이벤트 클래스 객체 인스턴스입니다. 두 가지 속성을 얻을 수 있습니다.
로그 정보는 현재 로그 채널( 녹음이 허용됨) 모든 수준의 로깅 정보.
로그 정보 형식화
시스템은 로그 정보 형식화를 위한 두 가지 매개변수를 제공합니다. 첫 번째는 시간 표시 형식을 사용자 정의하기 위한 time_format이고 두 번째는 로그 출력 형식을 조정하기 위한 형식 매개변수입니다.
'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, 'time_format' => 'Y-m-d H:i:s', 'format' => '[%s][%s]:%s', ], ],
format 매개변수의 첫 번째 %s는 로그 기록 시간입니다. (로그 시간의 형식은 time_format 매개변수에 의해 정의됩니다.) 두 번째 %s는 로그 수준 세 번째 %s는 로그 정보로, 순서는 지정할 수 없습니다. 조정될.
JSON 형식 로그
는 JSON 형식 기록 파일 로그를 지원하므로 일부 타사 로그 분석 도구에서 로그 분석을 더 편리하게 수행할 수 있습니다.
로그 구성 파일에
return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, ], ], ];
를 추가하면 JSON 형식 로깅이 활성화됩니다. CLI 명령줄 로깅도 유효합니다.
和之前版本的区别在于,新版的每个日志信息都是一条JSON数据(旧版本是每个请求一条JSON数据)。
关闭日志
你可以通过调用close方法动态关闭日志写入。
// 关闭全局日志写入 Log::close(); // 关闭某个通道日志写入 Log::close('file');
如果调用close方法动态关闭日志,会自动调用clear方法清空日志。
清空日志
一旦执行save方法后,内存中的日志信息就会被自动清空,如果需要提前清空日志可以使用:
// 清空所有日志 Log::clear(); //清空通道日志可以使用 Log::clear('file');
在清空日志方法之前,你可以使用getLog方法获取内存中的日志。
// 获取(默认通道)日志 $logs = Log::getLog(); // 获取指定通道日志 $logs = Log::getLog('file');
日志清空仅仅是清空内存中的日志。
自定义驱动
日志通道需要自定义日志驱动,该日志驱动需要实现think\contract\LogHandlerInterface接口。
interface LogHandlerInterface { /** * 日志写入接口 * @access public * @param array $log 日志信息 * @return bool */ public function save(array $log): bool; }
众多ThinkPHP教程,尽在PHP中文网,欢迎在线学习!
本文转自:https://blog.thinkphp.cn/1186947
위 내용은 ThinkPHP6.0 버전의 로그 변경 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!