Hapi plugin for a JSON logger
npm install @jackdbd/hapi-logger-plugin
!Snyk Vulnerabilities for npm package
Hapi plugin that uses tags-logger for logging events emitted by server.log() and request.log().
``sh`
npm install @jackdbd/hapi-logger-plugin
`ts
import logger from '@jackdbd/hapi-logger-plugin'
export const app = async (config) => {
const server = Hapi.server({ port: 8080 })
await server.register({ plugin: logger })
return { server }
}
`
`ts
import logger from '@jackdbd/hapi-logger-plugin'
export const app = async (config) => {
const server = Hapi.server({ port: 8080 })
await server.register({
plugin: logger,
options: {
namespace: 'my-app'
}
})
return { server }
}
`
You likely want to use unstructured logging when the code is running on Cloud Run, and unstructured logging when it's running locally (regardless whether it a containerized Node.js app or a containerized one).
Also, you might want to validate the log statements only in development.
Here is a configuration you might try:
`ts
import logger from '@jackdbd/hapi-logger-plugin'
export const app = async (config) => {
const server = Hapi.server({ port: 8080 })
await server.register({
plugin: logger,
options: {
// when the code runs as a Cloud Run service, don't set namespace
namespace: process.env.K_SERVICE ? undefined : 'my-app',
// when in production, don't validate log statements
should_validate_log_statements: process.env.NODE_ENV === 'production' ? false : true
}
})
return { server }
}
`
| Environment variable | Explanation |
| --- | --- |
| DEBUG | You must set this environment variable if you want to use unstructured logging and see some output. For example, if you set namespace: 'my-app', Hapi server.log() events will be logged to the my-app/log-event namespace, and Hapi request.log() events will be logged to the my-app/request-event namespace. So, for example, DEBUG=my-app/ will log all events, while DEBUG=my-app/request-event or DEBUG=my-app/,-my-app/log-event will log only the request.log() events. |
| Option | Default | Explanation |
| --- | --- | --- |
| channels | ['app'] | The event channels you want to log. |namespace
| | undefined | The namespace for unstructured logging. This option has no effect when using structured logging. |should_use_emoji_for_severity
| | true | Whether to use an emoji for the severity level, when using unstructured logging. This option has no effect when using structured logging. |should_validate_log_statements
| | false when NODE_ENV is 'production', true` otherwise | Whether each log statement should be validated against a Joi schema. |