Skip to content

Commit ac04754

Browse files
Yerazeclaude
andauthored
chore(logging): trim default log volume — reclassify routine info→debug, add trace tier (#3994)
* chore(logging): trim default log volume — reclassify routine info→debug, add trace tier Container logs were unusable for support because ~1,450 server-side logger.info calls print at the production default level. Almost all of the high-frequency ones — per-packet, per-request, per-message, and periodic scheduler activity, plus the ~60-line environment dump on every boot — are routine and belong at debug. Changes: - logger.ts: add a `trace` level below `debug` for true per-packet firehose; document the tier semantics (info = sparse, support-relevant events only). - environment.ts: accept `trace` for LOG_LEVEL; collapse the boot env dump to a compact ~16-line info summary (details → debug). - Reclassify server logger.info calls: non-migration info 1452 → 865 (~590 demoted to debug, 11 to trace). Hot paths collapsed: meshtasticManager 258→18, meshcoreManager 61→19, server.ts 49→20. - Redact MeshCore message bodies from logs (contact/channel/room/DM/auto-ack text → `(N chars)`); keep sender/channel metadata. - Docs + docker-compose.yml + CHANGELOG updated; new trace-level test coverage. An idle container is now near-silent at the default `info` level. Raise with LOG_LEVEL=debug (or trace) — no NODE_ENV change needed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015AFBA76hsjqhsXe1BdnYub * address review: document trace unknown[] rationale + module-load level eval, cover trace in sanitization test Addresses non-blocking notes from claude-review on #3994: - logger.ts: comment why trace uses unknown[] (lint baseline) and why currentLevel is import-time only (tests need vi.resetModules()). - logger.test.ts: exercise logger.trace through the CWE-117 sanitization path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015AFBA76hsjqhsXe1BdnYub --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 33226ec commit ac04754

54 files changed

Lines changed: 669 additions & 606 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
77
## [Unreleased]
88

99
### Changed
10+
- **Container logs are far quieter at the default level.** Routine per-packet, per-request, and periodic-scheduler activity — plus the ~60-line environment dump printed on every boot — was logged at `info`, which is the production default, making Docker logs hard to use for support. That activity is now logged at `debug`; `info` is reserved for genuinely important, low-frequency events (startup/shutdown, source connect/disconnect, backups/restores/migrations, and deliberate actions taken), so an idle container is near-silent. A new `trace` level captures the full per-packet firehose. Raise verbosity for troubleshooting with `LOG_LEVEL=debug` (or `trace`) — no `NODE_ENV` change needed. As a side benefit, MeshCore message **bodies** are no longer written to logs (only sender/channel metadata and a length).
1011
- **BREAKING (deployments behind a reverse proxy): `TRUST_PROXY` now defaults to `false`.** Previously, production builds trusted the first proxy hop when `TRUST_PROXY` was unset, which let a direct-connected client spoof `X-Forwarded-For` to bypass the auth brute-force limiter and poison audit attribution. Proxied deployments must now set `TRUST_PROXY` explicitly (`TRUST_PROXY=1` for a single proxy). Direct (non-proxied) deployments need no change.
1112

1213
## [4.12.5] - 2026-07-06

docker-compose.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ services:
2727
- TZ=America/New_York
2828
- ALLOWED_ORIGINS=http://localhost:8080 # Required for CORS
2929

30+
# Log verbosity: trace | debug | info | warn | error
31+
# Defaults to `info` in production / `debug` in development. `info` is
32+
# deliberately quiet (startup + connect/disconnect + errors). Raise to
33+
# `debug` (or `trace` for the per-packet firehose) when troubleshooting.
34+
# - LOG_LEVEL=debug
35+
3036
# OPTIONAL: Uncomment and configure for production deployments
3137
# See docs/configuration/production.md for full production setup guide
3238

docs/configuration/index.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ See the [Push Notifications guide](/features/notifications) for setup instructio
190190

191191
| Variable | Description | Default |
192192
|----------|-------------|---------|
193-
| `LOG_LEVEL` | Log verbosity: `debug`, `info`, `warn`, `error` | `debug` in development, `info` in production |
193+
| `LOG_LEVEL` | Log verbosity: `trace`, `debug`, `info`, `warn`, `error` | `debug` in development, `info` in production |
194194

195195
**Note**: `LOG_LEVEL` controls log output independently of `NODE_ENV`. This lets you enable debug logging in production Docker deployments without changing rate limits, cookie warnings, or other `NODE_ENV`-dependent behavior.
196196

@@ -320,12 +320,14 @@ MeshMonitor logs to stdout/stderr by default. Log output uses level prefixes: `[
320320

321321
### Log Levels
322322

323-
Control verbosity with the `LOG_LEVEL` environment variable:
323+
Control verbosity with the `LOG_LEVEL` environment variable. Levels are
324+
cumulative — each includes everything above it in this table:
324325

325326
| Level | What is logged |
326327
|-------|---------------|
327-
| `debug` | Everything — verbose diagnostics, state changes, data inspection |
328-
| `info` | Informational messages, warnings, and errors |
328+
| `trace` | Firehose — per-packet / per-loop diagnostics. Only enable for a short capture window; far too noisy for steady use. |
329+
| `debug` | Verbose but bounded — routine per-event activity, periodic scheduler cycles, connection handshake steps, state inspection. |
330+
| `info` | **Default in production.** Important, low-frequency events: startup/shutdown, source connect/disconnect, backups/restores/migrations, and deliberate actions taken. An idle container is near-silent at this level. |
329331
| `warn` | Warnings and errors only |
330332
| `error` | Errors only |
331333

@@ -334,11 +336,14 @@ If `LOG_LEVEL` is not set, the default depends on `NODE_ENV`:
334336
- `production` → `info`
335337

336338
::: tip Troubleshooting in Production
337-
Set `LOG_LEVEL=debug` to get verbose logging without changing `NODE_ENV`. This avoids side effects like altered rate limits or cookie warnings:
339+
The default `info` level is deliberately quiet — routine per-packet, per-request,
340+
and periodic-scheduler activity is logged at `debug`. To investigate an issue,
341+
raise the level without changing `NODE_ENV` (this avoids side effects like
342+
altered rate limits or cookie warnings):
338343
```yaml
339344
environment:
340345
- NODE_ENV=production
341-
- LOG_LEVEL=debug
346+
- LOG_LEVEL=debug # or `trace` for the full per-packet firehose
342347
```
343348
:::
344349

src/server/auth/authMiddleware.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export function optionalAuth() {
4545
if (!user) {
4646
// Auto-provision if enabled
4747
if (config.proxyAuthAutoProvision) {
48-
logger.info(`🔐 Auto-provisioning proxy user: ${proxyUser.email}`);
48+
logger.debug(`🔐 Auto-provisioning proxy user: ${proxyUser.email}`);
4949

5050
const isAdmin = isAdminUser(proxyUser.email, proxyUser.groups);
5151
const username = proxyUser.email.split('@')[0]; // Use email prefix as username
@@ -105,7 +105,7 @@ export function optionalAuth() {
105105

106106
// Check if we need to migrate local user to proxy
107107
if (user && user.authProvider === 'local') {
108-
logger.info(`🔄 Migrating local user '${user.username}' to proxy auth`);
108+
logger.debug(`🔄 Migrating local user '${user.username}' to proxy auth`);
109109

110110
const isAdmin = isAdminUser(proxyUser.email, proxyUser.groups);
111111

@@ -143,7 +143,7 @@ export function optionalAuth() {
143143
const currentIsAdmin = isAdminUser(proxyUser.email, proxyUser.groups);
144144

145145
if (currentIsAdmin !== user.isAdmin) {
146-
logger.info(`🔄 Updating admin status for ${user.username}: ${user.isAdmin}${currentIsAdmin}`);
146+
logger.debug(`🔄 Updating admin status for ${user.username}: ${user.isAdmin}${currentIsAdmin}`);
147147

148148
await databaseService.auth.updateUser(user.id, {
149149
isAdmin: currentIsAdmin,

src/server/config/environment.ts

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ export interface EnvironmentConfig {
309309
accessLogFormatProvided: boolean;
310310

311311
// Logging
312-
logLevel: 'debug' | 'info' | 'warn' | 'error';
312+
logLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error';
313313
logLevelProvided: boolean;
314314

315315
// Branding (login page customization)
@@ -696,8 +696,8 @@ export function loadEnvironmentConfig(): EnvironmentConfig {
696696
const accessLogFormat = parseEnum('ACCESS_LOG_FORMAT', process.env.ACCESS_LOG_FORMAT, ['combined', 'common', 'tiny'] as const, 'combined');
697697

698698
// Logging
699-
const logLevelDefault: 'debug' | 'info' | 'warn' | 'error' = nodeEnv.value === 'development' ? 'debug' : 'info';
700-
const logLevel = parseEnum('LOG_LEVEL', process.env.LOG_LEVEL?.toLowerCase(), ['debug', 'info', 'warn', 'error'] as const, logLevelDefault);
699+
const logLevelDefault: 'trace' | 'debug' | 'info' | 'warn' | 'error' = nodeEnv.value === 'development' ? 'debug' : 'info';
700+
const logLevel = parseEnum('LOG_LEVEL', process.env.LOG_LEVEL?.toLowerCase(), ['trace', 'debug', 'info', 'warn', 'error'] as const, logLevelDefault);
701701

702702
// Branding (login page customization)
703703
// CUSTOM_TITLE overrides the "MeshMonitor" heading on the login page.
@@ -736,79 +736,79 @@ export function loadEnvironmentConfig(): EnvironmentConfig {
736736
logger.info(` BASE_URL: ${baseUrl || '/'} (${src(baseUrlProvided)})`);
737737
logger.info(` LOG_LEVEL: ${logLevel.value} (${src(logLevel.wasProvided)})`);
738738
logger.info(` TZ: ${timezone.value} (${src(timezone.wasProvided)})`);
739-
logger.info(` ALLOWED_ORIGINS: ${allowedOrigins.value || '*'} (${src(allowedOrigins.wasProvided)})`);
740-
logger.info(` IFRAME_ALLOWED_ORIGINS: ${iframeAllowedOrigins.value.length > 0 ? iframeAllowedOrigins.value.join(',') : '(not set - iframe embedding blocked)'} (${src(iframeAllowedOrigins.wasProvided)})`);
741-
logger.info(` TRUST_PROXY: ${trustProxy.value} (${src(trustProxy.wasProvided)})`);
739+
logger.debug(` ALLOWED_ORIGINS: ${allowedOrigins.value || '*'} (${src(allowedOrigins.wasProvided)})`);
740+
logger.debug(` IFRAME_ALLOWED_ORIGINS: ${iframeAllowedOrigins.value.length > 0 ? iframeAllowedOrigins.value.join(',') : '(not set - iframe embedding blocked)'} (${src(iframeAllowedOrigins.wasProvided)})`);
741+
logger.debug(` TRUST_PROXY: ${trustProxy.value} (${src(trustProxy.wasProvided)})`);
742742
logger.info(` VERSION_CHECK_DISABLED: ${versionCheckDisabled}`);
743-
logger.info(' --- Session/Security ---');
744-
logger.info(` SESSION_SECRET: ${sessionSecretProvided ? '***provided***' : '(auto-generated)'}`);
745-
logger.info(` SESSION_COOKIE_NAME: ${sessionCookieName.value} (${src(sessionCookieName.wasProvided)})`);
746-
logger.info(` SESSION_MAX_AGE: ${sessionMaxAge.value}ms (${src(sessionMaxAge.wasProvided)})`);
747-
logger.info(` SESSION_ROLLING: ${sessionRolling.value} (${src(sessionRolling.wasProvided)})`);
748-
logger.info(` COOKIE_SECURE: ${cookieSecure.value} (${src(cookieSecure.wasProvided)})`);
749-
logger.info(` COOKIE_SAMESITE: ${cookieSameSite.value} (${src(cookieSameSite.wasProvided)})`);
750-
logger.info(' --- Database ---');
743+
logger.debug(' --- Session/Security ---');
744+
logger.debug(` SESSION_SECRET: ${sessionSecretProvided ? '***provided***' : '(auto-generated)'}`);
745+
logger.debug(` SESSION_COOKIE_NAME: ${sessionCookieName.value} (${src(sessionCookieName.wasProvided)})`);
746+
logger.debug(` SESSION_MAX_AGE: ${sessionMaxAge.value}ms (${src(sessionMaxAge.wasProvided)})`);
747+
logger.debug(` SESSION_ROLLING: ${sessionRolling.value} (${src(sessionRolling.wasProvided)})`);
748+
logger.debug(` COOKIE_SECURE: ${cookieSecure.value} (${src(cookieSecure.wasProvided)})`);
749+
logger.debug(` COOKIE_SAMESITE: ${cookieSameSite.value} (${src(cookieSameSite.wasProvided)})`);
750+
logger.debug(' --- Database ---');
751751
logger.info(` DATABASE_TYPE: ${databaseType}`);
752752
if (databaseUrl.wasProvided) {
753753
logger.info(` DATABASE_URL: ***provided*** (${databaseType})`);
754754
} else {
755755
logger.info(` DATABASE_PATH: ${databasePath.value} (${src(databasePath.wasProvided)})`);
756756
}
757-
logger.info(` TRACEROUTE_HISTORY_LIMIT: ${tracerouteHistoryLimit.value} (${src(tracerouteHistoryLimit.wasProvided)})`);
758-
logger.info(' --- Meshtastic ---');
757+
logger.debug(` TRACEROUTE_HISTORY_LIMIT: ${tracerouteHistoryLimit.value} (${src(tracerouteHistoryLimit.wasProvided)})`);
758+
logger.debug(' --- Meshtastic ---');
759759
logger.info(` MESHTASTIC_NODE_IP: ${meshtasticNodeIp.value} (${src(meshtasticNodeIp.wasProvided)})`);
760760
logger.info(` MESHTASTIC_NODE_PORT / MESHTASTIC_TCP_PORT: ${meshtasticTcpPort.value} (${src(meshtasticTcpPort.wasProvided)})`);
761-
logger.info(` MESHTASTIC_STALE_CONNECTION_TIMEOUT: ${meshtasticStaleConnectionTimeout.value}ms (${src(meshtasticStaleConnectionTimeout.wasProvided)})`);
762-
logger.info(` MESHTASTIC_CONNECT_TIMEOUT_MS: ${meshtasticConnectTimeoutMs.value}ms (${src(meshtasticConnectTimeoutMs.wasProvided)})`);
763-
logger.info(` MESHTASTIC_RECONNECT_INITIAL_DELAY_MS: ${meshtasticReconnectInitialDelayMs.value}ms (${src(meshtasticReconnectInitialDelayMs.wasProvided)})`);
764-
logger.info(` MESHTASTIC_RECONNECT_MAX_DELAY_MS: ${meshtasticReconnectMaxDelayMs.value}ms (${src(meshtasticReconnectMaxDelayMs.wasProvided)})`);
765-
logger.info(` MESHTASTIC_MODULE_CONFIG_DELAY_MS: ${meshtasticModuleConfigDelayMs.value}ms (${src(meshtasticModuleConfigDelayMs.wasProvided)})`);
761+
logger.debug(` MESHTASTIC_STALE_CONNECTION_TIMEOUT: ${meshtasticStaleConnectionTimeout.value}ms (${src(meshtasticStaleConnectionTimeout.wasProvided)})`);
762+
logger.debug(` MESHTASTIC_CONNECT_TIMEOUT_MS: ${meshtasticConnectTimeoutMs.value}ms (${src(meshtasticConnectTimeoutMs.wasProvided)})`);
763+
logger.debug(` MESHTASTIC_RECONNECT_INITIAL_DELAY_MS: ${meshtasticReconnectInitialDelayMs.value}ms (${src(meshtasticReconnectInitialDelayMs.wasProvided)})`);
764+
logger.debug(` MESHTASTIC_RECONNECT_MAX_DELAY_MS: ${meshtasticReconnectMaxDelayMs.value}ms (${src(meshtasticReconnectMaxDelayMs.wasProvided)})`);
765+
logger.debug(` MESHTASTIC_MODULE_CONFIG_DELAY_MS: ${meshtasticModuleConfigDelayMs.value}ms (${src(meshtasticModuleConfigDelayMs.wasProvided)})`);
766766
if (oidcEnabled) {
767-
logger.info(' --- OIDC ---');
768-
logger.info(` OIDC_ISSUER: ${oidcIssuer.value ? '***provided***' : 'not set'}`);
769-
logger.info(` OIDC_CLIENT_ID: ${oidcClientId.value ? '***provided***' : 'not set'}`);
770-
logger.info(` OIDC_AUTO_CREATE_USERS: ${oidcAutoCreateUsers.value} (${src(oidcAutoCreateUsers.wasProvided)})`);
771-
logger.info(` OIDC_GROUPS_CLAIM: ${oidcGroupsClaim.value} (${src(oidcGroupsClaim.wasProvided)})`);
772-
logger.info(` OIDC_ADMIN_GROUPS: ${oidcAdminGroups.length > 0 ? oidcAdminGroups.join(', ') : 'not set (group→admin mapping disabled; first-login bootstrap applies)'}`);
773-
logger.info(` OIDC_ALLOWED_GROUPS: ${oidcAllowedGroups.length > 0 ? oidcAllowedGroups.join(', ') : 'not set (all OIDC users allowed)'}`);
774-
}
775-
logger.info(' --- Authentication ---');
776-
logger.info(` DISABLE_ANONYMOUS: ${disableAnonymous.value} (${src(disableAnonymous.wasProvided)})`);
777-
logger.info(` DISABLE_LOCAL_AUTH: ${disableLocalAuth.value} (${src(disableLocalAuth.wasProvided)})`);
767+
logger.debug(' --- OIDC ---');
768+
logger.debug(` OIDC_ISSUER: ${oidcIssuer.value ? '***provided***' : 'not set'}`);
769+
logger.debug(` OIDC_CLIENT_ID: ${oidcClientId.value ? '***provided***' : 'not set'}`);
770+
logger.debug(` OIDC_AUTO_CREATE_USERS: ${oidcAutoCreateUsers.value} (${src(oidcAutoCreateUsers.wasProvided)})`);
771+
logger.debug(` OIDC_GROUPS_CLAIM: ${oidcGroupsClaim.value} (${src(oidcGroupsClaim.wasProvided)})`);
772+
logger.debug(` OIDC_ADMIN_GROUPS: ${oidcAdminGroups.length > 0 ? oidcAdminGroups.join(', ') : 'not set (group→admin mapping disabled; first-login bootstrap applies)'}`);
773+
logger.debug(` OIDC_ALLOWED_GROUPS: ${oidcAllowedGroups.length > 0 ? oidcAllowedGroups.join(', ') : 'not set (all OIDC users allowed)'}`);
774+
}
775+
logger.debug(' --- Authentication ---');
776+
logger.debug(` DISABLE_ANONYMOUS: ${disableAnonymous.value} (${src(disableAnonymous.wasProvided)})`);
777+
logger.debug(` DISABLE_LOCAL_AUTH: ${disableLocalAuth.value} (${src(disableLocalAuth.wasProvided)})`);
778778
if (adminUsername.wasProvided) {
779-
logger.info(` ADMIN_USERNAME: ${adminUsername.value} (env)`);
779+
logger.debug(` ADMIN_USERNAME: ${adminUsername.value} (env)`);
780780
}
781781
if (proxyAuthEnabled.value) {
782-
logger.info(' --- Proxy Authentication ---');
783-
logger.info(` PROXY_AUTH_ENABLED: ${proxyAuthEnabled.value}`);
784-
logger.info(` PROXY_AUTH_AUTO_PROVISION: ${proxyAuthAutoProvision.value}`);
785-
logger.info(` PROXY_AUTH_ADMIN_GROUPS: ${proxyAuthAdminGroups.length > 0 ? proxyAuthAdminGroups.join(', ') : 'not set'}`);
786-
logger.info(` PROXY_AUTH_ADMIN_EMAILS: ${proxyAuthAdminEmails.length > 0 ? '***configured***' : 'not set'}`);
787-
logger.info(` PROXY_AUTH_NORMAL_USER_GROUPS: ${proxyAuthNormalUserGroups.length > 0 ? proxyAuthNormalUserGroups.join(', ') : 'not set (all proxy users allowed)'}`);
788-
logger.info(` PROXY_AUTH_JWT_GROUPS_CLAIM: ${proxyAuthJwtGroupsClaim}`);
789-
logger.info(` PROXY_AUTH_AUDIT_LOGGING: ${proxyAuthAuditLogging.value}`);
782+
logger.debug(' --- Proxy Authentication ---');
783+
logger.debug(` PROXY_AUTH_ENABLED: ${proxyAuthEnabled.value}`);
784+
logger.debug(` PROXY_AUTH_AUTO_PROVISION: ${proxyAuthAutoProvision.value}`);
785+
logger.debug(` PROXY_AUTH_ADMIN_GROUPS: ${proxyAuthAdminGroups.length > 0 ? proxyAuthAdminGroups.join(', ') : 'not set'}`);
786+
logger.debug(` PROXY_AUTH_ADMIN_EMAILS: ${proxyAuthAdminEmails.length > 0 ? '***configured***' : 'not set'}`);
787+
logger.debug(` PROXY_AUTH_NORMAL_USER_GROUPS: ${proxyAuthNormalUserGroups.length > 0 ? proxyAuthNormalUserGroups.join(', ') : 'not set (all proxy users allowed)'}`);
788+
logger.debug(` PROXY_AUTH_JWT_GROUPS_CLAIM: ${proxyAuthJwtGroupsClaim}`);
789+
logger.debug(` PROXY_AUTH_AUDIT_LOGGING: ${proxyAuthAuditLogging.value}`);
790790
if (proxyAuthLogoutUrl) {
791-
logger.info(` PROXY_AUTH_LOGOUT_URL: ${proxyAuthLogoutUrl}`);
791+
logger.debug(` PROXY_AUTH_LOGOUT_URL: ${proxyAuthLogoutUrl}`);
792792
}
793793
}
794-
logger.info(' --- Rate Limiting ---');
795-
logger.info(` RATE_LIMIT_API: ${rateLimitApi.value} req/min (${src(rateLimitApi.wasProvided)})`);
796-
logger.info(` RATE_LIMIT_AUTH: ${rateLimitAuth.value} req/min (${src(rateLimitAuth.wasProvided)})`);
797-
logger.info(` RATE_LIMIT_MESSAGES: ${rateLimitMessages.value} req/min (${src(rateLimitMessages.wasProvided)})`);
794+
logger.debug(' --- Rate Limiting ---');
795+
logger.debug(` RATE_LIMIT_API: ${rateLimitApi.value} req/min (${src(rateLimitApi.wasProvided)})`);
796+
logger.debug(` RATE_LIMIT_AUTH: ${rateLimitAuth.value} req/min (${src(rateLimitAuth.wasProvided)})`);
797+
logger.debug(` RATE_LIMIT_MESSAGES: ${rateLimitMessages.value} req/min (${src(rateLimitMessages.wasProvided)})`);
798798
if (vapidPublicKey.wasProvided) {
799-
logger.info(' --- Push Notifications ---');
800-
logger.info(` VAPID keys: ***provided***`);
801-
logger.info(` PUSH_NOTIFICATION_TTL: ${pushNotificationTtl.value}s (${src(pushNotificationTtl.wasProvided)})`);
799+
logger.debug(' --- Push Notifications ---');
800+
logger.debug(` VAPID keys: ***provided***`);
801+
logger.debug(` PUSH_NOTIFICATION_TTL: ${pushNotificationTtl.value}s (${src(pushNotificationTtl.wasProvided)})`);
802802
}
803803
if (accessLogEnabled.value) {
804-
logger.info(' --- Access Logging ---');
805-
logger.info(` ACCESS_LOG_PATH: ${accessLogPath.value} (${src(accessLogPath.wasProvided)})`);
806-
logger.info(` ACCESS_LOG_FORMAT: ${accessLogFormat.value} (${src(accessLogFormat.wasProvided)})`);
804+
logger.debug(' --- Access Logging ---');
805+
logger.debug(` ACCESS_LOG_PATH: ${accessLogPath.value} (${src(accessLogPath.wasProvided)})`);
806+
logger.debug(` ACCESS_LOG_FORMAT: ${accessLogFormat.value} (${src(accessLogFormat.wasProvided)})`);
807807
}
808808
if (customTitle.wasProvided || customLogoUrl.wasProvided) {
809-
logger.info(' --- Branding ---');
810-
if (customTitle.wasProvided) logger.info(` CUSTOM_TITLE: ${customTitle.value}`);
811-
if (customLogoUrl.wasProvided) logger.info(` CUSTOM_LOGO_URL: ${customLogoUrl.value}`);
809+
logger.debug(' --- Branding ---');
810+
if (customTitle.wasProvided) logger.debug(` CUSTOM_TITLE: ${customTitle.value}`);
811+
if (customLogoUrl.wasProvided) logger.debug(` CUSTOM_LOGO_URL: ${customLogoUrl.value}`);
812812
}
813813

814814
return {

0 commit comments

Comments
 (0)