Задать вопрос
@babderos

Как в Go логировать ошибку (Panic И др) при которой падает сервер?

Всем привет.
Если запускаю goпрограмму из командной строки - в случае какой-то ошибки - вижу результат типа
panic: runtime error: invalid memory address or nil pointer


При запуске ./main > log.txt - эти данные вместо лога попадают в консоль, откуда запустил.
При запуске с помощью Supervisor эти данные тоже не выводятся в лог.

Как мне потом узнать из-за чего упал сервер, как логировать эти ошибки?
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Ещё можно запускать так:
./main 2>&1 > log.txt
тогда и stderr и stdout будут литься в log.txt
Если они нужны отдельно, тогда так:
./main 2>errors.txt >log.txt
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@babderos Автор вопроса
Нашел решение

Для unix систем создается функция
func redirectStderr(f *os.File) {
    err := syscall.Dup2(int(f.Fd()), int(os.Stderr.Fd()))
    if err != nil {
        log.Fatalf("Failed to redirect stderr to file: %v", err)
    }
}


И потом в main() запускаю перенаправление вывода ошибок в файл или Stdout
redirectStderr(os.Stdout)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы