Skip to content

Commit d1f283e

Browse files
committed
fix: write log file to ~/.tero instead of /tmp
- Move log file from /tmp/tero.log to ~/.tero/environments/{env}/tero.log to avoid permission errors when multiple users share /tmp - Gracefully fall back to no-op logger instead of panicking on file errors - Truncate log file at session start if it exceeds 5MB - Update doc references in CLAUDE.md, AGENTS.md, Taskfile.yml, .envrc
1 parent 23a9e68 commit d1f283e

5 files changed

Lines changed: 37 additions & 8 deletions

File tree

‎.envrc‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export WORKOS_CLIENT_ID="client_01JQCC2CJMTB8AY2JRMZXFY9R1"
2626
# Set to "true" to automatically transition from onboarding complete screen to app
2727
export TERO_SKIP_TO_APP="true"
2828

29-
# Development: Enable debug logging (logs written to /tmp/tero.log)
29+
# Development: Enable debug logging (logs written to ~/.tero/environments/{env}/tero.log)
3030
export TERO_DEBUG="true"
3131

3232
# Load local overrides if they exist

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ internal/auth/ Authentication.
5353
```bash
5454
task do # Format, lint, test - run before commits
5555
task run # Fast iteration
56-
tail -f /tmp/tero.log # Watch logs
56+
tail -f ~/.tero/environments/prd/tero.log # Watch logs
5757
```

‎Taskfile.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ tasks:
217217
desc: Reset dev environment (auth, config, database, logs)
218218
cmds:
219219
- go run ./cmd/tero reset --db
220-
- rm -f /tmp/tero.log
220+
- rm -f ~/.tero/environments/*/tero.log
221221
- echo "Reset complete"
222222

223223
# ===========================================================================

‎internal/cmd/execute.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func Execute(version string) {
1919
level = log.LevelDebug
2020
}
2121

22-
scope := log.RootScope(log.New(level))
22+
scope := log.RootScope(log.New(cliConfig.Environment(), level))
2323

2424
defer func() {
2525
if r := recover(); r != nil {

‎internal/log/logger.go‎

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package log
22

33
import (
4+
"io"
45
"log/slog"
56
"os"
7+
"path/filepath"
68
)
79

810
// Re-export slog attribute constructors so callers don't need to import log/slog
@@ -53,12 +55,39 @@ func Wrap(l *slog.Logger) Logger {
5355
return &logger{l}
5456
}
5557

56-
// New creates a new logger that writes to /tmp/tero.log
58+
// LogPath returns the log file path for the given environment.
59+
func LogPath(env string) (string, error) {
60+
homeDir, err := os.UserHomeDir()
61+
if err != nil {
62+
return "", err
63+
}
64+
return filepath.Join(homeDir, ".tero", "environments", env, "tero.log"), nil
65+
}
66+
67+
const maxLogSize = 5 * 1024 * 1024 // 5MB
68+
69+
// New creates a new logger that writes to ~/.tero/environments/{env}/tero.log.
5770
// Appends to existing log file, with a clear session separator.
58-
func New(level Level) Logger {
59-
logFile, err := os.OpenFile("/tmp/tero.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
71+
// Truncates the file at session start if it exceeds 5MB.
72+
// Falls back to a no-op logger if the log file cannot be opened.
73+
func New(env string, level Level) Logger {
74+
logPath, err := LogPath(env)
75+
if err != nil {
76+
return &logger{slog.New(slog.NewTextHandler(io.Discard, nil))}
77+
}
78+
79+
if err := os.MkdirAll(filepath.Dir(logPath), 0o755); err != nil {
80+
return &logger{slog.New(slog.NewTextHandler(io.Discard, nil))}
81+
}
82+
83+
// Truncate if over size limit before opening for append.
84+
if info, err := os.Stat(logPath); err == nil && info.Size() > maxLogSize {
85+
_ = os.Truncate(logPath, 0)
86+
}
87+
88+
logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644)
6089
if err != nil {
61-
panic(err)
90+
return &logger{slog.New(slog.NewTextHandler(io.Discard, nil))}
6291
}
6392

6493
// Write session separator (ignore errors - best effort logging)

0 commit comments

Comments
 (0)