**加了段代码后,程序跑个两三天就挂一次**
在原有的代码中加了一段如下的功能:
1 遍历文件夹,获取以“no_”命名开头的文件。
2 根据获取的结果做其他操作----------( SetLevel(curLevel) )
下面是代码的主题
var curLevel int
levelCheck := func(logPath string) {
if logPath == "" {
return
}
for {
time.Sleep(time.Second * 30)
s, err := ListLevelKeys(logPath)
if err != nil {
continue
}
level := GetMaxLevel(s)
if curLevel != level {
curLevel = level
log.GetLog().SetLevel(curLevel) //一般情况下不会执行
}
}
}
go levelCheck(s.logDir)
加上之后的程序会异常结束,结束的时候没有panic。也没有coredump文件
*****
附上其他函数完整的定义:
func ListLevelKeys(dirPth string) (files []string, err error) {
if dirPth == "" {
return nil, errors.New("dirPht is null")
}
dir, err := ioutil.ReadDir(dirPth)
if err != nil {
return nil, err
}
for _, fi := range dir {
if fi.IsDir() {
continue
}
filename := fi.Name()
if len(filename) < 3 {
continue
}
if filename[:3] == "no_" {
files = append(files, filename)
}
}
return files, nil
}
func GetMaxLevel(keys []string) (maxlevel int) {
if keys == nil {
return 0
}
GetLevel := func(key string) (level int) {
if len(key) < 3 {
return
}
switch key {
case "no_debug":
level = log.DebugLevel + 1
case "no_info":
level = log.InfoLevel + 1
case "no_warn":
level = log.WarnLevel + 1
case "no_err":
level = log.ErrorLevel + 1
case "no_fatal":
level = log.FatalLevel + 1
case "no_read":
level = log.ReadLevel + 1
case "no_write":
level = log.UpdateLevel + 1
}
return
}
for _, key := range keys {
level := GetLevel(key)
if level > maxlevel {
maxlevel = level
}
}
return
}
log.GetLog().SetLevel(curLevel){
//......
//这个函数之后dir下的"no_*"文件有变动时才会执行,应该不会引起程序异常结束吧?
//一般是不会执行的
}
有疑问加站长微信联系(非本文作者)