为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红糖糍粑 2022-10-04 19:36:37
总之我想在“日志”时向我的HTTP服务器发送系统信息。致命 ()“ 被调用,而无需为每个日志语句添加任何额外的代码。更改/覆盖信息,致命等的默认行为将非常棒。在Python中,有一种方法可以将HTTP处理程序添加到默认日志记录库,这反过来又会在日志发出时发送POST HTTP请求。
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

您可以为内置创建包装模块log


您的项目/日志/日志


package log

import goLog "log"

func Fatal(v ...interface{}) {

   goLog.Fatal(v...)

   // send request ...

   // reqQueue <- some args

}

将模块替换为项目中的包装器log


// import "log"

import "yourproject/log"


func Foo() {

    log.Fatal(err)

}


查看完整回答
反对 回复 2022-10-04
?
呼如林

TA贡献1798条经验 获得超3个赞

尝试创建一个包装标准 Logger 类型的类型,但具有所需的增强功能。然后,通过创建一个名为“log”的实例来包装默认记录器,您可以继续以相同的方式在代码中使用日志记录,并且所需的更改最少(因为它将与日志包具有相同的名称,并保留*所有方法)。


package main


import _log "log"


type WrappedLogger struct {

    // This field has no name, so we retain all the Logger methods

    *_log.Logger

}


// here we override the behaviour of log.Fatal

func (l *WrappedLogger) Fatal(v ...interface{}) {

    l.Println("doing the HTTP request")

    /// do HTTP request


    // now call the original Fatal method from the underlying logger

    l.Logger.Fatal(v...)

}


// wrapping the default logger, but adding our new method.

var log = WrappedLogger{_log.Default()}


func main() {

    // notice we can still use Println

    log.Println("hello")

    // but now Fatal does the special behaviour

    log.Fatal("fatal log")

}

*这里唯一的问题是,我们用日志实例替换了典型的日志包。在许多方面,它的行为是相同的,因为为了方便起见,日志包中的大多数函数都设置为转发到默认的 Logger 实例。


但是,这意味着我们的新成员将无法访问日志包中的“true”函数,例如 log。新建。为此,您需要将别名引用到原始包。log


// want to create a new logger?

_log.New(out, prefix, flag)


查看完整回答
反对 回复 2022-10-04
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信