diff --git a/behavior_asynclooplogger.go b/behavior_asynclooplogger.go index 972467b..24b0161 100644 --- a/behavior_asynclooplogger.go +++ b/behavior_asynclooplogger.go @@ -44,17 +44,28 @@ func NewAsyncLoopLogger(config *logConfig) *asyncLoopLogger { func (asnLoopLogger *asyncLoopLogger) processItem() (closed bool) { asnLoopLogger.queueHasElements.L.Lock() - defer asnLoopLogger.queueHasElements.L.Unlock() for asnLoopLogger.msgQueue.Len() == 0 && !asnLoopLogger.Closed() { asnLoopLogger.queueHasElements.Wait() } + element := asnLoopLogger.msgQueue.Front() + + if element != nil { + asnLoopLogger.msgQueue.Remove(element) + } + + asnLoopLogger.queueHasElements.L.Unlock() + + if element != nil { + msg, _ := element.Value.(msgQueueItem) + asnLoopLogger.processLogMsg(msg.level, msg.message, msg.context) + } + if asnLoopLogger.Closed() { return true } - asnLoopLogger.processQueueElement() return false } diff --git a/behavior_asynctimerlogger.go b/behavior_asynctimerlogger.go index 8118f20..a151ebf 100644 --- a/behavior_asynctimerlogger.go +++ b/behavior_asynctimerlogger.go @@ -55,17 +55,28 @@ func NewAsyncTimerLogger(config *logConfig, interval time.Duration) (*asyncTimer func (asnTimerLogger *asyncTimerLogger) processItem() (closed bool) { asnTimerLogger.queueHasElements.L.Lock() - defer asnTimerLogger.queueHasElements.L.Unlock() for asnTimerLogger.msgQueue.Len() == 0 && !asnTimerLogger.Closed() { asnTimerLogger.queueHasElements.Wait() } + element := asnTimerLogger.msgQueue.Front() + + if element != nil { + asnTimerLogger.msgQueue.Remove(element) + } + + asnTimerLogger.queueHasElements.L.Unlock() + + if element != nil { + msg, _ := element.Value.(msgQueueItem) + asnTimerLogger.processLogMsg(msg.level, msg.message, msg.context) + } + if asnTimerLogger.Closed() { return true } - asnTimerLogger.processQueueElement() return false } diff --git a/common_context.go b/common_context.go index 230a76c..5a47607 100644 --- a/common_context.go +++ b/common_context.go @@ -98,7 +98,7 @@ func extractCallerInfo(skip int) (*logContext, error) { } var shortPath string - fullPath, line := funcInfo.FileLine(pc) + fullPath, line := funcInfo.FileLine(pc - 1) if strings.HasPrefix(fullPath, workingDir) { shortPath = fullPath[len(workingDir):] } else { diff --git a/format.go b/format.go index ec47b45..c643908 100644 --- a/format.go +++ b/format.go @@ -47,7 +47,7 @@ const ( // Time and date formats used for %Date and %Time aliases. const ( DateDefaultFormat = "2006-01-02" - TimeFormat = "15:04:05" + TimeFormat = "15:04:05.000" ) var DefaultMsgFormat = "%Ns [%Level] %Msg%n" diff --git a/logger.go b/logger.go index fc96aed..5245e1e 100644 --- a/logger.go +++ b/logger.go @@ -336,35 +336,17 @@ func (cLogger *commonLogger) isAllowed(level LogLevel, context LogContextInterfa } type logMessage struct { - params []interface{} -} - -type logFormattedMessage struct { - format string - params []interface{} + str string } func newLogMessage(params []interface{}) fmt.Stringer { - message := new(logMessage) - - message.params = params - - return message + return &logMessage{ fmt.Sprint(params...) } } -func newLogFormattedMessage(format string, params []interface{}) *logFormattedMessage { - message := new(logFormattedMessage) - - message.params = params - message.format = format - - return message +func newLogFormattedMessage(format string, params []interface{}) fmt.Stringer { + return &logMessage{ fmt.Sprintf(format, params...) } } func (message *logMessage) String() string { - return fmt.Sprint(message.params...) -} - -func (message *logFormattedMessage) String() string { - return fmt.Sprintf(message.format, message.params...) + return message.str }