Merge pull request #430 from shocknet/bug/winston-errors

Winston logging refactored
This commit is contained in:
CapDog 2021-07-22 09:13:16 -04:00 committed by GitHub
commit 879547c101
17 changed files with 63 additions and 66 deletions

View file

@ -1,58 +1,58 @@
// config/log.js /** @prettier */
const winston = require("winston"); const { createLogger, transports, format } = require('winston')
const util = require("util") const util = require('util')
require("winston-daily-rotate-file"); require('winston-daily-rotate-file')
const winstonAttached = new Map(); // @ts-ignore
const transform = info => {
const transform = (info) => { const args = info[Symbol.for('splat')]
const args = info[Symbol.for('splat')]; if (args) {
if (args) { return { ...info, message: util.format(info.message, ...args) }
return {...info, message: util.format(info.message, ...args)};
} }
return info; return info
} }
const logFormatter = () => ({ transform }) const logFormatter = () => ({ transform })
/** const formatter = format.combine(
* @param {string} logFileName format.colorize(),
* @param {string} logLevel format.errors({ stack: true }),
* @returns {import("winston").Logger} logFormatter(),
*/ format.prettyPrint(),
module.exports = (logFileName, logLevel) => { format.timestamp(),
if (!winstonAttached.has(logFileName)) { format.simple(),
winston.add(new (winston.transports.DailyRotateFile)({ format.align(),
filename: logFileName, format.printf(info => {
datePattern: "yyyy-MM-DD", const { timestamp, level, message, stack, exception } = info
const ts = timestamp.slice(0, 19).replace('T', ' ')
const isObject = typeof message === 'object'
const formattedJson = isObject ? JSON.stringify(message, null, 2) : message
const formattedException = exception ? exception.stack : ''
const errorMessage = stack || formattedException
const formattedMessage = errorMessage ? errorMessage : formattedJson
return `${ts} [${level}]: ${formattedMessage}`
})
)
const Logger = createLogger({
format: formatter,
transports: [
new transports.DailyRotateFile({
filename: 'shockapi.log',
datePattern: 'yyyy-MM-DD',
// https://github.com/winstonjs/winston-daily-rotate-file/issues/188 // https://github.com/winstonjs/winston-daily-rotate-file/issues/188
json: true, json: false,
maxSize: 1000000, maxSize: 1000000,
maxFiles: 7, maxFiles: 7,
level: logLevel handleExceptions: true
})) }),
winston.add(new winston.transports.Console({ new transports.Console({
format: winston.format.combine( handleExceptions: true
winston.format.colorize(), })
logFormatter(), ]
winston.format.prettyPrint(), })
winston.format.timestamp(),
winston.format.simple(),
winston.format.align(),
winston.format.printf((info) => {
const {
timestamp, level, message
} = info;
const ts = timestamp.slice(0, 19).replace('T', ' '); module.exports = Logger
return `${ts} [${level}]: ${typeof message === "object" ? JSON.stringify(message, null, 2) : message}`;
}),
)
}))
winston.level = logLevel
winstonAttached.set(logFileName, winston)
}
return winstonAttached.get(logFileName)
}

View file

@ -6,7 +6,7 @@ const jwt = require('jsonwebtoken')
const uuidv1 = require('uuid/v1') const uuidv1 = require('uuid/v1')
const jsonfile = require('jsonfile') const jsonfile = require('jsonfile')
const path = require('path') const path = require('path')
const logger = require('winston') const logger = require('../../config/log')
const Storage = require('node-persist') const Storage = require('node-persist')
const FS = require('../../utils/fs') const FS = require('../../utils/fs')

View file

