-
Notifications
You must be signed in to change notification settings - Fork 701
/
config.go
130 lines (117 loc) · 3.25 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2020 Douyu
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package xlog
import (
"fmt"
"log"
"time"
"github.com/douyu/jupiter/pkg"
"github.com/douyu/jupiter/pkg/conf"
"github.com/douyu/jupiter/pkg/constant"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func init() {
conf.OnLoaded(func(c *conf.Configuration) {
log.Print("hook config, init loggers")
log.Printf("reload default logger with configKey: %s", ConfigEntry("default"))
DefaultLogger = RawConfig(constant.ConfigPrefix + ".logger.default").Build()
log.Printf("reload default logger with configKey: %s", ConfigEntry("jupiter"))
JupiterLogger = RawConfig(constant.ConfigPrefix + ".logger.jupiter").Build()
})
}
var ConfigPrefix = constant.ConfigPrefix + ".logger"
// Config ...
type Config struct {
// Dir 日志输出目录
Dir string
// Name 日志文件名称
Name string
// Level 日志初始等级
Level string
// 日志初始化字段
Fields []zap.Field
// 是否添加调用者信息
AddCaller bool
// 日志前缀
Prefix string
// 日志输出文件最大长度,超过改值则截断
MaxSize int
MaxAge int
MaxBackup int
// 日志磁盘刷盘间隔
Interval time.Duration
CallerSkip int
Async bool
Queue bool
QueueSleep time.Duration
Core zapcore.Core
Debug bool
EncoderConfig *zapcore.EncoderConfig
configKey string
}
// Filename ...
func (config *Config) Filename() string {
return fmt.Sprintf("%s/%s", config.Dir, config.Name)
}
func ConfigEntry(name string) string {
return ConfigPrefix + "." + name
}
// RawConfig ...
func RawConfig(key string) *Config {
var config = DefaultConfig()
config, _ = conf.UnmarshalWithExpect(key, config).(*Config)
config.configKey = key
return config
}
// StdConfig Jupiter Standard logger config
func StdConfig(name string) *Config {
return RawConfig(ConfigPrefix + "." + name)
}
// DefaultConfig ...
func DefaultConfig() *Config {
return &Config{
Name: "jupiter_default.json",
Dir: pkg.LogDir(),
Level: "info",
MaxSize: 500, // 500M
MaxAge: 1, // 1 day
MaxBackup: 10, // 10 backup
Interval: 24 * time.Hour,
CallerSkip: 2,
AddCaller: true,
Async: true,
Queue: false,
QueueSleep: 100 * time.Millisecond,
EncoderConfig: DefaultZapConfig(),
Fields: []zap.Field{
String("aid", pkg.AppID()),
String("iid", pkg.AppInstance()),
},
}
}
// Build ...
func (config Config) Build() *Logger {
if config.EncoderConfig == nil {
config.EncoderConfig = DefaultZapConfig()
}
if config.Debug {
config.EncoderConfig.EncodeLevel = DebugEncodeLevel
}
logger := newLogger(&config)
if config.configKey != "" {
logger.AutoLevel(config.configKey + ".level")
}
return logger
}