我想以自己的格式记录来自net / http的错误。在net /
http包中,我找到了Server结构:
type Server struct {
//...
ErrorLog *log.Logger
}
我想用自己的实现代替logger:
type AppLogger struct {
log *zap.SugaredLogger
}
func (l *AppLogger) Error(message string, keyAndValues ...interface{}) {
l.log.Errorw(message, keyAndValues...)
}
实施此方法的正确方法是什么?
更新:
我有以下配置的zap记录器:
cfg := zap.Config{
Encoding: encoding,
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stdout"},
EncoderConfig: encCfg,
}
logger, err := cfg.Build()
它配置为以json格式编写。我希望net/http
以与zap相同的方式编写错误。我创建以下内容:
type serverJsonWriter struct {
io.Writer
}
// ListenAndServeTLS - with custom log Writer
func ListenAndServeTLS(addr, certFile, keyFile string, handler http.Handler) error {
server := &http.Server{
Addr: addr,
Handler: handler,
ErrorLog: logger.New(serverJsonWriter{}, "", 0),
}
}
func (w serverJsonWriter) Write(p []byte) (n int, err error){
// {"error":{"type":"net/http error","message":"header too long"}}
}
问题:
serverJsonWriter
方法的主体应该是什么?zap
io.Writer以便通过它log.Logger
吗?这该怎么做?这很容易log.Logger
做到,因为该类型可以保证每个日志消息都可以通过io.Writer
一次Writer.Write()
调用传递到目标:
每个日志记录操作都会调用Writer的Write方法。一个Logger可以同时从多个goroutine中使用;它保证序列化对Writer的访问。
因此,基本上,您只需要创建一个实现的类型io.Writer
,并且该类型的Write()
方法只需调用记录器即可。
这是执行此操作的简单实现:
type fwdToZapWriter struct {
logger *zap.SugaredLogger
}
func (fw *fwdToZapWriter) Write(p []byte) (n int, err error) {
fw.logger.Errorw(string(p))
return len(p), nil
}
就这样。您可以http.Server
像这样“安装”该编写器:
server := &http.Server{
Addr: addr,
Handler: handler,
ErrorLog: logger.New(&fwdToZapWriter{logger}, "", 0),
}
logger
上面的示例来自您的示例: logger, err := cfg.Build()
如果你愿意,你可以很容易地转发给你的AppLogger
,而不是logger
。
我有一个使用slf4j进行日志记录的应用程序。现在我想添加一个功能,每当我记录错误时,就会调用一个特定的url。目前,我在应用程序级别添加了一个包装器方法,该方法发送http请求,然后调用logger方法。但这样我就错过了一些输出,一些异常只是被记录下来,而没有发送相应的请求。我正在尝试创建我的自定义logger类。我的问题是应该扩展哪些类(或要实现的接口)。我无法扩展Logger类,因为它的构造
将PostSharp用于C#应用程序,我有以下场景: Namespace_ACustomLoggingMethod Namespace_B.DoThings thingMethod(实际上是几种不同的方法) DoMomthingMethod调用CustomLoggingMethod,它以所需的格式创建日志条目并且运行良好。正如预期的那样,日志条目将源记录为CustomLoggingMethod,我
问题内容: 我正在尝试使用Go的net / http包设置cookie。我有: 我尝试将“ Golang”与“ cookies”进行谷歌搜索,但没有得到任何好的结果。如果有人能指出我正确的方向,将不胜感激。 问题答案: 我不是Go专家,但是我认为您是在请求中设置Cookie,不是吗?您可能需要在响应上进行设置。net / http中有一个功能。这可能会有所帮助:http : //golang.or
介绍: 现在基于css font-face的字体图标越来越流行。 这种图标具有矢量图的特点,可以不失真的自由缩放,还可以通过css来设置图标的颜色,还有就是网络上资源特别丰富。X5系统自带了数百个字体图标, 用户还可以通过配置使用自己下载的字体图标, 下边就介绍一下具体的使用方法。 首先以fortawesome 网站为例(网址:http://fortawesome.github.io/Font-A
介绍: 现在基于css font-face的字体图标越来越流行。 这种图标具有矢量图的特点,可以不失真的自由缩放,还可以通过css来设置图标的颜色,还有就是网络上资源特别丰富。X5系统自带了数百个字体图标, 用户还可以通过配置使用自己下载的字体图标, 下边就介绍一下具体的使用方法。 首先以fortawesome 网站为例(网址:http://fortawesome.github.io/Font-A
问题内容: 我想实现一个自定义记录器,该记录器将所有日志条目记录到数据库中。目前,我的应用以这种方式记录日志(slf4j和log4j绑定): 我不确定如何进行。我的想法是通过实现org.slf4j.Logger接口来实现自定义日志记录绑定 下一步将是什么?我的目标是不更改当前代码 我考虑过的链接: http://www.slf4j.org/manual.html 问题答案: 它应该相当容易。您需要