beego——日志处理
这是一个用来处理日志的库,它的设计思路来自于 database/sql
,目前支持的引擎有 file、console、net、smtp,可以通过如下方式进行安装:
1 | go get github.com/astaxie/beego/logs |
通用方式
首先引入包:
1 2 3 | import ( "github.com/astaxie/beego/logs" ) |
然后添加输出引擎(log 支持同时输出到多个引擎),这里我们以 console 为例,第一个参数是引擎名(包括:console、file、conn、smtp、es、multifile)
1 | logs.SetLogger( "console" ) |
添加输出引擎也支持第二个参数,用来表示配置信息,详细的配置请看下面介绍:
1 | logs.SetLogger(logs.AdapterFile,`{ "filename" : "project.log" , "level" :7, "maxlines" :0, "maxsize" :0, "daily" :true, "maxdays" :10, "color" :true}`) |
然后我们就可以在我们的逻辑中开始任意的使用了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package main import ( "github.com/astaxie/beego/logs" ) func main() { //an official log.Logger l := logs.GetLogger() l.Println( "this is a message of http" ) //an official log.Logger with prefix ORM logs.GetLogger( "ORM" ).Println( "this is a message of orm" ) logs.Debug( "my book is bought in the year of " , 2016) logs.Info( "this %s cat is %v years old" , "yellow" , 3) logs.Warn( "json is a type of kv like" , map [string]int{ "key" : 2016}) logs.Error(1024, "is a very" , "good game" ) logs.Critical( "oh,crash" ) } |
多个实例
一般推荐使用通用方式进行日志,但依然支持单独声明来使用独立的日志
1 2 3 4 5 6 7 8 9 10 11 | package main import ( "github.com/astaxie/beego/logs" ) func main() { log := logs.NewLogger() log.SetLogger(logs.AdapterConsole) log.Debug( "this is a debug message" ) } |
输出文件名和行号
日志默认不输出调用的文件名和文件行号,如果你期望输出调用的文件名和文件行号,可以如下设置
1 | logs.EnableFuncCallDepth(true) |
开启传入参数 true,关闭传入参数 false,默认是关闭的.
如果你的应用自己封装了调用 log 包,那么需要设置 SetLogFuncCallDepth,默认是 2,也就是直接调用的层级,如果你封装了多层,那么需要根据自己的需求进行调整。
1 | logs.SetLogFuncCallDepth(3) |
异步输出日志
为了提升性能, 可以设置异步输出:
1 | logs.Async() |
异步输出允许设置缓冲 chan 的大小
1 | logs.Async(1e3) |
引擎配置设置
-
console
命令行输出,默认输出到`os.Stdout`: logs.SetLogger(logs.AdapterConsole, `{"level":1,"color":true}`)
主要的参数如下说明:
- level 输出的日志级别
- color 是否开启打印日志彩色打印(需环境支持彩色输出)
-
file
设置的例子如下所示:
logs.SetLogger(logs.AdapterFile, `{"filename":"test.log"}`)
主要的参数如下说明:
- filename 保存的文件名
- maxlines 每个文件保存的最大行数,默认值 1000000
- maxsize 每个文件保存的最大尺寸,默认值是 1 << 28, //256 MB
- daily 是否按照每天 logrotate,默认是 true
- maxdays 文件最多保存多少天,默认保存 7 天
- rotate 是否开启 logrotate,默认是 true
- level 日志保存的时候的级别,默认是 Trace 级别
- perm 日志文件权限
-
multifile
设置的例子如下所示:
logs.SetLogger(logs.AdapterMultiFile, `{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}`)
主要的参数如下说明(除 separate 外,均与file相同):
- filename 保存的文件名
- maxlines 每个文件保存的最大行数,默认值 1000000
- maxsize 每个文件保存的最大尺寸,默认值是 1 << 28, //256 MB
- daily 是否按照每天 logrotate,默认是 true
- maxdays 文件最多保存多少天,默认保存 7 天
- rotate 是否开启 logrotate,默认是 true
- level 日志保存的时候的级别,默认是 Trace 级别
- perm 日志文件权限
- separate 需要单独写入文件的日志级别,设置后命名类似 test.error.log
-
conn
网络输出,设置的例子如下所示:
logs.SetLogger(logs.AdapterConn, `{"net":"tcp","addr":":7020"}`)
主要的参数说明如下:
- reconnectOnMsg 是否每次链接都重新打开链接,默认是 false
- reconnect 是否自动重新链接地址,默认是 false
- net 发开网络链接的方式,可以使用 tcp、unix、udp 等
- addr 网络链接的地址
- level 日志保存的时候的级别,默认是 Trace 级别
-
smtp
邮件发送,设置的例子如下所示:
logs.SetLogger(logs.AdapterMail, `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`)
主要的参数说明如下:
- username smtp 验证的用户名
- password smtp 验证密码
- host 发送的邮箱地址
- sendTos 邮件需要发送的人,支持多个
- subject 发送邮件的标题,默认是
Diagnostic message from server
- level 日志发送的级别,默认是 Trace 级别
-
ElasticSearch
输出到 ElasticSearch:
logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`)
-
简聊
输出到简聊:
logs.SetLogger(logs.AdapterJianLiao, `{"authorname":"xxx","title":"beego", "webhookurl":"https://jianliao.com/xxx", "redirecturl":"https://jianliao.com/xxx","imageurl":"https://jianliao.com/xxx","level":1}`)
-
slack
输出到slack:
logs.SetLogger(logs.AdapterSlack, `{"webhookurl":"https://slack.com/xxx","level":1}`)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-16 API的理解和使用——哈希类型的命令
2017-12-16 API的理解和使用——字符串的命令
2017-12-16 API的理解和使用——全局命令