Skip to content

_log(level: string) and logLevelFilter problems #1029

@ankon

Description

@ankon

The _log function on a logger is declared to take a string-typed level, and that works mostly -- except when using the logLevelFilter: That one assumes the level is an actual Level, and calls isGreaterThanOrEqual() on it.

Defensively one could fix that there:

diff --git a/lib/appenders/logLevelFilter.js b/lib/appenders/logLevelFilter.js
index 7c9012c..253fedd 100644
--- a/lib/appenders/logLevelFilter.js
+++ b/lib/appenders/logLevelFilter.js
@@ -3,7 +3,7 @@ function logLevelFilter(minLevelString, maxLevelString, appender, levels) {
   const maxLevel = levels.getLevel(maxLevelString, levels.FATAL);
   return (logEvent) => {
     const eventLevel = logEvent.level;
-    if (eventLevel.isGreaterThanOrEqualTo(minLevel) && eventLevel.isLessThanOrEqualTo(maxLevel)) {
+    if (minLevel.isLessThanOrEqualTo(eventLevel) && maxLevel.isGreaterThanOrEqualTo(eventLevel)) {
       appender(logEvent);
     }
   };

But, more generally it seems that maybe _log should explicitly convert the level:

diff --git a/lib/logger.js b/lib/logger.js
index dbfd786..2087b0c 100644
--- a/lib/logger.js
+++ b/lib/logger.js
@@ -82,7 +82,7 @@ class Logger {
     debug(`sending log data (${level}) to appenders`);
     const loggingEvent = new LoggingEvent(
       this.category,
-      level,
+      levels.getLevel(level),
       data,
       this.context,
       this.useCallStack && this.parseCallStack(new Error())

WDYT, what's the right direction here?

In any case the function type should be changed probably to say _log(level: Level|string, ...), but given #1010 I'm not sure about that one either :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions