Как записать логи из отдельного пакета в отдельный файл - PullRequest
0 голосов
/ 16 мая 2018

Здесь у меня есть приложение, в котором есть несколько пакетов, и я не хочу записывать логи в один файл.Скажем, например:

   src/packageA/snmp.go
   src/packageA/http.go

Я хочу записать журналы с snmp.go на /var/log/snmp.log и http.go на /var/log/http.log

Джеймс

Ответы [ 2 ]

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

Если вы используете logrus, это может быть полезно https://github.com/rifflock/lfshook

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

runtime.Caller(0) должны получить эту информацию. Например:

package main

import (
    "fmt"
    "runtime"
    "path"
    "path/filepath"
)

func main() {
    _, filename, _, ok := runtime.Caller(0)
    if !ok {
        panic("No caller!")
    }
    fmt.Printf("Calling file: %s\n", path.Base(filename))

    // Without extension
    fname := fmt.Sprintf("%s.log", path.Base(filename[0:len(filename)-len(filepath.Ext(filename))]))
    fmt.Printf("Desired log file name: %s\n", fname)

    // you can now use fname to form desired log path
    logPath := path.Join("/var/log", fname)
    fmt.Printf("Desired log path: %s\n", logPath)
}

Этот пример выведет:

Calling file: main.go
Desired log file name: main.log
Desired log path: /var/log/main.log

Это всего лишь пример. Попробуйте поэкспериментировать с другим целочисленным параметром, отличным от runtime.Caller(), если это не сработает.

...