Я пытаюсь написать оболочку для встроенного регистратора Go.Это для совместимости.
package main
import (
"log"
"os"
)
var(
mylog *log.Logger
)
func main() {
mylog = log.New(os.Stdout, "", 0)
mylog.Printf("test")
}
Вместо использования os.Stdout я хочу создать что-то одно.Похож на os.Stdout , но печатает с префиксом, как показано ниже.
package main
import(
"log"
"mylibrary"
)
var(
mylog *log.Logger
)
func main() {
mylog = log.New(mylibrary.Prefix, "", 0)
mylog.Printf("test")
}
В принципе, я все еще хочу иметь * log.Logger , имея собственный журнал.Может ли кто-нибудь дать мне подсказку, как я могу заставить это работать?
В настоящее время я использую следующее, чтобы сделать это.Но держу пари, что есть лучший способ.
func NewIoWriter(f func(string)) *io.PipeWriter {
r, w := io.Pipe()
go func() {
scanner := bufio.NewScanner(r)
for scanner.Scan() {
f(scanner.Text())
}
if err := scanner.Err(); err != nil {
f(err.Error())
}
r.Close()
}()
runtime.SetFinalizer(w, (*io.PipeWriter).Close)
return w
}
Какой лучший способ заставить его работать?
Спасибо