Как перезаписать httpserver ErrorLog в golang? - PullRequest
0 голосов
/ 29 мая 2020

Мне нужно перезаписать реализацию 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.

Вы можете мне помочь? Спасибо!.

...