Skip to content

Commit

Permalink
feat: integrate @logtail/node for enhanced logging and update depende…
Browse files Browse the repository at this point in the history
…ncies
  • Loading branch information
jorgtho committed Feb 3, 2025
1 parent 6e25532 commit 9a46ee9
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 9 deletions.
177 changes: 173 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
],
"license": "MIT",
"dependencies": {
"@logtail/node": "^0.5.2",
"axios": "^1.7.4",
"deepmerge": "^4.2.2",
"pkg-dir": "5.0.0"
Expand All @@ -57,4 +58,4 @@
"jest"
]
}
}
}
11 changes: 9 additions & 2 deletions src/lib/log-config-factory.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const { Logtail } = require('@logtail/node')

function _logConfigFactory (options = {}, { axios, deepmerge, loggerOptions, envVariables }) {
options = deepmerge(loggerOptions.previousOptions, options)
loggerOptions.previousOptions = options
Expand Down Expand Up @@ -48,16 +50,21 @@ function _logConfigFactory (options = {}, { axios, deepmerge, loggerOptions, env
options.betterstack.url = options.betterstack.url || envVariables.BETTERSTACK_URL
options.betterstack.token = options.betterstack.token || envVariables.BETTERSTACK_TOKEN

const logtail = new Logtail(options.betterstack.token, {
endpoint: options.betterstack.url
})

loggerOptions.betterstackLogger = {
log: async msg => {
log: async (level, msg) => {
const betterstackUrl = new URL(options.betterstack.url)
if (!betterstackUrl.hostname.endsWith('betterstackdata.com')) {
throw new Error('Invalid Betterstack URL, must end with betterstackdata.com')
}
if (!betterstackUrl.protocol === 'https:') {
throw new Error('Invalid Betterstack URL, must use HTTPS')
}
await axios.post(options.betterstack.url, msg, { headers: { Authorization: `Bearer ${options.betterstack.token}` } })
if (['silly', 'verbose'].includes(level)) level = 'debug' // Betterstack does not support silly level
logtail[level](msg) // Log to Betterstack with package to get batching and retry logic, and colors! (må vi ha await??)
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/lib/logger-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ async function _loggerFactory (level, message, { formatDateTime, logLevelMapper,
// Betterstack logging
const shouldLogToBetterstack = (loggerOptions.logToBetterstack && !(!inProduction && loggerOptions.onlyInProd) && betterstackLevelLogToBetterstack) || false
try {
if (shouldLogToBetterstack) await loggerOptions.betterstackLogger.log(messageFormats.betterstackLogMessage)
if (shouldLogToBetterstack) await loggerOptions.betterstackLogger.log(logLevel.level.toLowerCase(), messageFormats.betterstackLogMessage)
} catch (error) {
const warnLevel = logLevelMapper('warn')
const errorMessage = formatLogMessage(formatDateTime, pkg, warnLevel, ['logger-factory', 'logToBetterstack', 'error', error.message])
Expand Down Expand Up @@ -101,7 +101,7 @@ function formatLogMessage (formatDateTime, pkg, logLevel, messageArray, context)
return {
logMessage,
remoteLogMessage: `${logLevel.level} - ${logMessage}`,
betterstackLogMessage: `${logLevel.level} - ${logMessage}`,
betterstackLogMessage: logMessage, // Betterstack package will add level and timestamp
localLogMessage: `[ ${fDate} ${fTime} ] < ${logLevel.level} >${logLevel.padding} ${logMessage}`,
teamsMessageCard: formatMessageCard(logLevel, `${logLevel.level} - ${funcDetails}`, messageArray),
teamsAdaptiveCard: formatAdaptiveCard(logLevel, `${logLevel.level} - ${funcDetails}`, messageArray)
Expand Down

0 comments on commit 9a46ee9

Please sign in to comment.