Skip to content

Commit

Permalink
Handle subtle issue with un-persisted levels
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr0grog committed Jan 5, 2024
1 parent 377ce74 commit 014e373
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 25 deletions.
55 changes: 30 additions & 25 deletions lib/loglevel.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,18 @@
} catch (ignore) {}
}

function normalizeLevel(input) {
var level = input;
if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
level = self.levels[level.toUpperCase()];
}
if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
return level;
} else {
throw new TypeError("log.setLevel() called with invalid level: " + input);
}
}

/*
*
* Public logger API - see https://github.com/pimterry/loglevel for details
Expand All @@ -207,34 +219,29 @@
self.methodFactory = factory || defaultMethodFactory;

self.getLevel = function () {
return currentLevel;
return currentLevel == null ? defaultLevel : currentLevel;
};

self.setLevel = function (level, persist) {
if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
level = self.levels[level.toUpperCase()];
}
if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
currentLevel = level;
if (persist !== false) { // defaults to true
persistLevelIfPossible(level);
}
return self.rebuild();
} else {
throw "log.setLevel() called with invalid level: " + level;
level = normalizeLevel(level);
currentLevel = level;
if (persist !== false) { // defaults to true
persistLevelIfPossible(level);
}
return self.rebuild();
};

self.setDefaultLevel = function (level) {
defaultLevel = level;
if (!getPersistedLevel()) {
self.setLevel(level, false);
defaultLevel = normalizeLevel(level);
if (currentLevel == null) {
self.rebuild();
}
};

self.resetLevel = function () {
self.setLevel(defaultLevel, false);
clearPersistedLevel();
currentLevel = null;
self.setDefaultLevel(defaultLevel);
};

self.enableAll = function(persist) {
Expand All @@ -248,30 +255,28 @@
self.rebuild = function (includeChildren) {
// NOTE: includeChildren should default to `true` in v2.
includeChildren = !!includeChildren;
var level = self.getLevel();

replaceLoggingMethods.call(self, currentLevel, name);
if (
typeof console === undefinedType &&
currentLevel < self.levels.SILENT
) {
replaceLoggingMethods.call(self, level, name);
if (typeof console === undefinedType && level < self.levels.SILENT) {
return "No console available for logging";
}

if (includeChildren && defaultLogger === self) {
for (var childName in _loggersByName) {
var child = _loggersByName[childName];
child.setDefaultLevel(currentLevel);
child.rebuild(includeChildren);
child.setDefaultLevel(level);
}
}
};

// Initialize with the right level
var initialLevel = getPersistedLevel();
if (initialLevel == null) {
initialLevel = defaultLevel;
self.setDefaultLevel(defaultLevel);
} else {
self.setLevel(initialLevel, false);
}
self.setLevel(initialLevel, false);
}

/*
Expand Down
9 changes: 9 additions & 0 deletions test/multiple-logger-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,15 @@ define(['test/test-helpers'], function(testHelpers) {
log.rebuild(true);
expect(newLogger).toBeAtLevel("ERROR");
});

it("should not change a child's explicitly set level even if un-persisted when calling root.rebuild(children=true)", function(log) {
log.setLevel("TRACE");
var newLogger = log.getLogger("newLogger");
newLogger.setLevel("DEBUG", false);

log.rebuild(true);
expect(newLogger).toBeAtLevel("DEBUG");
});
});
});
});

0 comments on commit 014e373

Please sign in to comment.