6、实现日志打印功能
6、实现日志打印功能
打印日志需要一个日志包,日志包的选择通常有以下几种手段
- 自研:根据需要从0自研一个日志包
- 复用团队/公司基本的日志包:更多的情况,是复用公司级别的日志包
- 复用开源日志包:如sirupsen/logrus、uber-go/zap
go标准库也自带了一个生产可用的日志包log/slog
Go代码使用日志包的步骤
- 初始化日志包
- 调用日志包
步骤一:初始化日志包
修改cmd/fg-apiserver/server.go文件
func initLog() {
format := viper.GetString("log.format") // 日志格式,支持:json、text
level := viper.GetString("log.level") // 日志级别,支持:debug、info、warn、error
output := viper.GetString("log.output") // 日志输出路径,支持:标准输出stdout和文件
// 转换日志级别
var slevel slog.Level
switch level {
case "debug":
slevel = slog.LevelDebug
case "info":
slevel = slog.LevelInfo
case "warn":
slevel = slog.LevelWarn
case "error":
slevel = slog.LevelError
default:
slevel = slog.LevelInfo
}
opts := &slog.HandlerOptions{Level: slevel}
var w io.Writer
var err error
// 转换日志输出路径
switch output {
case "":
w = os.Stdout
case "stdout":
w = os.Stdout
default:
w, err = os.OpenFile(output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
}
// 转换日志格式
if err != nil {
return
}
var handler slog.Handler
switch format {
case "json":
handler = slog.NewJSONHandler(w, opts)
case "text":
handler = slog.NewTextHandler(w, opts)
default:
handler = slog.NewJSONHandler(w, opts)
}
slog.SetDefault(slog.New(handler))
}
func run(opts *options.ServerOptions) error {
...
// 初始化slog
initLog()
...
}
步骤二:调用日志包
在internal/apiserver/server.go 中,将输入改成调用slog日志包来输出。
func (s *Server) Run() error {
slog.Info(fmt.Sprintf("Read MYSQL host from config %s", s.cfg.MYSQLOptions.Addr))
//select {} // 调用select 语句,阻塞防止进程退出
return nil
}
slog包还提供了Debug、warn、Error等方法,用来打印不同级别的日志
编译并运行
1、更新配置文件
更新config/fg-apiserver.yaml
# Mysql数据库相关配置
mysql:
# MYSQL 机器ip和端口,默认127.0.0.1:3306
addr: 127.0.0.1:3306
# mysql用户名
username: fastgo
# mysql密码
password: fastgo1234
# 数据库名
database: fastgo
# 最大空闲连接数,默认100
max-idle-connections: 100
# 最大打开链接数
max-open-connections: 100
# 空闲连接最大存活时间
max-connection-life-time: 10s
log:
format: json
level: info
output: stdout
# output: ./log/fg-apiserver-info.log 输出到文件中
2、编译并运行
(base) dujie@MacBook-Pro fastgo % sh build.sh
command-line-arguments
(base) dujie@MacBook-Pro fastgo % ./_output/fg-apiserver -c configs/fg-apiserver.yaml
/Users/dujie/.fastgo/fg-apiserver.yaml
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J.のblog!
评论