| @@ -12,6 +12,7 @@ | |||
| "bcryptjs": "^2.4.3", | |||
| "config": "^3.3.7", | |||
| "cors": "^2.8.5", | |||
| "elmah.io.javascript": "^3.7.0", | |||
| "express": "^4.18.1", | |||
| "express-jwt": "^7.7.2", | |||
| "helmet": "^5.1.0", | |||
| @@ -966,6 +967,11 @@ | |||
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |||
| "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": { | |||
| "version": "8.0.0", | |||
| "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | |||
| @@ -3979,6 +3985,11 @@ | |||
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |||
| "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": { | |||
| "version": "8.0.0", | |||
| "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | |||
| @@ -16,6 +16,7 @@ | |||
| "bcryptjs": "^2.4.3", | |||
| "config": "^3.3.7", | |||
| "cors": "^2.8.5", | |||
| "elmah.io.javascript": "^3.7.0", | |||
| "express": "^4.18.1", | |||
| "express-jwt": "^7.7.2", | |||
| "helmet": "^5.1.0", | |||
| @@ -7,6 +7,7 @@ const getUsers = async (req, res, next) => { | |||
| const allUsers = await User.find({}) | |||
| return res.status(200).send(allUsers) | |||
| } catch (e) { | |||
| // TODO: Jel i ovde treba next(e)? | |||
| return res.status(500).send('Internal server error!') | |||
| } | |||
| } | |||
| @@ -1,27 +0,0 @@ | |||
| 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 | |||
| @@ -0,0 +1,10 @@ | |||
| // 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 | |||
| @@ -0,0 +1,20 @@ | |||
| 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 | |||
| @@ -1,5 +1,15 @@ | |||
| //const loggerElmah = require('../logging/loggerElmah') | |||
| const loggerWinston = require('../logging/loggerWinston') | |||
| const config = require('config') | |||
| const errorLogger = (err, req, res, next) => { | |||
| console.error(err) | |||
| if (config.util.getEnv('NODE_ENV') === 'development') | |||
| loggerWinston.error(err) | |||
| // else | |||
| // loggerElmah.error('There has been an error', err) | |||
| next(err) | |||
| } | |||
| @@ -1,24 +1,9 @@ | |||
| const logger = require("../logging/logger") | |||
| const logger = require("../logging/loggerWinston") | |||
| const requestLogging = async (req, res, next) => { | |||
| 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))) | |||
| logger.silly(req) | |||
| next() | |||
| } | |||
| @@ -13,7 +13,7 @@ const cors = require('cors') //Cross-origin resource sharing | |||
| const helmet = require('helmet') //Basic protection against attacks like XSS | |||
| const config = require('config') //Default configuration file | |||
| //console.log(config.util.getEnv('NODE_ENV')) | |||
| // console.log(config.util.getEnv('NODE_ENV')) | |||
| const swaggerOptions = { | |||
| swaggerDefinition: { | |||