Skip to content

Log Level Management — Dynamic Log Level Management in Production

DodaTech Updated 2026-06-28 1 min read

In this tutorial, you'll learn about Log Level Management. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.

Dynamic log level management allows operators to increase logging verbosity for specific services or components without deployment changes.

// Dynamic log level manager
class LogLevelManager {
  constructor(logger) {
    this.logger = logger;
    this.levels = {
      error: 0,
      warn: 1,
      info: 2,
      debug: 3,
      trace: 4
    };
    this.overrides = new Map();

    // Restore from Redis on startup
    this.restoreOverrides();
  }

  setLevel(service, component, level) {
    if (!this.levels[level]) throw new Error(`Invalid level: ${level}`);
    const key = `${service}:${component}`;
    this.overrides.set(key, level);

    // Persist override
    redis.set(`loglevel:${key}`, level, 'EX', 86400);

    return { service, component, level, expiresIn: '24h' };
  }

  getEffectiveLevel(service, component) {
    const override = this.overrides.get(`${service}:${component}`);
    if (override) return override;

    const serviceOverride = this.overrides.get(`${service}:*`);
    if (serviceOverride) return serviceOverride;

    return this.logger.level;
  }

  shouldLog(level, service, component) {
    return this.levels[level] <= this.levels[this.getEffectiveLevel(service, component)];
  }

  async restoreOverrides() {
    const keys = await redis.keys('loglevel:*');
    for (const key of keys) {
      const [_, service, component] = key.split(':');
      const level = await redis.get(key);
      this.overrides.set(`${service}:${component}`, level);
    }
  }

  getActiveOverrides() {
    return Array.from(this.overrides.entries()).map(([key, level]) => {
      const [service, component] = key.split(':');
      return { service, component, level };
    });
  }
}

// API endpoint
app.post('/admin/log-level', async (req, res) => {
  const { service, component, level } = req.body;
  const result = logManager.setLevel(service, component, level);
  res.json(result);
});

Dynamic log levels enable targeted debugging in production without restarting services or redeploying code.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro