diff --git a/.example/os/glog/handler/glog_handler_greylog.go b/.example/os/glog/handler/glog_handler_greylog.go new file mode 100644 index 000000000..e690ac309 --- /dev/null +++ b/.example/os/glog/handler/glog_handler_greylog.go @@ -0,0 +1,31 @@ +package main + +//import ( +// "context" +// "github.com/gogf/gf/frame/g" +// "github.com/gogf/gf/os/glog" +// "github.com/robertkowalski/graylog-golang" +//) +// +//var greyLogClient = gelf.New(gelf.Config{ +// GraylogPort: 80, +// GraylogHostname: "graylog-host.com", +// Connection: "wan", +// MaxChunkSizeWan: 42, +// MaxChunkSizeLan: 1337, +//}) +// +//// LoggingGreyLogHandler is an example handler for logging content to remote GreyLog service. +//var LoggingGreyLogHandler glog.Handler = func(ctx context.Context, in *glog.HandlerInput) { +// in.Next() +// greyLogClient.Log(in.Buffer.String()) +//} +// +//func main() { +// g.Log().SetHandlers(LoggingGreyLogHandler) +// +// g.Log().Debug("Debugging...") +// g.Log().Warning("It is warning info") +// g.Log().Error("Error occurs, please have a check") +// glog.Println("test log") +//} diff --git a/.example/os/glog/handler/glog_handler_json.go b/.example/os/glog/handler/glog_handler_json.go index ee4bb06e6..49dc0750b 100644 --- a/.example/os/glog/handler/glog_handler_json.go +++ b/.example/os/glog/handler/glog_handler_json.go @@ -16,7 +16,7 @@ type JsonOutputsForLogger struct { Content string `json:"content"` } -// LoggingJsonHandler is a example handler for logging JSON format content. +// LoggingJsonHandler is an example handler for logging JSON format content. var LoggingJsonHandler glog.Handler = func(ctx context.Context, in *glog.HandlerInput) { jsonForLogger := JsonOutputsForLogger{ Time: in.TimeFormat, diff --git a/os/glog/glog_logger.go b/os/glog/glog_logger.go index 8c8dd3716..5c6ea42e7 100644 --- a/os/glog/glog_logger.go +++ b/os/glog/glog_logger.go @@ -227,24 +227,33 @@ func (l *Logger) print(ctx context.Context, level int, values ...interface{}) { } // doDefaultPrint outputs the logging content according configuration. -func (l *Logger) doDefaultPrint(ctx context.Context, input *HandlerInput) { +func (l *Logger) doDefaultPrint(ctx context.Context, input *HandlerInput) *bytes.Buffer { + var buffer *bytes.Buffer if l.config.Writer == nil { - // Output content to disk file. - if l.config.Path != "" { - l.printToFile(ctx, input.Time, input) - } // Allow output to stdout? if l.config.StdoutPrint { - l.printToStdout(ctx, input) + if buf := l.printToStdout(ctx, input); buf != nil { + buffer = buf + } + } + + // Output content to disk file. + if l.config.Path != "" { + if buf := l.printToFile(ctx, input.Time, input); buf != nil { + buffer = buf + } } } else { // Output to custom writer. - l.printToWriter(ctx, input) + if buf := l.printToWriter(ctx, input); buf != nil { + buffer = buf + } } + return buffer } // printToWriter writes buffer to writer. -func (l *Logger) printToWriter(ctx context.Context, input *HandlerInput) { +func (l *Logger) printToWriter(ctx context.Context, input *HandlerInput) *bytes.Buffer { if l.config.Writer != nil { var ( buffer = input.getRealBuffer(l.config.WriterColorEnable) @@ -252,23 +261,30 @@ func (l *Logger) printToWriter(ctx context.Context, input *HandlerInput) { if _, err := l.config.Writer.Write(buffer.Bytes()); err != nil { intlog.Error(ctx, err) } + return buffer } + return nil } // printToStdout outputs logging content to stdout. -func (l *Logger) printToStdout(ctx context.Context, input *HandlerInput) { +func (l *Logger) printToStdout(ctx context.Context, input *HandlerInput) *bytes.Buffer { if l.config.StdoutPrint { + var ( + buffer = input.getRealBuffer(true) + ) // This will lose color in Windows os system. // if _, err := os.Stdout.Write(input.getRealBuffer(true).Bytes()); err != nil { // This will print color in Windows os system. - if _, err := fmt.Fprintf(color.Output, input.getRealBuffer(true).String()); err != nil { + if _, err := fmt.Fprintf(color.Output, buffer.String()); err != nil { intlog.Error(ctx, err) } + return buffer } + return nil } // printToFile outputs logging content to disk file. -func (l *Logger) printToFile(ctx context.Context, t time.Time, in *HandlerInput) { +func (l *Logger) printToFile(ctx context.Context, t time.Time, in *HandlerInput) *bytes.Buffer { var ( buffer = in.getRealBuffer(l.config.WriterColorEnable) logFilePath = l.getFilePath(t) @@ -294,6 +310,7 @@ func (l *Logger) printToFile(ctx context.Context, t time.Time, in *HandlerInput) intlog.Error(ctx, err) } } + return buffer } // getFilePointer retrieves and returns a file pointer from file pool. diff --git a/os/glog/glog_logger_handler.go b/os/glog/glog_logger_handler.go index 4217f5a42..bdeb4cdfc 100644 --- a/os/glog/glog_logger_handler.go +++ b/os/glog/glog_logger_handler.go @@ -95,7 +95,10 @@ func (i *HandlerInput) getRealBuffer(withColor bool) *bytes.Buffer { // defaultHandler is the default handler for logger. func defaultHandler(ctx context.Context, in *HandlerInput) { - in.Logger.doDefaultPrint(ctx, in) + buffer := in.Logger.doDefaultPrint(ctx, in) + if in.Buffer.Len() == 0 { + in.Buffer = buffer + } } func (i *HandlerInput) addStringToBuffer(buffer *bytes.Buffer, strings ...string) {