Skip to content

Commit

Permalink
feat: predefined log levels
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Sep 5, 2017
1 parent bd370f8 commit ad23c30
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
22 changes: 21 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"use strict";

var assign = require("es5-ext/object/assign")
, objMap = require("es5-ext/object/map")
, primitiveSet = require("es5-ext/object/primitive-set")
, setPrototypeOf = require("es5-ext/object/set-prototype-of")
, ensureString = require("es5-ext/object/validate-stringifiable-value")
, toShortString = require("es5-ext/to-short-string-representation")
Expand All @@ -15,6 +17,18 @@ var emitter = ee(), cache = Object.create(null);
var isValidLevel = RegExp.prototype.test.bind(/^[a-z]+$/);
var isValidNsToken = RegExp.prototype.test.bind(/^[a-z0-9-]+$/);

var predefinedLevels = primitiveSet(
"debug",
"info",
"notice",
"warning",
"error",
"critical",
"alert",
"emergency"
);
var levelAliases = Object.create(null, { warn: d("cew", "warning") });

var setEnabledState = function (state) {
Object.defineProperty(this, "isEnabled", d("ce", state));
};
Expand Down Expand Up @@ -51,6 +65,11 @@ var loggerProto = Object.create(
Function.prototype,
assign(
{ isEnabled: d("e", true), emitter: d("", emitter), _nsToken: d("", null) },
objMap(predefinedLevels, function (ignore, level) {
return d.gs(function () {
return this.getLevel(level);
});
}),
lazy({
ns: d(
"e",
Expand Down Expand Up @@ -118,13 +137,14 @@ createLogger = function () {
};

createLevelLogger = function (level) {
if (levelAliases[level]) level = levelAliases[level];
if (cache[level]) return cache[level];
if (!isValidLevel(level)) {
throw new TypeError(
toShortString(level) + " is not a valid level name (only 'a-z' chars are allowed)"
);
}
if (level in loggerProto) {
if (!predefinedLevels[level] && level in loggerProto) {
throw new TypeError(
toShortString(level) +
" is not a valid level name (should not override existing property)"
Expand Down
13 changes: 13 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,19 @@ test("Logger", function (t) {
}
);

t.test("Should expose known (syslog) levels with predefined properties", function (t) {
t.equal(log.info, log.getLevel("info"));
t.equal(log.notice, log.getLevel("notice"));
t.equal(log.warning, log.getLevel("warning"));
t.equal(log.error, log.getLevel("error"));
t.equal(log.critical, log.getLevel("critical"));
t.equal(log.alert, log.getLevel("alert"));
t.equal(log.emergency, log.getLevel("emergency"));
t.end();
});

t.equal(log.getLevel("warn"), log.warning, "Should alias 'warn' level to 'warning'");

t.test("Should provide enable/disable functionality on level/name configuration", function (t) {
t.equal(log.getNs("enabletest").isEnabled, true, "Should be enabled by default");

Expand Down

0 comments on commit ad23c30

Please sign in to comment.