[TOC]
# 日志
日志類庫可以存放一些信息
## **配置文件**
```
project 應用部署目錄
├─conf 配置文件目錄
│ └─log.php 日志配置信息
```
## **配置信息**
```
return [
// +----------------------------------------------------------------------
// | 日志信息配置
// | level:空則不記錄 指定記錄類型 ['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency']
// | type: File->存入文件 Redis->存入redis MongoDB->存入MongoDB
// | realtime: 實時寫入 true->實時寫入 false->先寫入內存
// | formatter:輸出日志格式
// | ├─type:日志類型 line->字符串 html->html模式 json->json格式
// | ├─output:日志樣式 datetime->時間戳 channel->頻道名 level_name->日志等級 message->消息 context->關聯數組
// | ├─date_format:時間樣式格式
// | drive:驅動
// | ├─name:類型名稱 single->單文件模式 daily->每日遞增模式
// | ├─path:File保存文件目錄
// | ├─file_max:daily模式專用 最大文件保存數量 0不限制
// | ├─file_name:single模式專用 指定文件名稱 未設置則使用渠道名稱做文件名
// +----------------------------------------------------------------------
//
'Denha' => [
'type' => 'File',
'realtime' => false, // 實時寫入
'level' => ['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency'],
'formatter' => [
'type' => 'line',
'output' => '[%datetime%] %channel%.%level_name% %message% %context% %extra%',
'date_format' => 'Y-m-d H:i:s',
],
'drive' => [
'name' => 'daily',
'path' => DATA_RUN_PATH. php_sapi_name() . DS,
'file_max' => 0,
'file_name' => '',
],
]
];
```
默認配置是Denha渠道
## **啟用日志**
```
use denha\Log;
Log::info('這是一條調試信息');
```
會直接調用log.php中的Denha渠道配置信息 以上代碼將會在 /storage/run/Y-m-d.log 中生成一條日志信息
`[2019-12-30 11:41:49] Denha.INFO 這是一條調試信息`
## **日志類型**
日志保存類型支持一下格式
| 類型值 | 說明 |
| --- | --- |
| debug | 詳細的調試信息 |
| info | 有意義的事件,比如用戶登錄 |
| notice | 正常但是值得注意的事件 |
| warning | 異常事件,但是并不是錯誤。比如使用了廢棄了的API,錯誤地使用了一個API,以及其他不希望發生但是并非必要的錯誤 |
| error | 運行時的錯誤,不需要立即注意到,但是需要被專門記錄并監控到 |
| critical | 邊界條件/危篤場景。比如應用組件不可用了,未預料到的異常 |
| alert | 必須立即采取行動。比如整個網站都掛了,數據庫不可用了等。這種情況應該發送短信警報,并把你叫醒 |
| emergency | 緊急請求:系統不可用了 |
## **更換新渠道**
> 當設置了渠道名稱 或覆蓋了渠道配置信息 需要使用 類方法 `->` 進行鏈接 如果使用默認配置則使用靜態方法`::`進行鏈接
### log中添加新渠道配置信息
默認使用log.php中的 Denha渠道。如果需要使用新渠道,需要現在log.php添加的新的渠道配置
`Log::setChannel('渠道名')->debug('這是一條Debug信息');`
以上代碼將會使用新的渠道配置信息
### 覆蓋log中的渠道配置
```
$config = [
'drive'=>'single',
'path'=>DATA_RUN_PATH,
'file_name'=>'test',
];
\denha\Log::setChannel('Denha')::setConfig($config)->warning('這是一條警告信息');
```
以上代碼將會改寫Denha渠道的配置信息,創建出一條新的渠道配置信息 與老信息共用一個渠道名稱 但是執行流程進行了分離