Golang — регистрация паники в нескольких регистраторах и файлах

поэтому у меня есть приложение go, которое имеет 3 разных файла вывода журнала, и каждый файл имеет свой собственный регистратор. когда приложение паникует, трассировка паники всегда будет записываться в последнее открытое средство ведения журнала, даже если источник паники не связан с доменом этого конкретного файла журнала.

это происходит потому, что для записи паники я перенаправляю вывод stderr в регистратор, а последний регистратор, на который нужно перенаправить, — это тот, который будет использоваться.

    fh, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0777)
    err = syscall.Dup2(int(fh.Fd()), int(os.Stderr.Fd()))
    if err != nil {
        fmt.Errorf("failed to redirect stderr to file: %v", err)
    }

есть ли способ, чтобы паника всегда записывалась в определенный файл? или как-то перенаправить его на все файлы?

Спасибо


person Nitzanu    schedule 24.08.2020    source источник
comment
Отвечает ли это на ваш вопрос? Захват panic() в golang   -  person Nellie Danielyan    schedule 24.08.2020
comment
@NellieDanielyan Я так не думаю, так как восстановление не поможет при панике из-за другой процедуры. и все мои компоненты используют другой регистратор и не знают о других регистраторах   -  person Nitzanu    schedule 24.08.2020
comment
Вы, вероятно, можете оправиться от паники в его горутине и передать сообщение по каналу нужному компоненту логгера.   -  person Nellie Danielyan    schedule 25.08.2020
comment
@NellieDanielyan, я не думаю, что это будет работать в крупномасштабной системе, поскольку подпрограммы go постоянно открываются и закрываются, поэтому 1. я бы не хотел, чтобы ВСЕ мои структуры и методы удерживали канал и имели отложенное восстановление() в их. 2. это не очень элегантно   -  person Nitzanu    schedule 25.08.2020