codecamp

GoFrame 高级特性-日志输出

日志输出往往是打印一些调试或者​SQL​语句,日志对象可以通过​SetLogger/GetLogger​方法来设置,也可以通过配置文件来做配置。以下是一个开启了日志输出的配置示例:

database:
  logger:
  - path:   "/var/log/gf-app/sql"
    level:  "all"
    stdout: true
  default:
  - link:  "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
    debug: true 

需要注意这里使用关键字​logger​作为​ORM​的日志配置项名称,因此您无法使用该名字作为数据库配置分组。

ORM​组件输出的日志相当详尽,我们来看一个示例:

2021-05-22 21:12:10.776 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  4 ms] [default] [rows:0  ] [txid:1] BEGIN
2021-05-22 21:12:10.776 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  0 ms] [default] [rows:0  ] [txid:1] SAVEPOINT `transaction0`
2021-05-22 21:12:10.789 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 13 ms] [default] [rows:8  ] [txid:1] SHOW FULL COLUMNS FROM `user`
2021-05-22 21:12:10.790 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  1 ms] [default] [rows:1  ] [txid:1] INSERT INTO `user`(`id`,`name`) VALUES(1,'john') 
2021-05-22 21:12:10.791 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  1 ms] [default] [rows:0  ] [txid:1] ROLLBACK TO SAVEPOINT `transaction0`
2021-05-22 21:12:10.791 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  0 ms] [default] [rows:1  ] [txid:1] INSERT INTO `user`(`id`,`name`) VALUES(2,'smith') 
2021-05-22 21:12:10.792 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [  1 ms] [default] [rows:0  ] [txid:1] COMMIT 

可以看到,日志包含以下几部分信息:

  1. 日期及时间,精确到毫秒。
  2. 日志级别。因为​SQL​日志主要用于功能调试/问题排查,生产环境往往需要关闭掉,因此日志级别固定为​DEBUG​级别。
  3. 当前​SQL​执行耗时。从客户端发起请求到接收到数据的时间,单位为毫秒。当执行时间不足1毫秒时,展示为0毫秒。
  4. 当前​SQL​所处的数据库配置分组,默认为​default​。
  5. 当前​SQL​所属的事务ID。如果当前SQL不属于事务操作时,不存在该字段。
  6. 具体执行的​SQL​语句。需要注意的是,由于底层使用的是​SQL​预处理,这里的​SQL​语句是通过组件自动拼接的结果,仅供参考。


GoFrame 高级特性-调试模式
GoFrame 高级特性-字段映射
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GoFrame 核心组件

GoFrame 核心组件-数据库ORM

GoFrame 模块列表

GoFrame 模块列表-单元测试

GoFrame 模块列表-功能调试

GoFrame WEB服务开发

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }