|
@@ -36,21 +36,22 @@ type Logger struct {
|
|
|
|
|
|
//实现io.writer接口
|
|
|
type logwriter struct {
|
|
|
- logpath string
|
|
|
- sizelimt int64
|
|
|
- currentsize int64
|
|
|
- mux sync.RWMutex
|
|
|
- filewriter *os.File
|
|
|
+ logpath string
|
|
|
+ sizelimt int64
|
|
|
+ currentsize int64
|
|
|
+ filenameprifex string
|
|
|
+ mux sync.RWMutex
|
|
|
+ filewriter *os.File
|
|
|
}
|
|
|
|
|
|
//
|
|
|
func (lw *logwriter) Write(p []byte) (int, error) {
|
|
|
lw.mux.Lock()
|
|
|
if lw.filewriter == nil {
|
|
|
- lw.filewriter, _ = os.OpenFile(lw.makeLogFile(lw.logpath), os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0777)
|
|
|
+ lw.filewriter, _ = os.OpenFile(lw.makeLogFile(), os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0777)
|
|
|
} else if lw.currentsize > lw.sizelimt {
|
|
|
lw.filewriter.Close()
|
|
|
- lw.filewriter, _ = os.OpenFile(lw.makeLogFile(lw.logpath), os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0777)
|
|
|
+ lw.filewriter, _ = os.OpenFile(lw.makeLogFile(), os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0777)
|
|
|
lw.currentsize = 0
|
|
|
}
|
|
|
lw.mux.Unlock()
|
|
@@ -59,13 +60,13 @@ func (lw *logwriter) Write(p []byte) (int, error) {
|
|
|
}
|
|
|
|
|
|
//生成不重复的文件名
|
|
|
-func (lw *logwriter) makeLogFile(logpath string) string {
|
|
|
- if _, err := os.Stat(logpath); err != nil {
|
|
|
- os.MkdirAll(logpath, 0777)
|
|
|
+func (lw *logwriter) makeLogFile() string {
|
|
|
+ if _, err := os.Stat(lw.logpath); err != nil {
|
|
|
+ os.MkdirAll(lw.logpath, 0777)
|
|
|
}
|
|
|
var log_file_path string
|
|
|
for i := 0; i < 1000; i++ {
|
|
|
- file_name := fmt.Sprintf("%s%clog_%s_%03d.log", logpath, filepath.Separator, time.Now().Format("2006_01_02"), i)
|
|
|
+ file_name := fmt.Sprintf("%s%c%s_%s_%03d.log", lw.logpath, filepath.Separator, lw.filenameprifex, time.Now().Format("2006_01_02"), i)
|
|
|
if _, err := os.Stat(file_name); err != nil {
|
|
|
log_file_path = file_name
|
|
|
break
|
|
@@ -75,7 +76,7 @@ func (lw *logwriter) makeLogFile(logpath string) string {
|
|
|
}
|
|
|
|
|
|
//
|
|
|
-func NewLogger(logpath string, level int, out2stdout bool, filesizelimit int64) *Logger {
|
|
|
+func NewLogger(logpath string, level int, out2stdout bool, filenameprifex string, filesizelimit int64) *Logger {
|
|
|
log_flag := log.Ldate | log.Ltime | log.Lshortfile
|
|
|
logger := &Logger{
|
|
|
logpath: logpath,
|
|
@@ -86,22 +87,25 @@ func NewLogger(logpath string, level int, out2stdout bool, filesizelimit int64)
|
|
|
Waring: log.New(ioutil.Discard, "[waring]", log_flag),
|
|
|
Fail: log.New(ioutil.Discard, "[fail]", log_flag),
|
|
|
}
|
|
|
- logger.SetLevel(level, out2stdout)
|
|
|
+ logger.SetParam(level, out2stdout, logpath, filenameprifex)
|
|
|
return logger
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
-func (l *Logger) SetLevel(level int, out2stdout bool) {
|
|
|
+//设置参数
|
|
|
+func (l *Logger) SetParam(level int, out2stdout bool, logfilepath, filenameprifex string) {
|
|
|
+ l.logpath = logfilepath
|
|
|
var lw io.Writer
|
|
|
if out2stdout {
|
|
|
lw = io.MultiWriter(&logwriter{logpath: l.logpath,
|
|
|
- sizelimt: l.sizelimit,
|
|
|
- currentsize: 0,
|
|
|
+ filenameprifex: filenameprifex,
|
|
|
+ sizelimt: l.sizelimit,
|
|
|
+ currentsize: 0,
|
|
|
}, os.Stdout)
|
|
|
} else {
|
|
|
lw = &logwriter{logpath: l.logpath,
|
|
|
- sizelimt: l.sizelimit,
|
|
|
- currentsize: 0,
|
|
|
+ filenameprifex: filenameprifex,
|
|
|
+ sizelimt: l.sizelimit,
|
|
|
+ currentsize: 0,
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -140,4 +144,4 @@ func (l *Logger) SetLevel(level int, out2stdout bool) {
|
|
|
}
|
|
|
|
|
|
//默认日志
|
|
|
-var Log = NewLogger("./logs", LOG_LEVEL_INFO, true, 1024*1024*50)
|
|
|
+var Log = NewLogger("./logs", LOG_LEVEL_INFO, true, "log", 1024*1024*50)
|