如何在“日志”时发送 HTTP 请求。致命()“被处决了吗?

总之我想在“日志”时向我的HTTP服务器发送系统信息。致命 ()“ 被调用,而无需为每个日志语句添加任何额外的代码。更改/覆盖信息,致命等的默认行为将非常棒。

在Python中,有一种方法可以将HTTP处理程序添加到默认日志记录库,这反过来又会在日志发出时发送POST HTTP请求。


红糖糍粑
浏览 135回答 2
2回答

catspeake

您可以为内置创建包装模块log您的项目/日志/日志package logimport goLog "log"func Fatal(v ...interface{}) {&nbsp; &nbsp;goLog.Fatal(v...)&nbsp; &nbsp;// send request ...&nbsp; &nbsp;// reqQueue <- some args}将模块替换为项目中的包装器log// import "log"import "yourproject/log"func Foo() {&nbsp; &nbsp; log.Fatal(err)}

呼如林

尝试创建一个包装标准 Logger 类型的类型,但具有所需的增强功能。然后,通过创建一个名为“log”的实例来包装默认记录器,您可以继续以相同的方式在代码中使用日志记录,并且所需的更改最少(因为它将与日志包具有相同的名称,并保留*所有方法)。package mainimport _log "log"type WrappedLogger struct {&nbsp; &nbsp; // This field has no name, so we retain all the Logger methods&nbsp; &nbsp; *_log.Logger}// here we override the behaviour of log.Fatalfunc (l *WrappedLogger) Fatal(v ...interface{}) {&nbsp; &nbsp; l.Println("doing the HTTP request")&nbsp; &nbsp; /// do HTTP request&nbsp; &nbsp; // now call the original Fatal method from the underlying logger&nbsp; &nbsp; l.Logger.Fatal(v...)}// wrapping the default logger, but adding our new method.var log = WrappedLogger{_log.Default()}func main() {&nbsp; &nbsp; // notice we can still use Println&nbsp; &nbsp; log.Println("hello")&nbsp; &nbsp; // but now Fatal does the special behaviour&nbsp; &nbsp; log.Fatal("fatal log")}*这里唯一的问题是,我们用日志实例替换了典型的日志包。在许多方面,它的行为是相同的,因为为了方便起见,日志包中的大多数函数都设置为转发到默认的 Logger 实例。但是,这意味着我们的新成员将无法访问日志包中的“true”函数,例如 log。新建。为此,您需要将别名引用到原始包。log// want to create a new logger?_log.New(out, prefix, flag)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go