65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package forward
|
|
|
|
import (
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
logMu sync.Mutex
|
|
appLogW io.Writer
|
|
)
|
|
|
|
func initAppLog() error {
|
|
root := resolveLogRoot("forward")
|
|
if err := os.MkdirAll(root, 0o755); err != nil {
|
|
return err
|
|
}
|
|
day := time.Now().Format("2006-01-02")
|
|
f, err := os.OpenFile(filepath.Join(root, "app-"+day+".log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
appLogW = io.MultiWriter(os.Stdout, f)
|
|
return nil
|
|
}
|
|
|
|
func resolveLogRoot(service string) string {
|
|
if v := strings.TrimSpace(os.Getenv("LOG_DIR")); v != "" {
|
|
return filepath.Join(v, service)
|
|
}
|
|
base := programDir()
|
|
return filepath.Join(base, "..", "log", service)
|
|
}
|
|
|
|
func programDir() string {
|
|
if exe, err := os.Executable(); err == nil {
|
|
dir := filepath.Dir(exe)
|
|
if strings.Contains(dir, "go-build") {
|
|
if wd, err := os.Getwd(); err == nil && wd != "" {
|
|
return wd
|
|
}
|
|
}
|
|
return dir
|
|
}
|
|
if wd, err := os.Getwd(); err == nil && wd != "" {
|
|
return wd
|
|
}
|
|
return "."
|
|
}
|
|
|
|
func appLogf(format string, args ...any) {
|
|
logMu.Lock()
|
|
w := appLogW
|
|
logMu.Unlock()
|
|
if w == nil {
|
|
w = os.Stdout
|
|
}
|
|
log.New(w, "[forward] ", log.LstdFlags).Printf(format, args...)
|
|
}
|