From 126fa44d97bfc6739930cf5720950d92c282ebdb Mon Sep 17 00:00:00 2001 From: Olaoluwa Ajibade <82340085+ajibade3210@users.noreply.github.com> Date: Mon, 25 Jul 2022 00:51:25 +0100 Subject: [PATCH] Adding NodeJs Logging CodeExamples (#199) * Adding NodeJs Logging CodeExamples * Adding NodeJs Logging CodeExamples --- nodejs/logging-file/README.md | 12 +++++++++ nodejs/logging-file/app-console.js | 21 +++++++++++++++ .../logging-file/logging-via-winston/app.js | 22 ++++++++++++++++ .../logger-log-rotation.js | 21 +++++++++++++++ .../logger-multiple-transports.js | 26 +++++++++++++++++++ .../logging-via-winston/logger-prettyPrint.js | 17 ++++++++++++ .../logging-via-winston/logger-printf.js | 17 ++++++++++++ .../logging-via-winston/logger-transport.js | 16 ++++++++++++ .../logging-via-winston/logger.js | 9 +++++++ nodejs/logging-file/package.json | 17 ++++++++++++ 10 files changed, 178 insertions(+) create mode 100644 nodejs/logging-file/README.md create mode 100644 nodejs/logging-file/app-console.js create mode 100644 nodejs/logging-file/logging-via-winston/app.js create mode 100644 nodejs/logging-file/logging-via-winston/logger-log-rotation.js create mode 100644 nodejs/logging-file/logging-via-winston/logger-multiple-transports.js create mode 100644 nodejs/logging-file/logging-via-winston/logger-prettyPrint.js create mode 100644 nodejs/logging-file/logging-via-winston/logger-printf.js create mode 100644 nodejs/logging-file/logging-via-winston/logger-transport.js create mode 100644 nodejs/logging-file/logging-via-winston/logger.js create mode 100644 nodejs/logging-file/package.json diff --git a/nodejs/logging-file/README.md b/nodejs/logging-file/README.md new file mode 100644 index 0000000..e224b23 --- /dev/null +++ b/nodejs/logging-file/README.md @@ -0,0 +1,12 @@ +# Node.js Logging: Novice to Expert + +### Run `npm install` to get started + +To use new Winston Feature +- Switch logger import in logging-via-winston/app.js +`const logger = require("./logger");` + +- Example: + +To Use winston prettyPrint switch logger import to: +`const logger = require("./logger-prettyPrint.js");` diff --git a/nodejs/logging-file/app-console.js b/nodejs/logging-file/app-console.js new file mode 100644 index 0000000..3a97edb --- /dev/null +++ b/nodejs/logging-file/app-console.js @@ -0,0 +1,21 @@ +const express = require("express"); +const app = express(); + +app.get("/", (req, res, next) => { + console.log("debug", "Hello, Winston!"); + console.log("The is the home '/' route."); + res.status(200).send("Logging Hello World.."); +}); + +app.get("/event", (req, res, next) => { + try { + throw new Error("Not User!"); + } catch (error) { + console.error("Events Error: Unauthenticated user"); + res.status(500).send("Error!"); + } +}); + +app.listen(3000, () => { + console.log("Server Listenning On Port 3000"); +}); diff --git a/nodejs/logging-file/logging-via-winston/app.js b/nodejs/logging-file/logging-via-winston/app.js new file mode 100644 index 0000000..2c32161 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/app.js @@ -0,0 +1,22 @@ +const express = require("express"); +const logger = require("./logger"); +const app = express(); + +app.get("/", (req, res, next) => { + logger.log("debug", "Hello, Winston!"); + logger.debug("The is the home '/' route."); + res.status(200).send("Logging Hello World.."); +}); + +app.get("/event", (req, res, next) => { + try { + throw new Error("Not User!"); + } catch (error) { + logger.error("Events Error: Unauthenticated user"); + res.status(500).send("Error!"); + } +}); + +app.listen(3000, () => { + logger.info("Server Listenning On Port 3000"); +}); diff --git a/nodejs/logging-file/logging-via-winston/logger-log-rotation.js b/nodejs/logging-file/logging-via-winston/logger-log-rotation.js new file mode 100644 index 0000000..843aac6 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger-log-rotation.js @@ -0,0 +1,21 @@ +const { format, createLogger, transports } = require("winston"); +const { combine, label, json } = format; +require("winston-daily-rotate-file"); + +//Label +const CATEGORY = "Log Rotation"; + +//DailyRotateFile func() +const fileRotateTransport = new transports.DailyRotateFile({ + filename: "logs/rotate-%DATE%.log", + datePattern: "YYYY-MM-DD", + maxFiles: "14d", +}); + +const logger = createLogger({ + level: "debug", + format: combine(label({ label: CATEGORY }), json()), + transports: [fileRotateTransport, new transports.Console()], +}); + +module.exports = logger; diff --git a/nodejs/logging-file/logging-via-winston/logger-multiple-transports.js b/nodejs/logging-file/logging-via-winston/logger-multiple-transports.js new file mode 100644 index 0000000..dfb9eae --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger-multiple-transports.js @@ -0,0 +1,26 @@ +const { format, createLogger, transports } = require("winston"); +const { combine, timestamp, label, printf, prettyPrint } = format; +const CATEGORY = "winston custom format"; + +const logger = createLogger({ + level: "debug", + format: combine( + label({ label: CATEGORY }), + timestamp({ + format: "MMM-DD-YYYY HH:mm:ss", + }), + prettyPrint() + ), + transports: [ + new transports.File({ + filename: "logs/example.log", + }), + new transports.File({ + level: "error", + filename: "logs/error.log", + }), + new transports.Console(), + ], +}); + +module.exports = logger; diff --git a/nodejs/logging-file/logging-via-winston/logger-prettyPrint.js b/nodejs/logging-file/logging-via-winston/logger-prettyPrint.js new file mode 100644 index 0000000..57ac644 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger-prettyPrint.js @@ -0,0 +1,17 @@ +const { format, createLogger, transports } = require("winston"); +const { combine, timestamp, label, printf, prettyPrint } = format; +const CATEGORY = "winston custom format"; + +const logger = createLogger({ + level: "debug", + format: combine( + label({ label: CATEGORY }), + timestamp({ + format: "MMM-DD-YYYY HH:mm:ss", + }), + prettyPrint() + ), + transports: [new transports.Console()], +}); + +module.exports = logger; diff --git a/nodejs/logging-file/logging-via-winston/logger-printf.js b/nodejs/logging-file/logging-via-winston/logger-printf.js new file mode 100644 index 0000000..4a93092 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger-printf.js @@ -0,0 +1,17 @@ +const { format, createLogger, transports } = require("winston"); + +const { combine, timestamp, label, printf } = format; +const CATEGORY = "winston custom format"; + +//Using the printf format. +const customFormat = printf(({ level, message, label, timestamp }) => { + return `${timestamp} [${label}] ${level}: ${message}`; +}); + +const logger = createLogger({ + level: "debug", + format: combine(label({ label: CATEGORY }), timestamp(), customFormat), + transports: [new transports.Console()], +}); + +module.exports = logger; diff --git a/nodejs/logging-file/logging-via-winston/logger-transport.js b/nodejs/logging-file/logging-via-winston/logger-transport.js new file mode 100644 index 0000000..444cc15 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger-transport.js @@ -0,0 +1,16 @@ +const { createLogger, transports, format } = require("winston"); + +const logger = createLogger({ + level: "debug", + format: format.json(), + //logger method... + transports: [ + //new transports: + new transports.File({ + filename: "logs/example.log", + }), + ], + //... +}); + +module.exports = logger; diff --git a/nodejs/logging-file/logging-via-winston/logger.js b/nodejs/logging-file/logging-via-winston/logger.js new file mode 100644 index 0000000..1086fc8 --- /dev/null +++ b/nodejs/logging-file/logging-via-winston/logger.js @@ -0,0 +1,9 @@ +const { createLogger, transports, format } = require("winston"); + +const logger = createLogger({ + level: "debug", + format: format.json(), + transports: [new transports.Console()], +}); + +module.exports = logger; diff --git a/nodejs/logging-file/package.json b/nodejs/logging-file/package.json new file mode 100644 index 0000000..4961fef --- /dev/null +++ b/nodejs/logging-file/package.json @@ -0,0 +1,17 @@ +{ + "name": "logging-file", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.18.1", + "winston": "^3.8.1", + "winston-daily-rotate-file": "^4.7.1" + } +}