Zap logger исходная строка - PullRequest
0 голосов
/ 16 апреля 2020

Как напечатать точную исходную строку, используя zap. Я создаю пакет, в котором хранится переменная (zap logger). Эта глобальная переменная будет вызываться внутри функций в этом пакете. Проблема в том, что он не печатает фактического абонента, а вызывает, где регистратор вызывал функцию внутри пакета регистратора. Вот мой код:

package log

import (
    zap "go.uber.org/zap"
)

var logger        *zap.Logger

func Init() {
    logger,_ = zap.NewDevelopment()
}

func Info(msg interface{}) {
    if v,ok := msg.(string); ok {
        logger.Info(v) // when I called this function it always print the caller from this line, not the caller outside who actually called this function.
    } else {
        logger.Info(fmt.Sprintf("%v",msg))
    }
}

Какой обходной путь для вывода значения исходной строки для фактического вызывающего абонента?

1 Ответ

1 голос
/ 16 апреля 2020

Используйте runtime вызывающий абонент.

import "runtime"

// call below line inside your Info function.
pc, src, line, ok := runtime.Caller(1)

sr c и строка - это то, что вам нужно.

...