jjzjj

Multiwriter

全部标签

logging - 使用 io.Multiwriter 跨包/子包创建日志

我是Go的新手。目前,我正在编写一个工具来捕获所有stdout输出,并将它们合并到一个新文件中。为此,我使用了io.Multiwriter。但是,我的问题在于试图跨包和子包捕获所有stdout输出。目前,我的方法是创建一个新包,它对所有日志记录具有独占作用。每当其他包/子包之一有一些输出字符串时,我会将字符串发送到日志包,然后将多写到日志和标准输出。这听起来合理吗?如果是这样,通用日志记录包API应该是什么样的?另外,将用于输出/日志记录的字符串传递到日志包的好方法是什么?谢谢! 最佳答案 我想我会很好地使用已经可用的记录器包来满足

logging - 如何向 io.MultiWriter 添加/删除按需编写器?

我正在将日志写入文件和程序的标准输入,使用如下内容:typemyLogger{log*log.Logger}cmd:=exec.Command("logger","-t","test")w,_=cmd.StdinPipe()multi:=io.MultiWriter(file,w)myLog:=myLogger{log.New(multi,"",log.Ldate|log.Ltime)}但是如果命令退出、被终止或者我只想添加另一个Writer,我怎么能把它附加到现有的logger?目前,对于每次更改,我都会创建一个新的multi并覆盖现有的记录器:multi:=io.MultiWrit

logging - 如何向 io.MultiWriter 添加/删除按需编写器?

我正在将日志写入文件和程序的标准输入,使用如下内容:typemyLogger{log*log.Logger}cmd:=exec.Command("logger","-t","test")w,_=cmd.StdinPipe()multi:=io.MultiWriter(file,w)myLog:=myLogger{log.New(multi,"",log.Ldate|log.Ltime)}但是如果命令退出、被终止或者我只想添加另一个Writer,我怎么能把它附加到现有的logger?目前,对于每次更改,我都会创建一个新的multi并覆盖现有的记录器:multi:=io.MultiWrit

go - io.MultiWriter vs. golang 的传值

我想创建一种情况,其中所有内容都设置为特定日志。记录器也附加到特定变量的字符串数组。变量的类型实现了io.Writer接口(interface),因此通过io.MultiWriter将其添加到log.New()应该很容易,但我似乎遇到了一个棘手的问题:io.Writer接口(interface)是固定的,并且鉴于golang的按值传递,变量不可能引用自身。也许举个例子会更有意义:packagemainimport"fmt"import"io"import"log"import"os"import"strings"varLog*log.LoggertypeJob_Resultstruct

go - io.MultiWriter vs. golang 的传值

我想创建一种情况,其中所有内容都设置为特定日志。记录器也附加到特定变量的字符串数组。变量的类型实现了io.Writer接口(interface),因此通过io.MultiWriter将其添加到log.New()应该很容易,但我似乎遇到了一个棘手的问题:io.Writer接口(interface)是固定的,并且鉴于golang的按值传递,变量不可能引用自身。也许举个例子会更有意义:packagemainimport"fmt"import"io"import"log"import"os"import"strings"varLog*log.LoggertypeJob_Resultstruct

go - 将 []*io.PipeWriter 传递给 io.MultiWriter

我创建了一堆*io.PipeWriter并希望基于一个函数中的所有这些管道编写器创建一个多编写器。所以我调用一个类似的函数funccopyToWriters(reader*bufio.Reader,errschanerror,writers[]*io.PipeWriter){for_,writer:=rangewriters{deferwriter.Close()}mw:=io.MultiWriter(writers)_,err:=io.Copy(mw,reader)iferr!=nil{errs我调用带有参数的方法copyToWriters(reader,errs,[]*io.Pip

golang - os.stdout 和 multiwriter 之间的区别

我有这段代码可以运行zsh并将其输出记录到输出文件中。packagemainimport("io""os""os/exec")funcmain(){cmd:=exec.Command("zsh")f,_:=os.Create("log.txt")multiWriter:=io.MultiWriter(os.Stdout,f)cmd.Stdout=multiWritercmd.Stderr=os.Stderrcmd.Stdin=os.Stdincmd.Run()}funchaltOnError(errerror){iferr!=nil{panic(err)}}程序执行时,输入ls会输出f