最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Thinkphp6的日志問(wèn)題

 更新時(shí)間:2023年03月23日 16:44:04   作者:xie_rui_xiang  
這篇文章主要介紹了關(guān)于Thinkphp6的日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Thinkphp6的日志問(wèn)題

日志級(jí)別

debug, info, notice, warning, error, critical, alert, emergency

其中有一個(gè)特別的級(jí)別:sql,專(zhuān)門(mén)用來(lái)記錄sql語(yǔ)句的

設(shè)置日志記錄級(jí)別

對(duì)于程序比較重要的業(yè)務(wù)模塊可以進(jìn)行埋點(diǎn)(進(jìn)行日志記錄)

可以通過(guò)設(shè)置日志記錄級(jí)別來(lái)開(kāi)啟和關(guān)閉記錄

有助于排除錯(cuò)誤(比每次出現(xiàn)錯(cuò)誤去代碼里增加記錄日志好多了)

? ? ? ? # 修改 config/log.php
? ? ? ? # 配置 'level' => ['notice','warning']
? ? ? ? # level 不為空時(shí),只記錄level中指定的錯(cuò)誤級(jí)別
? ? ? ? # level 為空時(shí),記錄所有級(jí)別
? ? ? ? $user = UserService::getInstance()->findByUsername('xieruixiang');
? ? ? ? Log::warning("warning:{user}", compact('user'));
? ? ? ? # info 不再 level 中 則不會(huì)記錄
? ? ? ? Log::info("I'm info");

單一日志

默認(rèn)的tp日志是寫(xiě)在當(dāng)前日期(年月)目錄下的,如(runtime/admin/log/202204/30_info.log)

單一日志設(shè)置 修改config/log.php 中通道single屬性為true

設(shè)置單一日志后,將不再寫(xiě)在時(shí)間目錄下(一直寫(xiě)一個(gè)固定目錄),如(runtime/admin/log/single_info.log)

# 開(kāi)啟單一日志
# channels.file.single
# 這里給file通道開(kāi)啟單一日志
'single' => true

獨(dú)立日志

每一種日志級(jí)別的日志都?xì)w類(lèi)到一個(gè)文件之中(推薦開(kāi)啟獨(dú)立日志)

設(shè)置 config/log.php 中通道apart_level屬性

? ? ? ? # ?設(shè)置 file 通道 info,notice,warning 級(jí)別開(kāi)啟獨(dú)立日志
? ? ? ? # ?channels.file.apart_level
? ? ? ? # 'apart_level' => ['info', 'notice', 'warning']
? ? ? ? # 在 apart_level中的級(jí)別會(huì)獨(dú)立寫(xiě)到一個(gè)文件中去

? ? ? ? # write to runtime/admin/log/202204/30_warning.log
? ? ? ? Log::warning("I'm ");
? ? ? ? # write to runtime/admin/log/202204/30_info.log
? ? ? ? Log::info("I'm info");
? ? ? ? # write to runtime/admin/log/202204/30_notice.log
? ? ? ? Log::notice("I'm notice");

日志的寫(xiě)入時(shí)機(jī)

日志寫(xiě)入時(shí)機(jī)提供兩種(實(shí)時(shí)寫(xiě)入,程序執(zhí)行完后寫(xiě)入)

通過(guò)設(shè)置config/log.php中通道 realtime_write 屬性

? ? ? ? # 這里中斷程序的執(zhí)行
? ? ? ? # 如果 realtime_write = false 則無(wú)法寫(xiě)到日志中去
? ? ? ? # realtime_write = true 可以寫(xiě)入日志中去
? ? ? ? Log::warning("I'm ");

? ? ? ? # 如果 realtime_write = false
? ? ? ? # 又想實(shí)時(shí)寫(xiě)入
? ? ? ? # 可以通過(guò) Log::write($msg, $type) 實(shí)時(shí)寫(xiě)入
? ? ? ? # $msg 信息
? ? ? ? # $type 日志級(jí)別
? ? ? ? Log::write("I'm write", 'warning');
? ? ? ? die("日志將不會(huì)寫(xiě)入");

日志通道

可以自定義通道

以增加郵件通道為例

將config/log.php 中通道type 改成自定義驅(qū)動(dòng)類(lèi)即可

