hmpo-logger

Consistent logging for hmpo apps

Usage no npm install needed!

<script type="module">
  import hmpoLogger from 'https://cdn.skypack.dev/hmpo-logger';
</script>

README

hmpo-logger

Consistent logging for hmpo apps

Usage

Top level logging configuration:

var hmpoLogger = require('hmpo-logger');
hmpoLogger.config();

var app = require('express')();
app.use(hmpoLogger.middleware());

Logging messages:

var logger = require('hmpo-logger').get();

logger.log('error', 'This is an error');
logger.warn('This is a warning');
logger.warn('This is an %s warning', 'interpolated');
logger.info('This is just info with :meta', {meta: 'metavalue'});
logger.info(':method :url took :responseTime ms and was res[content-length] bytes', {req: req, res: res});

logger.log('info', 'response :responseText', { responseText: logger.trimHtml(htmlBody, 100)});

Note: try to include req in your log metadata where possible to decorate your log entries with info about the current express request

get(name)

Get a named winston logger. The name is prepended to the log entry messages.

require('hmpo-logger').get(name);

If name is ommited it is guessed from the nearest package.json file found in the calling package.

require('hmpo-logger').get();

If name begins with a colon it is appended to the guessed name.

require('hmpo-logger').get(':subname');

Returns a winston logger.

logger.trimHtml(text, maxLength)

Trim tags out of an HTML string to help with more concise HTML error response logging. Defaults to a maxLength of 400.

Returns a string, or passes through text if not a string.

require('hmpo-logger').get(name);

config(options)

Initialise the logger at the top level of the app, specifying the log locations and logging levels of three pre-defined transports: console, app, and error.

Note: configure the logger as early as possible in code before the logger gets used to avoid config issues.

var hmpoLogger = require('hmpo-logger');
hmpoLogger.config({ // defaults:
    console: true,
    connsoleJSON: false,
    consoleLevel: 'debug',
    consoleColor: true,
    app: './app.log',
    appJSON: true,
    appLevel: 'info',
    error: './error.log',
    errorJSON: true,
    errorLevel: 'exceptions',
    meta: {
        host: 'host',
        pm: 'env.pm_id',
        sessionID: 'sessionID',
        method: 'method',
        request: 'request'
    },
    requestMeta: {
        clientip: 'clientip',
        uniqueID: 'req.x-uniq-id',
        remoteAddress: 'connection.remoteAddress',
        hostname: 'hostname',
        port: 'port',
        response: 'statusCode',
        responseTime: 'responseTime',
        httpversion: 'version',
        bytes: 'res.content-length'
    },
    logPublicRequests: false,
    logHealthcheckRequests: false,
    sizeRotate: false,
    dateRotate: false,
    maxSize: 50 * 1024 * 1024,
    maxFiles: 5,
    format: ':clientip :sessionID :method :request HTTP/:httpVersion :statusCode :res[content-length] - :responseTime ms'
});

Returns hmpoLogger.

middleware()

Log incomming requests from an express app.

var hmpoLogger = require('hmpo-logger');

var app = require('express')();
app.use(hmpoLogger.middleware());

Returns express compatible middleware

Rotating Logfiles

The config supports native winston log rotation based on file size and adds rotation based on the date. Both options cannot be specified at the same time. The settings apply to both the app and error log files.

Rotating based on size

  sizeRotate: true,
  maxSize: 50 * 1024 * 1024, // limit file to 50MB
  maxFiles: 5, // keep 5 rotated files

The names of the log files will be incremented based on the log filename, eg:

/path/name.log
/path/name.1.log
/path/name.2.log

Rotating based on date

  dateRotate: true,
  maxFiles: 5, // keep 5 rotated files

The names of the log files will include the year, month, and day and will be based on the log filename, eg:

/path/name.log
/path/name-2016-10-02.log
/path/name-2016-10-01.log
/path/name-2016-09-31.log

Additional winston transport options

Winston options can be specified for the wrapped winston transports. These will override any options set by hmpo-logger, eg:

  consoleOptions: { // Console transport options
    stderrLevels: [ 'error' ]
  },
  appOptions: { // File transport options
    eol: '\t\n',
  },
  errorOptions: { // File transport options
    maxRetries: 4    
  }