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()
, если это не сработает.