Мне нужно перезаписать реализацию http.Server ErrorLog. Я пробовал различные примеры, которые я нашел в stackoverflow и git из Go, но ни один из них не работает для меня.
Когда я пытаюсь перезаписать ErrorLog, я передаю регистратору, который переходит в .txt файл.
Это моя реализация:
file, err := os.OpenFile("http_logs.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalln("Failed to open log http_logs:", err)
}
logger := log.New(file, "http: ", log.LstdFlags)
srv := &http.Server{
Handler: router,
Addr: addr,
ErrorLog: logger,
}
if err := srv.ListenAndServe(); err != nil {
errs <- err
}
Вывод моего терминала:
2020/05/29 15:00:28 http: TLS handshake error from [::1]:62016: remote error: tls: bad certificate
Моя цель состоит в том, чтобы вывод был в мой .txt файл.
Строка, в которой нет регистратора, который я передал изначально:
В стандартном http \ server. go, строка 1785 по 1796
if err := tlsConn.Handshake(); err != nil {
// If the handshake failed due to the client not speaking
// TLS, assume they're speaking plaintext HTTP and write a
// 400 response on the TLS conn's underlying net.Conn.
if re, ok := err.(tls.RecordHeaderError); ok && re.Conn != nil && tlsRecordHeaderLooksLikeHTTP(re.RecordHeader) {
io.WriteString(re.Conn, "HTTP/1.0 400 Bad Request\r\n\r\nClient sent an HTTP request to an HTTPS server.\n")
re.Conn.Close()
return
}
c.server.logf("http: TLS handshake error from %s: %v", c.rwc.RemoteAddr(), err)
return
}
Я отслеживаю ErrorLog, и srv правильно реализует регистратор, но при вводе нового HTTP-запроса (а мой тестовый пример - неуспешное выполнение TLS-рукопожатия), он распечатывается на моей консоли, а не в моем файле .txt.
Вы можете мне помочь? Спасибо!.