草庐IT

go - 如何测试从自定义配置构建的 zap Logger 的日志记录?

我有一个从自定义配置(即config.Build())生成的Zap记录器。我想通过在测试方法中调用例如logger.Info()来测试记录器,并断言结果以查看它是否符合配置集。我怎样才能做到这一点?代码示例:funcGetLogger()*zap.Logger{config:=&zap.Config{Encoding:"json",Level:zap.NewAtomicLevelAt(zapcore.InfoLevel),OutputPaths:[]string{"stdout"},ErrorOutputPaths:[]string{"stdout"},EncoderConfig:za

service - 为什么 Go 的 Logger 不关闭与 syslog 的连接?

我在编写服务时遇到问题。我让它像这样记录到系统日志:http://technosophos.com/2013/09/14/using-gos-built-logger-log-syslog.html但是当我通过CTRL-C终止服务时,某些东西使连接打开到syslogd。反正我看不到启动清理。我错过了什么例如syslog.Writer.Close()对我来说似乎无法访问,但我可以说清理没有发生。我看到连接卡在CLOSE_WAIT状态,我的syslogd开始停滞不前并变得不合作。例子:packagemainimport("github.com/davecgh/go-spew/spew"//

去测试删除logger.SetLogging日志文件

我有一个用于定义日志文件路径的函数的测试用例,然后设置记录器,以便将log.*语句写入标准输出和日志文件:lf,err:=os.Create(logFile)mw:=io.MultiWriter(os.Stdout,lf)log.SetOutput(mw)在我的测试用例中,我试图在最后清理,但文件上似乎仍然有锁,这意味着Os.Remove()调用不起作用(甚至返回错误)我已经尝试将SetOutput设置为nil以及使用defer语句。funcTestSetLogging(t*testing.T){//dostuff...log.Println("thisshouldbeinlogger

golang 代理 io.Writer 在 log.Logger 中使用时表现不同

我正在尝试实现一个满足io.Writer要求的代理,这样我就可以将它插入一个记录器中。这个想法是它会像平常一样打印输出,但也会保留一份数据副本供以后读取。下面代码中的ProxyIO结构应该可以做到这一点,而且只要我直接调用它的Write()方法,它确实可以做到。但是,当我将它插入log.Logger实例时,输出是意外的。(这是精简代码,我想使用的原始实现是使用映射和循环指针,而不是示例代码中使用的[][]bytebuf。我还删除了所有的锁定。)packagemainimport("fmt""io""io/ioutil""log")typeProxyIOstruct{outio.Writ

go - 如何在 main 之外使用 Logger

我正在使用记录器包github.com/jcelliott/lumber用于登录,我这样声明和使用它:funcmain(){log:=lumber.NewConsoleLogger(lumber.DEBUG)...log.Error("Fileerror:%v\n",e)}如何从main之外的函数登录?显然这里的日志是在main中声明的,这限制了它的范围,但我还没有找到在GO中拥有全局变量的方法,有没有比在每个函数中重新声明记录器更好的方法? 最佳答案 像这样声明你的全局变量:varloglumber.LoggerfuncanyFu

go - 有没有内置的可以滚动的go logger

是否有内置的Go记录器可以在达到文件大小限制时滚动日志文件?谢谢。 最佳答案 不,目前没有内置的记录器具有此功能。log4go,您会在搜索时发现推荐的,目前已损坏。有一些issues,这会导致消息丢失(如果主程序退出并且某些消息在写入之前仍在channel缓冲区中)。这在大多数(如果不是全部)示例中都存在。另见thisquestion 关于go-有没有内置的可以滚动的gologger,我们在StackOverflow上找到一个类似的问题: https://st

logging - 是否可以在不丢失行号前缀的情况下包装 log.Logger 函数?

当使用log.Lshortfile标志时,记录器会在所有日志行前加上记录器函数调用的文件名和行号,例如:myfile.go:14:Hello,world!IfIwrapthelogfunctionlikethis,forinstance:funcinfo(patternstring,args...interface{}){myLogger.Printf(pattern+"\n",args...)}此函数发出的每一行都将以Printf调用的行号作为前缀。这是预期的,但所需的行为是为每一行添加调用info的行的行号作为前缀。有什么解决办法吗? 最佳答案

linux - 这个 shell 命令是什么意思 "exec 3>&1 >>(logger -t "OKOK")"

我在一些源代码中发现了以下bash命令。exec3>&1>>(logger-t"OKOK")具体是什么意思?据我所知,它将这些日志重定向到系统日志。但是,3>&1是什么?我以前从未见过3的文件描述符。 最佳答案 确实不寻常,但确实存在:Eachopenfilegetsassignedafiledescriptor.Thefiledescriptorsforstdin,stdout,andstderrare0,1,and2,respectively.Foropeningadditionalfiles,thereremaindescri

node.js - Winston logger.info 不是函数

我已经为Winston设置了到MySQL和控制台的传输,并将它放在一个名为logger的模块中。就这样……//modules/logger.js/*requirestatements*/exports.logger=new(winston.Logger)({transports:[newwinstonMysql(winstonMysqlConfig),new(winston.transports.Console)]});然后在/modules//modules/index.js/*grabothermodules*/exports.logger=require('./logger.js

node.js - NodeJS 连接错误 - 没有方法 'logger'

这里对nodejs还算陌生。我有一个nodejs网络服务器正在运行,它通过ajax提供数据。我现在需要扩展服务器以响应各种发布请求。我想要运行的只是bodyParser中间件,但在不同的开发电脑上。操作系统:debiannodejs:v0.10.29以普通用户和root身份运行“npminstallconnect”代码varhttp=require('http');varconnect=require('connect');varapp=connect().use(connect.logger('dev')).use(connect.static('public')).use(conn