Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 443
TechChain Avatar asked Sep 21 '19 07:09

TechChain


2 Answers

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');
like image 55
Sohail Avatar answered Nov 14 '22 07:11

Sohail


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');
like image 31
anehme Avatar answered Nov 14 '22 07:11

anehme