Logger now logs whole object not only part of it.pull/44/head
| "bcryptjs": "^2.4.3", | "bcryptjs": "^2.4.3", | ||||
| "config": "^3.3.7", | "config": "^3.3.7", | ||||
| "cors": "^2.8.5", | "cors": "^2.8.5", | ||||
| "elmah.io.javascript": "^3.7.0", | |||||
| "express": "^4.18.1", | "express": "^4.18.1", | ||||
| "express-jwt": "^7.7.2", | "express-jwt": "^7.7.2", | ||||
| "helmet": "^5.1.0", | "helmet": "^5.1.0", | ||||
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | ||||
| "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | ||||
| }, | }, | ||||
| "node_modules/elmah.io.javascript": { | |||||
| "version": "3.7.0", | |||||
| "resolved": "https://registry.npmjs.org/elmah.io.javascript/-/elmah.io.javascript-3.7.0.tgz", | |||||
| "integrity": "sha512-s7yyLo8tlZPURYxsT4tS977FfEXXaMzkbxZNLVRc90v949NgdfeJYLYyYe6c5fhcQkiIPsy3TgOCErSpaJWGvw==" | |||||
| }, | |||||
| "node_modules/emoji-regex": { | "node_modules/emoji-regex": { | ||||
| "version": "8.0.0", | "version": "8.0.0", | ||||
| "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | ||||
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | ||||
| "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | ||||
| }, | }, | ||||
| "elmah.io.javascript": { | |||||
| "version": "3.7.0", | |||||
| "resolved": "https://registry.npmjs.org/elmah.io.javascript/-/elmah.io.javascript-3.7.0.tgz", | |||||
| "integrity": "sha512-s7yyLo8tlZPURYxsT4tS977FfEXXaMzkbxZNLVRc90v949NgdfeJYLYyYe6c5fhcQkiIPsy3TgOCErSpaJWGvw==" | |||||
| }, | |||||
| "emoji-regex": { | "emoji-regex": { | ||||
| "version": "8.0.0", | "version": "8.0.0", | ||||
| "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", |
| "bcryptjs": "^2.4.3", | "bcryptjs": "^2.4.3", | ||||
| "config": "^3.3.7", | "config": "^3.3.7", | ||||
| "cors": "^2.8.5", | "cors": "^2.8.5", | ||||
| "elmah.io.javascript": "^3.7.0", | |||||
| "express": "^4.18.1", | "express": "^4.18.1", | ||||
| "express-jwt": "^7.7.2", | "express-jwt": "^7.7.2", | ||||
| "helmet": "^5.1.0", | "helmet": "^5.1.0", |
| const allUsers = await User.find({}) | const allUsers = await User.find({}) | ||||
| return res.status(200).send(allUsers) | return res.status(200).send(allUsers) | ||||
| } catch (e) { | } catch (e) { | ||||
| // TODO: Jel i ovde treba next(e)? | |||||
| return res.status(500).send('Internal server error!') | return res.status(500).send('Internal server error!') | ||||
| } | } | ||||
| } | } |
| const winston = require('winston'); | |||||
| const logger = winston.createLogger({ | |||||
| level: 'info', | |||||
| format: winston.format.json(), | |||||
| defaultMeta: { service: 'user-service' }, | |||||
| transports: [ | |||||
| // | |||||
| // - Write all logs with importance level of `error` or less to `error.log` | |||||
| // - Write all logs with importance level of `silly` or less to `all.log` | |||||
| // | |||||
| new winston.transports.File({ filename: 'loggerFiles/error.log', level: 'error' }), | |||||
| new winston.transports.File({ filename: 'loggerFiles/all.log', level: 'silly' }), | |||||
| ], | |||||
| }); | |||||
| // | |||||
| // If we're not in production then log to the `console` with the format: | |||||
| // `${info.level}: ${info.message} JSON.stringify({ ...rest }) ` | |||||
| // | |||||
| if (process.env.NODE_ENV !== 'production') { | |||||
| logger.add(new winston.transports.Console({ | |||||
| format: winston.format.simple(), | |||||
| })); | |||||
| } | |||||
| module.exports = logger |
| // const Elmahio = require("elmah.io.javascript") | |||||
| // | |||||
| // // TODO: da li ovo treba u configu (appsettings.json) da bude ili moze ovde hardkodirano | |||||
| // const loggerElmah = new Elmahio({ | |||||
| // apiKey: 'API_KEY', | |||||
| // logId: 'LOG_ID', | |||||
| // application: 'diligent-node-api' | |||||
| // }) | |||||
| // | |||||
| // module.exports = loggerElmah |
| const winston = require('winston') | |||||
| const config = require('config') | |||||
| const loggerWinston = winston.createLogger({ | |||||
| level: 'info', | |||||
| format: winston.format.json(), | |||||
| defaultMeta: { service: 'user-service' }, | |||||
| transports: [ | |||||
| new winston.transports.File({ filename: 'loggerFiles/error.log', level: 'error' }), | |||||
| new winston.transports.File({ filename: 'loggerFiles/all.log', level: 'silly' }), | |||||
| ], | |||||
| }); | |||||
| if (config.util.getEnv('NODE_ENV') !== 'production') { | |||||
| loggerWinston.add(new winston.transports.Console({ | |||||
| format: winston.format.simple(), | |||||
| })); | |||||
| } | |||||
| module.exports = loggerWinston |
| //const loggerElmah = require('../logging/loggerElmah') | |||||
| const loggerWinston = require('../logging/loggerWinston') | |||||
| const config = require('config') | |||||
| const errorLogger = (err, req, res, next) => { | const errorLogger = (err, req, res, next) => { | ||||
| console.error(err) | console.error(err) | ||||
| if (config.util.getEnv('NODE_ENV') === 'development') | |||||
| loggerWinston.error(err) | |||||
| // else | |||||
| // loggerElmah.error('There has been an error', err) | |||||
| next(err) | next(err) | ||||
| } | } | ||||
| const logger = require("../logging/logger") | |||||
| const logger = require("../logging/loggerWinston") | |||||
| const requestLogging = async (req, res, next) => { | const requestLogging = async (req, res, next) => { | ||||
| res.header("Content-Type", 'application/json'); | res.header("Content-Type", 'application/json'); | ||||
| const reqData = JSON.stringify({ | |||||
| headers: req.headers, | |||||
| method: req.method, | |||||
| url: req.url, | |||||
| httpVersion: req.httpVersion, | |||||
| body: req.body, | |||||
| cookies: req.cookies, | |||||
| path: req.path, | |||||
| protocol: req.protocol, | |||||
| query: req.query, | |||||
| hostname: req.hostname, | |||||
| ip: req.ip, | |||||
| originalUrl: req.originalUrl, | |||||
| params: req.params, | |||||
| }) | |||||
| logger.silly((JSON.stringify(reqData))) | |||||
| // TODO: Da se vidi da li treba ceo objekat ili moze da se prebaci u string | |||||
| // const reqData = JSON.stringify({ | |||||
| // headers: req.headers, | |||||
| // method: req.method, | |||||
| // url: req.url, | |||||
| // httpVersion: req.httpVersion, | |||||
| // body: req.body, | |||||
| // cookies: req.cookies, | |||||
| // path: req.path, | |||||
| // protocol: req.protocol, | |||||
| // query: req.query, | |||||
| // hostname: req.hostname, | |||||
| // ip: req.ip, | |||||
| // originalUrl: req.originalUrl, | |||||
| // params: req.params, | |||||
| // }) | |||||
| // logger.silly((JSON.stringify(reqData))) | |||||
| logger.silly(req) | |||||
| next() | next() | ||||
| } | } | ||||
| const helmet = require('helmet') //Basic protection against attacks like XSS | const helmet = require('helmet') //Basic protection against attacks like XSS | ||||
| const config = require('config') //Default configuration file | const config = require('config') //Default configuration file | ||||
| //console.log(config.util.getEnv('NODE_ENV')) | |||||
| // console.log(config.util.getEnv('NODE_ENV')) | |||||
| const swaggerOptions = { | const swaggerOptions = { | ||||
| swaggerDefinition: { | swaggerDefinition: { |