Beego日志框架采坑:配置日志输出到文件,只输出了启动时日志,后续日志无输出

①按照beego官方文档配置好日志输出到文件的策略:

// beego logs config
package config

import (
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
)

func init() {
	//logConf record code file and line
	logs.EnableFuncCallDepth(true)

	//enable async logConf
	//logs.Async()

	//get logConf conf
	logPath := beego.AppConfig.String("sys_log_path")
	maxsize := beego.AppConfig.DefaultInt("maxsize", 10) * 1024 * 1024
	maxDays := beego.AppConfig.DefaultInt("max_days", 7)

	//set common logger that saves all logConf
	logConf := fmt.Sprintf(`{"filename":"%s","maxsize":%d,"daily":true,"maxdays":%d,"rotate":true,"level":%d}`, logPath, maxsize, maxDays, logs.LevelDebug)
	err := logs.SetLogger(logs.AdapterFile, logConf)
	if err != nil {
		panic(err)
	}
}

②在main方法导入config包

package main

package main

import (
	"flag"
	"github.com/astaxie/beego"
	_ "networkmgr/config"
	_ "networkmgr/models/log"
	_ "networkmgr/routers"
)

func loadConfig() { 
	configpath := flag.String("config", "./conf/app.conf", "config:default is app.conf")
	flag.Parse()
	beego.LoadAppConfig("ini", *configpath)
	if beego.BConfig.RunMode == "dev" {
		beego.BConfig.WebConfig.DirectoryIndex = true
		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
	}
}

func main() {
	loadConfig()
	beego.Run()
}

③启动项目,问题出现。日志文件只记录了动态路由生成日志,后续日志无记录。

④进入beego/logs源码进行debug,发现在后续日志记录时beegoLogger的outputs(输出终端)列表中只有console

⑤debug到①步的logs.SetLogger()方法中去,发现beegoLogger的outputs列表中有2个元素:console、file

⑥显而易见,在config包初始化log后,框架又对log的outputs值进行了修改,接下来就寻找哪里对outputs值进行了修改

⑦查找outputs的useage,发现beego/logs/log.go中的reset方法对其值进行了修改,比较可疑

⑧在reset方法处打断点,查看调用栈,发现reset方法在项目启动时有2处调用,一是beego包的init方法引起,但考虑到config包引入了beego包,所以config包的init方法是在beego包的init方法后执行,所以排除此处;二是在beego.LoadAppConfig()方法时间接调用了log的reset方法,重置了outputs

⑨至此问题原因找到,解决方法很简单,将初始化方法改名,并在main方法中的loadConfig方法之后手动调用

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值