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.
← Previous
Correlation IDs — Tracing Requests Across Microservices with Correlation IDs
Next →
Audit Logging — Implementing Immutable Audit Trails
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro