Explorar o código

feat(logging): add option to configure JSON logging (#5022)

* fix: Use logger for logs using console logging

* feat: Add option to configure JSON logging

* fix: use generic logFormat instead of json specific

* fix: use logFormat for docker config

* fix: use logFormat to build winston formatters

Co-authored-by: Nicolas Giard <github@ngpixel.com>
Marián Skrip %!s(int64=3) %!d(string=hai) anos
pai
achega
2815f38c52

+ 7 - 0
config.sample.yml

@@ -108,6 +108,13 @@ bindIP: 0.0.0.0
 
 logLevel: info
 
+# ---------------------------------------------------------------------
+# Log Format
+# ---------------------------------------------------------------------
+# Output format for logging, possible values: default, json
+
+logFormat: default
+
 # ---------------------------------------------------------------------
 # Offline Mode
 # ---------------------------------------------------------------------

+ 1 - 0
dev/build/config.yml

@@ -16,4 +16,5 @@ ssl:
   domain: $(LETSENCRYPT_DOMAIN)
   subscriberEmail: $(LETSENCRYPT_EMAIL)
 logLevel: info
+logFormat: $(LOG_FORMAT)
 ha: $(HA_ACTIVE)

+ 1 - 1
server/core/kernel.js

@@ -19,7 +19,7 @@ module.exports = {
     } catch (err) {
       WIKI.logger.error('Database Initialization Error: ' + err.message)
       if (WIKI.IS_DEBUG) {
-        console.error(err)
+        WIKI.logger.error(err)
       }
       process.exit(1)
     }

+ 14 - 7
server/core/logger.js

@@ -6,14 +6,21 @@ const winston = require('winston')
 module.exports = {
   loggers: {},
   init(uid) {
-    let logger = winston.createLogger({
+    const loggerFormats = [
+      winston.format.label({ label: uid }),
+      winston.format.timestamp()
+    ]
+
+    if (WIKI.config.logFormat === 'json') {
+      loggerFormats.push(winston.format.json())
+    } else {
+      loggerFormats.push(winston.format.colorize())
+      loggerFormats.push(winston.format.printf(info => `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`))
+    }
+
+    const logger = winston.createLogger({
       level: WIKI.config.logLevel,
-      format: winston.format.combine(
-        winston.format.colorize(),
-        winston.format.label({ label: uid }),
-        winston.format.timestamp(),
-        winston.format.printf(info => `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`)
-      )
+      format: winston.format.combine(...loggerFormats)
     })
 
     // Init Console (default)

+ 1 - 1
server/modules/storage/git/storage.js

@@ -73,7 +73,7 @@ module.exports = {
               mode: 0o600
             })
           } catch (err) {
-            console.error(err)
+            WIKI.logger.error(err)
             throw err
           }
         }