Skip to content

Commit

Permalink
add close method for log
Browse files Browse the repository at this point in the history
  • Loading branch information
name5566 committed Aug 10, 2014
1 parent f1ce62c commit 655efab
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 11 deletions.
1 change: 1 addition & 0 deletions leaf.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package leaf
3 changes: 2 additions & 1 deletion log/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ func Example() {
logger.Debug("will not print")
logger.Release("My name is %v", "Leaf")

log.SetGlobalLogger(logger)
log.Export(logger)

log.Debug("will not print")
log.Release("123")
log.Error("456")
log.Fatal("789")
log.Close()
}
43 changes: 33 additions & 10 deletions log/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const (
type Logger struct {
level int
baseLogger *log.Logger
baseFile *os.File
}

func New(strLevel string, pathname string) (*Logger, error) {
Expand All @@ -48,6 +49,7 @@ func New(strLevel string, pathname string) (*Logger, error) {

// logger
var baseLogger *log.Logger
var baseFile *os.File
if pathname != "" {
now := time.Now()

Expand All @@ -59,12 +61,13 @@ func New(strLevel string, pathname string) (*Logger, error) {
now.Minute(),
now.Second())

f, err := os.Create(path.Join(pathname, filename))
file, err := os.Create(path.Join(pathname, filename))
if err != nil {
return nil, err
}

baseLogger = log.New(f, "", log.LstdFlags)
baseLogger = log.New(file, "", log.LstdFlags)
baseFile = file
} else {
baseLogger = log.New(os.Stdout, "", log.LstdFlags)
}
Expand All @@ -73,14 +76,29 @@ func New(strLevel string, pathname string) (*Logger, error) {
logger := new(Logger)
logger.level = level
logger.baseLogger = baseLogger
logger.baseFile = baseFile

return logger, nil
}

// multi-goroutine unsafe
// It's dangerous to call the method on logging
func (logger *Logger) Close() {
if logger.baseFile {
logger.baseFile.Close()
}

logger.baseLogger = nil
logger.baseFile = nil
}

func (logger *Logger) doPrintf(level int, printLevel string, format string, a ...interface{}) {
if level < logger.level {
return
}
if logger.baseLogger == nil {
panic("logger closed")
}

format = printLevel + format
logger.baseLogger.Printf(format, a...)
Expand All @@ -106,25 +124,30 @@ func (logger *Logger) Fatal(format string, a ...interface{}) {
logger.doPrintf(fatalLevel, printFatalLevel, format, a...)
}

// global logger
var globalLogger *Logger
var gLogger *Logger

func SetGlobalLogger(logger *Logger) {
globalLogger = logger
// multi-goroutine unsafe
// It's dangerous to call the method on logging
func Export(logger *Logger) {
gLogger = logger
}

func Debug(format string, a ...interface{}) {
globalLogger.Debug(format, a...)
gLogger.Debug(format, a...)
}

func Release(format string, a ...interface{}) {
globalLogger.Release(format, a...)
gLogger.Release(format, a...)
}

func Error(format string, a ...interface{}) {
globalLogger.Error(format, a...)
gLogger.Error(format, a...)
}

func Fatal(format string, a ...interface{}) {
globalLogger.Fatal(format, a...)
gLogger.Fatal(format, a...)
}

func Close() {
gLogger.Close()
}
1 change: 1 addition & 0 deletions service/agent/agent.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package agent

0 comments on commit 655efab

Please sign in to comment.