Skip to content

Commit a221548

Browse files
committed
add log
1 parent 396a31a commit a221548

File tree

8 files changed

+287
-14
lines changed

8 files changed

+287
-14
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package conf
2+
3+
import (
4+
"log"
5+
"time"
6+
)
7+
8+
var (
9+
// log conf
10+
LogFlag = log.LstdFlags
11+
12+
// gate conf // 网关配置
13+
PendingWriteNum = 2000
14+
MaxMsgLen uint32 = 4096 // 消息的长度
15+
HTTPTimeout = 10 * time.Second
16+
LenMsgLen = 2
17+
LittleEndian = false
18+
19+
// skeleton conf 框架配置
20+
GoLen = 10000
21+
TimerDispatcherLen = 10000
22+
AsynCallLen = 10000
23+
ChanRPCLen = 10000
24+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package conf
2+
3+
import (
4+
"LollipopGo/LollipopGo/log"
5+
"encoding/json"
6+
"io/ioutil"
7+
)
8+
9+
// 服务器结构
10+
var Server struct {
11+
LogLevel string
12+
LogPath string
13+
WSAddr string
14+
CertFile string
15+
KeyFile string
16+
TCPAddr string
17+
MaxConnNum int
18+
ConsolePort int
19+
ProfilePath string
20+
}
21+
22+
// 加载服务器配置
23+
func init() {
24+
data, err := ioutil.ReadFile("conf/server.json")
25+
if err != nil {
26+
log.Debug("-------------%v", err)
27+
}
28+
err = json.Unmarshal(data, &Server)
29+
if err != nil {
30+
log.Debug("+++++++++++++%v", err)
31+
}
32+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"LogLevel": "debug",
3+
"LogPath": "",
4+
"WSAddr": "127.0.0.1:8889",
5+
"CertFile": "",
6+
"KeyFile": "",
7+
"TCPAddr": "127.0.0.1:8888",
8+
"MaxConnNum": 20000,
9+
"ConsolePort": 8012,
10+
"ProfilePath": ""
11+
}

第一季 从零开始写游戏服务器 第二期/最新课节--课程代码/class3/src/classcode/tmain.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,22 @@ import (
55
"net/http"
66
"os"
77

8+
LollipopGoconf "LollipopGo/LollipopGo/conf"
9+
"classcode/conf" // 服务器配置——针对不同环境的配置
810
_ "net/http/pprof"
911

1012
"code.google.com/p/go.net/websocket"
1113
)
1214

15+
func init() {
16+
// 加载配置
17+
LollipopGoconf.LogLevel = conf.Server.LogLevel
18+
LollipopGoconf.LogPath = conf.Server.LogPath
19+
LollipopGoconf.LogFlag = conf.LogFlag
20+
LollipopGoconf.ConsolePort = conf.Server.ConsolePort
21+
LollipopGoconf.ProfilePath = conf.Server.ProfilePath
22+
}
23+
1324
func main() {
1425
// os.Args[0] == 执行文件的名字
1526
// os.Args[1] == 第一个参数
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package conf
2+
3+
// 配置文件定义
4+
// 数据定义操作
5+
var (
6+
LenStackBuf = 4096
7+
8+
// log
9+
LogLevel string
10+
LogPath string
11+
LogFlag int
12+
13+
// console
14+
ConsolePort int
15+
ConsolePrompt string = "Leaf# "
16+
ProfilePath string
17+
18+
// cluster
19+
ListenAddr string
20+
ConnAddrs []string
21+
PendingWriteNum int
22+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package log_test
2+
3+
import (
4+
l "log"
5+
6+
"LollipopGo/LollipopGo/log"
7+
)
8+
9+
func Example() {
10+
name := "LollipopGo"
11+
12+
log.Debug("My name is %v", name)
13+
log.Release("My name is %v", name)
14+
log.Error("My name is %v", name)
15+
// log.Fatal("My name is %v", name)
16+
17+
logger, err := log.New("release", "", l.LstdFlags)
18+
if err != nil {
19+
return
20+
}
21+
defer logger.Close()
22+
23+
logger.Debug("will not print")
24+
logger.Release("My name is %v", name)
25+
26+
log.Export(logger)
27+
28+
log.Debug("will not print")
29+
log.Release("My name is %v", name)
30+
}
Lines changed: 145 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,153 @@
11
package log
22

33
import (
4-
"flag"
5-
"glog-master"
4+
"errors"
5+
"fmt"
6+
"log"
7+
"os"
8+
"path"
9+
"strings"
10+
"time"
611
)
712

8-
func init() {
9-
// 程序当中执行:
10-
flag.Set("alsologtostderr", "true") // 日志写入文件的同时,输出到stderr
11-
flag.Set("log_dir", "./log") // 日志文件的保存的目录
12-
flag.Set("v", "3") // 配置日志输出的等级
13-
flag.Parse()
13+
// levels
14+
const (
15+
debugLevel = 0
16+
releaseLevel = 1
17+
errorLevel = 2
18+
fatalLevel = 3
19+
)
20+
21+
const (
22+
printDebugLevel = "[debug ] "
23+
printReleaseLevel = "[release] "
24+
printErrorLevel = "[error ] "
25+
printFatalLevel = "[fatal ] "
26+
)
27+
28+
type Logger struct {
29+
level int
30+
baseLogger *log.Logger
31+
baseFile *os.File
32+
}
33+
34+
func New(strLevel string, pathname string, flag int) (*Logger, error) {
35+
// level
36+
var level int
37+
switch strings.ToLower(strLevel) {
38+
case "debug":
39+
level = debugLevel
40+
case "release":
41+
level = releaseLevel
42+
case "error":
43+
level = errorLevel
44+
case "fatal":
45+
level = fatalLevel
46+
default:
47+
return nil, errors.New("unknown level: " + strLevel)
48+
}
49+
50+
// logger
51+
var baseLogger *log.Logger
52+
var baseFile *os.File
53+
if pathname != "" {
54+
now := time.Now()
55+
56+
filename := fmt.Sprintf("%d%02d%02d_%02d_%02d_%02d.log",
57+
now.Year(),
58+
now.Month(),
59+
now.Day(),
60+
now.Hour(),
61+
now.Minute(),
62+
now.Second())
63+
64+
file, err := os.Create(path.Join(pathname, filename))
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
baseLogger = log.New(file, "", flag)
70+
baseFile = file
71+
} else {
72+
baseLogger = log.New(os.Stdout, "", flag)
73+
}
74+
75+
// new
76+
logger := new(Logger)
77+
logger.level = level
78+
logger.baseLogger = baseLogger
79+
logger.baseFile = baseFile
80+
81+
return logger, nil
82+
}
83+
84+
// It's dangerous to call the method on logging
85+
func (logger *Logger) Close() {
86+
if logger.baseFile != nil {
87+
logger.baseFile.Close()
88+
}
89+
90+
logger.baseLogger = nil
91+
logger.baseFile = nil
92+
}
93+
94+
func (logger *Logger) doPrintf(level int, printLevel string, format string, a ...interface{}) {
95+
if level < logger.level {
96+
return
97+
}
98+
if logger.baseLogger == nil {
99+
panic("logger closed")
100+
}
101+
102+
format = printLevel + format
103+
logger.baseLogger.Output(3, fmt.Sprintf(format, a...))
104+
105+
if level == fatalLevel {
106+
os.Exit(1)
107+
}
108+
}
109+
110+
func (logger *Logger) Debug(format string, a ...interface{}) {
111+
logger.doPrintf(debugLevel, printDebugLevel, format, a...)
112+
}
113+
114+
func (logger *Logger) Release(format string, a ...interface{}) {
115+
logger.doPrintf(releaseLevel, printReleaseLevel, format, a...)
116+
}
117+
118+
func (logger *Logger) Error(format string, a ...interface{}) {
119+
logger.doPrintf(errorLevel, printErrorLevel, format, a...)
120+
}
121+
122+
func (logger *Logger) Fatal(format string, a ...interface{}) {
123+
logger.doPrintf(fatalLevel, printFatalLevel, format, a...)
124+
}
125+
126+
var gLogger, _ = New("debug", "", log.LstdFlags)
127+
128+
// It's dangerous to call the method on logging
129+
func Export(logger *Logger) {
130+
if logger != nil {
131+
gLogger = logger
132+
}
133+
}
134+
135+
func Debug(format string, a ...interface{}) {
136+
gLogger.doPrintf(debugLevel, printDebugLevel, format, a...)
137+
}
138+
139+
func Release(format string, a ...interface{}) {
140+
gLogger.doPrintf(releaseLevel, printReleaseLevel, format, a...)
141+
}
142+
143+
func Error(format string, a ...interface{}) {
144+
gLogger.doPrintf(errorLevel, printErrorLevel, format, a...)
145+
}
146+
147+
func Fatal(format string, a ...interface{}) {
148+
gLogger.doPrintf(fatalLevel, printFatalLevel, format, a...)
14149
}
15150

16-
func LollipopGoInfo(data interface{}) {
17-
glog.Info(data)
18-
return
151+
func Close() {
152+
gLogger.Close()
19153
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package LollipopGo
22

33
import (
4+
"LollipopGo/LollipopGo/conf" // 配置文件
45
"LollipopGo/LollipopGo/log"
56
)
67

7-
// 运行程序
88
func Run() {
9-
// 日志数据 -- 操作
10-
log.LollipopGoInfo("Golang语言社区 LeafLtd %v starting up" + version)
9+
// logger
10+
if conf.LogLevel != "" {
11+
logger, err := log.New(conf.LogLevel, conf.LogPath, conf.LogFlag)
12+
if err != nil {
13+
panic(err)
14+
}
15+
log.Export(logger)
16+
defer logger.Close()
17+
}
18+
19+
log.Release("Golang语言社区 LeafLtd %v starting up", version)
1120
}

0 commit comments

Comments
 (0)