| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package main
- import (
- "fmt"
- "os"
- "path/filepath"
- "sync"
- "time"
- )
- // Logger 简单文件日志(windowsgui 子系统无控制台,统一落盘)。
- type Logger struct {
- mu sync.Mutex
- file *os.File
- path string
- }
- func NewLogger() *Logger {
- dir := filepath.Join(appDataDir(), "logs")
- _ = os.MkdirAll(dir, 0o755)
- p := filepath.Join(dir, "tray-"+time.Now().Format("20060102")+".log")
- f, err := os.OpenFile(p, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o644)
- if err != nil {
- f = nil
- }
- return &Logger{file: f, path: p}
- }
- func (l *Logger) Printf(format string, args ...any) {
- l.mu.Lock()
- defer l.mu.Unlock()
- line := fmt.Sprintf("[%s] %s\n", time.Now().Format("2006-01-02 15:04:05"), fmt.Sprintf(format, args...))
- if l.file != nil {
- _, _ = l.file.WriteString(line)
- }
- }
- func (l *Logger) Path() string {
- return l.path
- }
- func (l *Logger) Close() {
- l.mu.Lock()
- defer l.mu.Unlock()
- if l.file != nil {
- _ = l.file.Close()
- l.file = nil
- }
- }
|