Skip to content

Commit

Permalink
update comments
Browse files Browse the repository at this point in the history
  • Loading branch information
shiqinfeng1 committed Mar 31, 2024
1 parent 3c1939d commit a184339
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 29 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,10 @@ ansible-playbook ./deploy/docker/biz-bff/install.yml
生产环境环境下只能从配置中心获取配置,如果没读到,那么将无法运行
测试环境key从配置中心,也可以从本地读取配置,如果都没读到,那么将无法运行
调试环境值只从本地读取配置,如果没读到,那么将无法运行
- 日志
生产环境环境下日志只输出到日志服务器
测试环境日志输出到本地文件和日志服务器
调试环境日志输出到屏幕和本地文件

#### 领域层

Expand Down
2 changes: 1 addition & 1 deletion app/gomono-gateway/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ var Main = gcmd.Command{
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
// 获取环境变量配置
withDebug, _ := strconv.ParseBool(os.Getenv("DEBUG"))
proxyAddrs := strings.Split(os.Getenv("PROXYADDRS"), ",")
proxyAddrs := strings.Split(os.Getenv("PROXYADDRS"), ",") // 代理地址
// 日志接口
logger := log.New(&types.SrvInfo{
ID: ID,
Expand Down
8 changes: 0 additions & 8 deletions app/gomono-gateway/main.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
package main

import (
_ "net/http/pprof"

_ "github.com/go-kratos/gateway/middleware/bbr"
_ "github.com/go-kratos/gateway/middleware/cors"
_ "github.com/go-kratos/gateway/middleware/logging"
_ "github.com/go-kratos/gateway/middleware/rewrite"
_ "github.com/go-kratos/gateway/middleware/tracing"
_ "github.com/go-kratos/gateway/middleware/transcoder"
"github.com/gogf/gf/v2/os/gctx"
"github.com/shiqinfeng1/goMono/app/gomono-bff/cmd"
_ "go.uber.org/automaxprocs"
Expand Down
4 changes: 4 additions & 0 deletions utils/container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ var (
ErrContainerNameInvalid = func(name string) error { return fmt.Errorf("container name invalid:%v", name) }
)

// 容器客户端
func getDockerClient() (*client.Client, error) {
cli, err := client.NewClientWithOpts(
client.FromEnv,
Expand All @@ -27,11 +28,13 @@ func getDockerClient() (*client.Client, error) {
return cli, nil
}

// 获取容器名称
func GetName() (string, error) {
cli, err := getDockerClient()
if err != nil {
return "", err
}
// HOSTNAME 就是docker yaml中的hostname值
container, err := cli.ContainerInspect(context.Background(), os.Getenv("HOSTNAME"))
if err != nil {
return "", ErrContainerInspectFail(err)
Expand All @@ -40,6 +43,7 @@ func GetName() (string, error) {
return name, nil
}

// 获取容器名称的前面部分,去除容器名称中系统追加的后缀
func GetNameLite() (string, error) {
name, err := GetName()
if err != nil {
Expand Down
45 changes: 25 additions & 20 deletions utils/log/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,59 +18,64 @@ var (
ErrInvalidLogLevel = func(err error) error { return fmt.Errorf("invalid log level:%w", err) }
)

// 对kratos的log的封装结构
type KloggerWrap struct {
zlogger *zerolog.Logger
klogger klog.Logger
svcInfo *types.SrvInfo
f *cconf.File
m *cconf.Monitor
oldLvl zerolog.Level
zlogger *zerolog.Logger // zerolog的实例
klogger klog.Logger // kratos的log的接口
svcInfo *types.SrvInfo // 服务信息
f *cconf.File // 日志文件的配置
m *cconf.Monitor // 日志服务器的地址
oldLvl zerolog.Level // 记录当前日志等级,在动态更新等级时,该值作为旧等级使用
}

var klogger *KloggerWrap
var kloggerWrap *KloggerWrap

// 全局初始化一次
func New(svcInfo *types.SrvInfo, logCfg *cconf.Log) klog.Logger {
var fileName string
// 读取日志等级
lvl, err := zerolog.ParseLevel(logCfg.Level)
if err != nil {
lvl = zerolog.DebugLevel
}

klogger = &KloggerWrap{
kloggerWrap = &KloggerWrap{
svcInfo: svcInfo,
oldLvl: lvl,
f: logCfg.File,
m: logCfg.Monitor,
}
// 以容器名称作为日志文件名称,用于多副本时,区分日志文件,防止写入冲突
name, err := container.GetNameLite()
if err != nil {
if err != nil { // 不是容器运行时,使用配置的名称命名
klog.Errorf("get myself container name: %v", err)
fileName = fmt.Sprintf("./log/%v-%v.log", svcInfo.Name, svcInfo.ID)
} else {
fileName = fmt.Sprintf("./log/%v.log", name)
}
klogger.zlogger = newZeroLogger(fileName, logCfg.File, logCfg.Monitor)
klogger.klogger = klog.With(zlog.NewLogger(klogger.zlogger),
// 生产一个zerolog实例
kloggerWrap.zlogger = newZeroLogger(fileName, logCfg.File, logCfg.Monitor)
// 用kratos对zerolog进行一层包装, 带有一个全局的输出字段svc.id/name/ver"
kloggerWrap.klogger = klog.With(zlog.NewLogger(kloggerWrap.zlogger),
"svc.id/name/ver", fmt.Sprintf("%v/%v/%v", svcInfo.ID, svcInfo.Name, svcInfo.Version),
)
klogger.zlogger.Level(lvl)
return klogger.klogger
// 设置zerolog的服务等级
kloggerWrap.zlogger.Level(lvl)
return kloggerWrap.klogger
}

func SetLevel(lvlStr string) {
if klogger == nil {
if kloggerWrap == nil {
panic(ErrNotInitedLogger)
}
lvl, err := zerolog.ParseLevel(lvlStr)
if err != nil {
klogger.klogger.Log(klog.LevelError, "err", ErrInvalidLogLevel(err))
kloggerWrap.klogger.Log(klog.LevelError, "err", ErrInvalidLogLevel(err))
return
}
// 因为zerolog设置level后会返回一个新的logger,导致无法修改原logger的level,因此对于新的level直接new一个新的
if klogger.oldLvl != lvl {
klogger.zlogger.Level(lvl)
if kloggerWrap.oldLvl != lvl {
kloggerWrap.zlogger.Level(lvl)
}
klogger.klogger.Log(klog.LevelWarn, "msg", fmt.Sprintf("change log level '%v' to '%v'", klogger.oldLvl, lvl))
klogger.oldLvl = lvl
kloggerWrap.klogger.Log(klog.LevelWarn, "msg", fmt.Sprintf("change log level '%v' to '%v'", kloggerWrap.oldLvl, lvl))
kloggerWrap.oldLvl = lvl
}

0 comments on commit a184339

Please sign in to comment.