Skip to content

Commit

Permalink
Merge 74e65ec into 4b30c5f
Browse files Browse the repository at this point in the history
  • Loading branch information
Sherex committed Aug 7, 2020
2 parents 4b30c5f + 74e65ec commit 9382b0a
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 21 deletions.
12 changes: 10 additions & 2 deletions src/lib/log-level-mapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,18 @@ const levelMapper = {
silly: 5
}

const longestLevelString = Object.keys(levelMapper).reduce((prev, curr) => curr.length > prev.length ? curr : prev)

module.exports = (level) => {
try {
level = level.toLowerCase()
return levelMapper[level]
const severity = levelMapper[level.toLowerCase()]
if (typeof severity === 'number') {
return {
severity,
level: level.toUpperCase(),
padding: ' '.repeat(longestLevelString.length - level.length)
}
}
} catch (error) {
return undefined
}
Expand Down
22 changes: 12 additions & 10 deletions src/lib/log-level-mapper.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@ const levelMapper = require('./log-level-mapper')

describe('Checking if it returns correct value based on level', () => {
const levels = [
{ string: 'error', int: 0 },
{ string: 'warn', int: 1 },
{ string: 'info', int: 2 },
{ string: 'verbose', int: 3 },
{ string: 'debug', int: 4 },
{ string: 'silly', int: 5 },
{ string: 'Error', int: 0 },
{ string: 'WARN', int: 1 }
{ string: 'error', int: 0, message: 'ERROR', padding: ' ' },
{ string: 'warn', int: 1, message: 'WARN', padding: ' ' },
{ string: 'info', int: 2, message: 'INFO', padding: ' ' },
{ string: 'verbose', int: 3, message: 'VERBOSE', padding: '' },
{ string: 'debug', int: 4, message: 'DEBUG', padding: ' ' },
{ string: 'silly', int: 5, message: 'SILLY', padding: ' ' },
{ string: 'Error', int: 0, message: 'ERROR', padding: ' ' },
{ string: 'WARN', int: 1, message: 'WARN', padding: ' ' }
]
levels.forEach(level => {
it(`returns '${level.int}' when given string '${level.string}'`, () => {
expect(levelMapper(level.string)).toBe(level.int)
it(`returns { level: ${level.int}, message: '${level.message}', padding: ${level.padding} } when given string '${level.string}'`, () => {
expect(levelMapper(level.string).severity).toBe(level.int)
expect(levelMapper(level.string).level).toBe(level.message)
expect(levelMapper(level.string).padding).toBe(level.padding)
})
})

Expand Down
12 changes: 6 additions & 6 deletions src/lib/logger-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ function _loggerFactory (level, message,
}) {
const { fDate, fTime } = formatDateTime(new Date())
let messageArray = Array.isArray(message) ? message : [message]
let syslogSeverity = logLevelMapper(level)
let logLevel = logLevelMapper(level)

if (syslogSeverity === undefined) {
if (logLevel === undefined) {
if (!inProduction) throw Error(`Unknown log level '${level}'`)
level = 'warn'
syslogSeverity = logLevelMapper(level)
logLevel = logLevelMapper(level)
}

if (typeof loggerOptions.prefix === 'string') {
Expand All @@ -27,11 +27,11 @@ function _loggerFactory (level, message,
const funcDetails = pkg && pkg.version ? `${pkg.name} - ${pkg.version}: ` : ''
messageArray = messageArray.map(msg => typeof msg === 'object' ? JSON.stringify(msg) : msg)
const logMessage = `${funcDetails}${messageArray.join(' - ')}`
const remoteLogMessage = `${level.toUpperCase()} - ${logMessage}`
const localLogMessage = `[ ${fDate} ${fTime} ] < ${level.toUpperCase()} > ${logMessage}`
const remoteLogMessage = `${logLevel.level} - ${logMessage}`
const localLogMessage = `[ ${fDate} ${fTime} ] < ${logLevel.level} >${logLevel.padding} ${logMessage}`

const shouldLogToRemote = (loggerOptions.logToRemote && !(!inProduction && loggerOptions.onlyInProd)) || false
if (shouldLogToRemote) loggerOptions.remoteLogger.log(remoteLogMessage, { severity: syslogSeverity })
if (shouldLogToRemote) loggerOptions.remoteLogger.log(remoteLogMessage, { severity: logLevel.severity })

loggerOptions.localLogger(localLogMessage)

Expand Down
7 changes: 4 additions & 3 deletions src/lib/logger-factory.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const loggerFactory = require('./logger-factory')
const logLevelMapper = require('./log-level-mapper')

function matchLogMessage (message) {
const logMessageMatcher = /^\[ (?<dateTime>\d{1,2}\/\d{1,2}\/\d{4} \d{2}:\d{2}:\d{2}) \] < (?<level>\w{1,10}) > ([^:]*: |)(?<message>.*$)/
Expand All @@ -12,7 +13,7 @@ function matchLogMessage (message) {
function createLogger (fakeDeps) {
const mergedFakeDeps = {
formatDateTime: jest.fn((date) => ({ fDate: '00/0/0000', fTime: '00:00:00' })),
logLevelMapper: jest.fn((level) => 2),
logLevelMapper: jest.fn(logLevelMapper),
loggerOptions: {
localLogger: jest.fn((message) => {}),
remoteLogger: {
Expand Down Expand Up @@ -75,7 +76,7 @@ describe('Syslog severity testing', () => {
it('throws if syslogSeverity is undefined and not in production', () => {
const { logger } = createLogger({
inProduction: false,
logLevelMapper: level => undefined
logLevelMapper: logLevelMapper
})
expect(() => logger('unknown', 'msg')).toThrow()
expect(() => logger()).toThrow()
Expand All @@ -84,7 +85,7 @@ describe('Syslog severity testing', () => {
it('does not throw if syslogSeverity is undefined and is in production', () => {
const { logger } = createLogger({
inProduction: true,
logLevelMapper: level => undefined
logLevelMapper: logLevelMapper
})
expect(() => logger('unknown', 'msg')).not.toThrow()
expect(() => logger()).not.toThrow()
Expand Down

0 comments on commit 9382b0a

Please sign in to comment.