@ -5,7 +5,7 @@ const Common = require('shock-common')
const Gun = require('gun') const Gun = require('gun')
// @ts-ignore // @ts-ignore
require('gun/nts') require('gun/nts')
const logger = require('winston') const logger = require('../../../config/log')
// @ts-ignore // @ts-ignore
Gun.log = () => {} Gun.log = () => {}
// @ts-ignore // @ts-ignore

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const uuidv1 = require('uuid/v1') const uuidv1 = require('uuid/v1')
const logger = require('winston') const logger = require('../../../config/log')
const Common = require('shock-common') const Common = require('shock-common')
const { Constants, Schema } = Common const { Constants, Schema } = Common
const Gun = require('gun') const Gun = require('gun')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const Common = require('shock-common') const Common = require('shock-common')
const Logger = require('winston') const Logger = require('../../../../config/log')
const size = require('lodash/size') const size = require('lodash/size')
const Utils = require('../utils') const Utils = require('../utils')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const logger = require('winston') const logger = require('../../../../config/log')
const { const {
Constants: { Constants: {

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
// @ts-check // @ts-check
const logger = require('winston') const logger = require('../../../../config/log')
const isFinite = require('lodash/isFinite') const isFinite = require('lodash/isFinite')
const isNumber = require('lodash/isNumber') const isNumber = require('lodash/isNumber')
const isNaN = require('lodash/isNaN') const isNaN = require('lodash/isNaN')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
/* eslint-disable init-declarations */ /* eslint-disable init-declarations */
const logger = require('winston') const logger = require('../../../../config/log')
const { Constants, Utils: CommonUtils } = require('shock-common') const { Constants, Utils: CommonUtils } = require('shock-common')
const Key = require('../key') const Key = require('../key')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const logger = require('winston') const logger = require('../../../config/log')
const Common = require('shock-common') const Common = require('shock-common')
const uuidv4 = require('uuid/v4') const uuidv4 = require('uuid/v4')

View file

@ -1,5 +1,5 @@
const Crypto = require('crypto') const Crypto = require('crypto')
const logger = require('winston') const logger = require('../../config/log')
const Common = require('shock-common') const Common = require('shock-common')
const getGunUser = () => require('../gunDB/Mediator').getUser() const getGunUser = () => require('../gunDB/Mediator').getUser()
const isAuthenticated = () => require('../gunDB/Mediator').isAuthenticated() const isAuthenticated = () => require('../gunDB/Mediator').isAuthenticated()

View file

@ -6,7 +6,7 @@
const Axios = require('axios') const Axios = require('axios')
const Crypto = require('crypto') const Crypto = require('crypto')
const Storage = require('node-persist') const Storage = require('node-persist')
const logger = require('winston') const logger = require('../../config/log')
const httpsAgent = require('https') const httpsAgent = require('https')
const responseTime = require('response-time') const responseTime = require('response-time')
const uuid = require('uuid/v4') const uuid = require('uuid/v4')

View file

@ -47,10 +47,7 @@ const server = program => {
const tunnelHost = process.env.LOCAL_TUNNEL_SERVER || defaults.localtunnelHost const tunnelHost = process.env.LOCAL_TUNNEL_SERVER || defaults.localtunnelHost
// setup winston logging ========== // setup winston logging ==========
const logger = require('../config/log')( const logger = require('../config/log')
program.logfile || defaults.logfile,
program.loglevel || defaults.loglevel
)
CommonLogger.setLogger(logger) CommonLogger.setLogger(logger)

View file

@ -3,7 +3,7 @@
*/ */
// @ts-check // @ts-check
const logger = require('winston') const logger = require('../config/log')
const Common = require('shock-common') const Common = require('shock-common')
const mapValues = require('lodash/mapValues') const mapValues = require('lodash/mapValues')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const Common = require('shock-common') const Common = require('shock-common')
const logger = require('winston') const logger = require('../../config/log')
const { safeParseJSON } = require('../JSON') const { safeParseJSON } = require('../JSON')
const ECC = require('./index') const ECC = require('./index')

View file

@ -3,7 +3,7 @@
*/ */
const Crypto = require('crypto') const Crypto = require('crypto')
const { Buffer } = require('buffer') const { Buffer } = require('buffer')
const logger = require('winston') const logger = require('../config/log')
const APIKeyPair = new Map() const APIKeyPair = new Map()
const authorizedDevices = new Map() const authorizedDevices = new Map()

View file

@ -1,4 +1,4 @@
const logger = require('winston') const logger = require('../../config/log')
const fetch = require('node-fetch') const fetch = require('node-fetch')
const Storage = require('node-persist') const Storage = require('node-persist')
const { listPeers, connectPeer,getInfo } = require('./v2') const { listPeers, connectPeer,getInfo } = require('./v2')

View file

@ -2,7 +2,7 @@
* @format * @format
*/ */
const Crypto = require('crypto') const Crypto = require('crypto')
const logger = require('winston') const logger = require('../../config/log')
const Common = require('shock-common') const Common = require('shock-common')
const Ramda = require('ramda') const Ramda = require('ramda')