TechChain
TechChain

Reputation: 8952

write logs with log4js in new diffrent files?

I want to write the logs into different files.

const log4js = require('log4js');
log4js.configure({
    appenders: { integra: { type: 'file', filename: './logs/doc.log' } },
    categories: { default: { appenders: ['doc'], level: 'error' } }
});
const logger = log4js.getLogger('doc');

module.exports = logger

As per the code above, I can configure logs one time only. But I want to write a log file dynamcally for every log. In above case, I can write a single file only. I need a way by which I can write a new log file. I want to write multiple logs files at different paths.

Upvotes: 4

Views: 4165

Answers (2)

Sohail
Sohail

Reputation: 4586

You can create multiple appenders and categories, and get the logger accordingly before writing to it. The following would create three different files.

const log4js = require('log4js');

log4js.configure({
  appenders: { 
    nasty: { type: 'file', filename: 'nasty.log' },
    sleek: { type: 'file', filename: 'sleek.log' },
    tracer: { type: 'file', filename: 'tracer.log' },
  },
  categories: { 
    default: { 
      appenders: ['nasty'], level: 'error' 
    },
    sleek: { 
      appenders: ['sleek'], level: 'info' 
    },
    tracer: { 
      appenders: ['tracer'], level: 'trace' 
    }
  }
});

const nastyLogger = log4js.getLogger('nasty');
nastyLogger.error(new Error('This gets logged in nastly logger'));
nastyLogger.debug('This will not be logged in nasty logger');

const sleekLogger = log4js.getLogger('sleek');
sleekLogger.info('This will be logged in sleek logger');
sleekLogger.debug('This will not be logged in sleek logger');

const tracerLogger = log4js.getLogger('tracer');
tracerLogger.info('This will be logged in tracer logger');
tracerLogger.debug('This will also be logged in tracer logger');

Upvotes: 6

anehme
anehme

Reputation: 566

Use the MultiFile Appender to dynamically write logs to multiple files , Your log4js config would look something like this :

  appenders: { integra: {  type: 'multiFile', base: 'logs/', property: 'prop', extension: '.log'} },

where :

  1. base : the base part of the generated log filename
  2. property : the value to use to split files
  3. extension : the suffix for the generated log filename.

And here is an Example used for creating log file for each user :

const log4js = require('log4js');
const uuidv1 = require('uuid/v1'); //used for generating random string

log4js.configure({
    appenders: {
      everything: {
        type: 'multiFile', base: 'logs/', property: 'userID', extension: '.log'
      }
    },
    categories: {
      default: { appenders: [ 'everything' ], level: 'debug'}
    }
  });

  const userLogger = log4js.getLogger('user');

    userLogger.addContext('userID', uuidv1()); 
    userLogger.info('New file created');
    userLogger.addContext('userID', uuidv1());
    userLogger.info('New file created');

Upvotes: 2

Related Questions