Compare commits

...

1 Commits

Author SHA1 Message Date
Xe Iaso
082a57a1a0 feat(logging): add option to hide log line source
This is almost certainly going to be a footgun, but it's not too
bad of a change to make. If users really do want to make getting
support more difficult, so be it.

Closes: #1537
Signed-off-by: Xe Iaso <me@xeiaso.net>
2026-03-24 15:33:23 +00:00
7 changed files with 21 additions and 11 deletions

View File

@@ -276,7 +276,7 @@ func main() {
internal.SetHealth("anubis", healthv1.HealthCheckResponse_NOT_SERVING)
lg := internal.InitSlog(*slogLevel, os.Stderr)
lg := internal.InitSlog(*slogLevel, os.Stderr, false)
lg.Info("starting up Anubis")
if *healthcheck {

View File

@@ -28,7 +28,7 @@ func main() {
flagenv.Parse()
flag.Parse()
slog.SetDefault(internal.InitSlog(*slogLevel, os.Stderr))
slog.SetDefault(internal.InitSlog(*slogLevel, os.Stderr, false))
koDockerRepo := strings.TrimSuffix(*dockerRepo, "/"+filepath.Base(*dockerRepo))
@@ -159,8 +159,8 @@ func run(command string) (string, error) {
}
func setOutput(key, val string) {
github_output := os.Getenv("GITHUB_OUTPUT")
f, _ := os.OpenFile(github_output, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
fmt.Fprintf(f, "%s=%s\n", key, val)
f.Close()
github_output := os.Getenv("GITHUB_OUTPUT")
f, _ := os.OpenFile(github_output, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
fmt.Fprintf(f, "%s=%s\n", key, val)
f.Close()
}

View File

@@ -17,8 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed mixed tab/space indentation in Caddy documentation code block
- Improve error messages and fix broken REDIRECT_DOMAINS link in docs ([#1193](https://github.com/TecharoHQ/anubis/issues/1193))
- Add Bulgarian locale ([#1394](https://github.com/TecharoHQ/anubis/pull/1394))
- Add option to hide source code origin of log lines in [logging configuration](./admin/policies.mdx#logging-management)
<!-- This changes the project to: -->
- Fix CEL internal errors when iterating `headers`/`query` map wrappers by implementing map iterators for `HTTPHeaders` and `URLValues` ([#1465](https://github.com/TecharoHQ/anubis/pull/1465)).
## v1.25.0: Necron

View File

@@ -339,6 +339,7 @@ Anubis exposes the following logging settings in the policy file:
| `level` | [log level](#log-levels) | `info` | The logging level threshold. Any logs that are at or above this threshold will be drained to the sink. Any other logs will be discarded. |
| `sink` | string | `stdio`, `file` | The sink where the logs drain to as they are being recorded in Anubis. |
| `parameters` | object | | Parameters for the given logging sink. This will vary based on the logging sink of choice. See below for more information. |
| `hideSource` | boolean | `false` | If set, hide the details of which line of code triggered a log line. Setting this to `true` may make getting support more difficult. |
Anubis supports the following logging sinks:

View File

@@ -10,7 +10,7 @@ import (
"strings"
)
func InitSlog(level string, sink io.Writer) *slog.Logger {
func InitSlog(level string, sink io.Writer, hideSource bool) *slog.Logger {
var programLevel slog.Level
if err := (&programLevel).UnmarshalText([]byte(level)); err != nil {
fmt.Fprintf(os.Stderr, "invalid log level %s: %v, using info\n", level, err)
@@ -20,10 +20,16 @@ func InitSlog(level string, sink io.Writer) *slog.Logger {
leveler := &slog.LevelVar{}
leveler.Set(programLevel)
h := slog.NewJSONHandler(sink, &slog.HandlerOptions{
opts := &slog.HandlerOptions{
AddSource: true,
Level: leveler,
})
}
if hideSource {
opts.AddSource = false
}
h := slog.NewJSONHandler(sink, opts)
result := slog.New(h)
return result
}

View File

@@ -17,6 +17,7 @@ type Logging struct {
Sink string `json:"sink"` // Logging sink, either "stdio" or "file"
Level *slog.Level `json:"level"` // Log level, if set supersedes the level in flags
Parameters *LoggingFileConfig `json:"parameters"` // Logging parameters, to be dynamic in the future
HideSource bool `json:"hideSource"` // If true, hide the `source` field in log lines
}
const (

View File

@@ -75,7 +75,7 @@ func ParseConfig(ctx context.Context, fin io.Reader, fname string, defaultDiffic
switch c.Logging.Sink {
case config.LogSinkStdio:
result.Logger = internal.InitSlog(logLevel, os.Stderr)
result.Logger = internal.InitSlog(logLevel, os.Stderr, c.Logging.HideSource)
case config.LogSinkFile:
out := &logrotate.Logger{
Filename: c.Logging.Parameters.Filename,
@@ -87,7 +87,7 @@ func ParseConfig(ctx context.Context, fin io.Reader, fname string, defaultDiffic
Compress: c.Logging.Parameters.Compress,
}
result.Logger = internal.InitSlog(logLevel, out)
result.Logger = internal.InitSlog(logLevel, out, c.Logging.HideSource)
}
lg := result.Logger.With("at", "config-validate")