? ? ? ? # config/log.php channels 添加
? ? ? ? ?'email' => [
? ? ? ? ? ? 'type' => \app\admin\driver\EmailDriver::class,
? ? ? ? ? ? # 調(diào)試發(fā)送郵件時(shí)將其設(shè)置成實(shí)時(shí)比較好調(diào)試
? ? ? ? ? ? 'realtime_write' => true,
? ? ? ? ]
? ? ? ??
? ? ? ?# EmailDriver 需要實(shí)現(xiàn) think\contract\LogHandlerInterface
? ? ? ?class EmailDriver implements LogHandlerInterface
? ? ? ?{
? ? ? ? ? public function save(array $log): bool
? ? ? ? ? {
? ? ? ? ? # 這里進(jìn)行發(fā)送郵件邏輯
? ? ? ? ? # 想知道郵件發(fā)送邏輯的可以參考我的文章 《php發(fā)送郵件》
? ? ? ? ? # 不想知道的 可以調(diào)用第三方封裝好的php發(fā)送郵件組件
? ? ? ? ? ?return true;
? ? ? ? ? }
? ? ? ?}

使用郵件通道

?# channel($channelName) 指定發(fā)送通道
?# 不指定則使用默認(rèn)發(fā)送通道
?# config/log.php
?# 'default' => env('log.channel', 'file'),
?Log::channel('email')->info("this is info");
?# 就能以郵件形式通知了

Thinkphp6異常處理與日志

異常處理

目標(biāo):返回json格式的異常信息 # url_route_must:true強(qiáng)制路由模式下

thinkphp6內(nèi)置已了一個(gè)app\ExceptionHandle異常處理類(lèi)可供使用

該類(lèi)綁定在app目錄下面的provider.php文件中,直接修改該類(lèi)的相關(guān)方法即可完成應(yīng)用的自定義異常處理機(jī)制。

在這里插入圖片描述

app\ExceptionHandle.php 異常處理類(lèi),重新定義render方法即可

#app\ExceptionHandle.php 
public function render($request, Throwable $e): Response
    {
        // app_debug模式下按原thinkphp6異常模式處理異常
        if (env('app_debug')) {
            return parent::render($request, $e);
        }
        // 自定義json返回錯(cuò)誤
        if ($e instanceof ValidateException) {
            return json($e->getError(), 422);
            return json(['code' => 0, 'msg' => $e->getError()], 422);
        }

        // 自定義json返回異常
        if ($e instanceof HttpException && $request->isAjax()) {
            return json(['code' => 0, 'msg' => $e->getMessage()], $e->getStatusCode());
        }
		// 自定義json返回異常
        if ($e instanceof HttpException) {
            return json(['code' => 0, 'msg' => $e->getMessage()]);
        }
		// 自定義json返回異常
        return json(['code' => 0, 'msg' => 'Biny服務(wù)器錯(cuò)誤']);
    }

目標(biāo):訪問(wèn)未定義的路由時(shí)返回json格式的信息 # url_route_must:false 非強(qiáng)制路由模式下

php think make:controller Error --plain

    public function index()
    {
        return json([
            'code' => 0,
            'data' => 'Route is Not Found',
            'msg' => 'success'
        ]);
    }

    public function __call($name, $arguments)
    {
        return json([
            'code' => 0,
            'data' => 'Route is Not Found',
            'msg' => 'success'
        ]);
    }

日志

  • DEBUG模式下默認(rèn)記錄error級(jí)別和sql執(zhí)行語(yǔ)句日志
  • 非DEBUG模式默認(rèn)僅記錄error級(jí)別日志
  • DEBUG模式在根目錄增加.env文件 設(shè)置APP_DEBUG = false/true

在這里插入圖片描述

手動(dòng)記錄日志

方法描述
record()Log::record(‘record方法記錄的日志信息不是實(shí)時(shí)保存的’,‘info’);
write()Log::write(‘要實(shí)時(shí)記錄的話,可以采用write方法’,‘info’);

系統(tǒng)在請(qǐng)求結(jié)束后會(huì)自動(dòng)調(diào)用Log::save方法統(tǒng)一進(jìn)行日志信息寫(xiě)入

關(guān)閉日志

Log::close(); //手動(dòng)關(guān)閉本次請(qǐng)求的日志寫(xiě)入

更多日志配置于app\config\log.php文件中配置,參考官方文檔配置即可

官方日志文檔

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

岳池县| 都江堰市| 工布江达县| 渭源县| 南丰县| 金寨县| 溧水县| 清原| 英超| 阿拉善盟| 东明县| 牙克石市| 凤冈县| 夏河县| 叙永县| 铁岭市| 青冈县| 托里县| 比如县| 宾川县| 盐源县| 祁阳县| 清水县| 西乌珠穆沁旗| 孙吴县| 安图县| 安国市| 聂拉木县| 彭山县| 青川县| 韶关市| 大石桥市| 廊坊市| 三原县| 永胜县| 周宁县| 登封市| 馆陶县| 渑池县| 邢台市| 上杭县|