Почему не удается войти в файл с пользовательским log.Logger? - PullRequest
0 голосов
/ 18 мая 2018

Я не могу заставить свою программу записать в файл журнала функцию вне функции main () Я видел https://stackoverflow.com/a/19966217/4374801, который похож, но не решает мою точную проблему.
Вот важные моменты того, что я делаю:

var (
    Info    *log.Logger
    Error   *log.Logger
)

func init() {  
    // set up log file                                                                                                       
    fileHandle, err := os.OpenFile("/var/log/checkcert", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)                          
    if err != nil {                                                                                                          
        log.Fatal(err)                                                                                                       
    }                                                                                                                        
    //defer to close when you're done with it                                                                                
    defer fileHandle.Close()                                                                                                 

    //set output of logs to fileHandle                                                                                       
    log.SetOutput(fileHandle)                                                                                                

    Info = log.New(fileHandle,                                                                                               
        "Log: ",                                                                                                             
        log.Ldate|log.Ltime|log.Lshortfile)                                                                                  

    Error = log.New(fileHandle,                                                                                              
        "Error: ",                                                                                                           
        log.Ldate|log.Ltime|log.Lshortfile)                                                                                  
} 

// The function below is called from main()
// The version here is truncated to the pertinent bit
func checkDomain(){
    Info.Println("test inside checkDomain")
}

Приведенное выше создает файл журнала, но не записывает в него тест. Если я положу тест Println в init (), это работает.

1 Ответ

0 голосов
/ 18 мая 2018

Отсрочка будет выполнена в конце функции, то есть ваш файл будет закрыт в конце функции init, прежде чем вы запустите main.Вы не должны закрывать ваш файл до конца main, поэтому, возможно, рассмотрите возможность перемещения инициализации ваших регистраторов и файла в начало main вместо init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...