Go Logging не появляется - PullRequest
       23

Go Logging не появляется

0 голосов
/ 07 апреля 2019

Я хочу создать Dependency Injection для системы регистрации в golang, но когда я делаю log.Info.Println, она ничего не печатает в файл журнала.Вот мой код:

app.go

package main

import (
    log "github.com/jass-trix/BVDI/backend/application/logging"
)

func main() {
    logger := log.InitLog()
    logger.Info.Println("test info")
    logger.Error.Println("test error")
}

init.go

package logging

import (
    "flag"
    "io"
    "log"
    "os"
)

const logPath = "log/path/"

//Logger is a struct that contain all type of logger
//logger will be separated into two level
type Logger struct {
    Info  *log.Logger
    Error *log.Logger
}

var infoLog *log.Logger
var errorLog *log.Logger

//InitLog is a function to instantiate logging
func InitLog() *Logger {

    flag.Parse()

    fileInfo, err := os.OpenFile(logPath+"file.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
    if err != nil {
        log.Fatalf("error on opening file: %v", err)
    }
    defer fileInfo.Close()

    multiInfo := io.MultiWriter(fileInfo, os.Stdout)
    infoLog := log.New(multiInfo, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)

    fileError, err := os.OpenFile(logPath+"file.error.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
    if err != nil {
        log.Fatalf("error on opening file: %v", err)
    }
    defer fileError.Close()

    multiError := io.MultiWriter(fileError, os.Stdout)
    errorLog := log.New(multiError, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
    return &Logger{
        Info:  infoLog,
        Error: errorLog,
    }
}

Когда я вызываю logger.Info.Println() в app.go, он ничего не печатает, но когда я вызываю errorLog.Println() в init.go, он печатает в файл.

Поддерживает ли ведение журнала инъекцию зависимости?

1 Ответ

1 голос
/ 08 апреля 2019

В InitLog вы использовали

отсрочка fileInfo.Close ()

Закрыл файл после вызова InitLog.Затем logger.Info.Println("test info") пытается выполнить запись в закрытый файл.

Если вы (действительно) хотите использовать глобальный регистратор, вам не следует закрывать файл в функции InitLog.

...