justlog , focus on logging
- coloured console logging
 - file appender, with log rotate based on time
 - configurable log message/patterns
 - different log levels for different log categories (info debug warn error )
 - can use as a connect middleware for access-log
 
npm install justlog
// simple.js
var justlog = require('justlog');
var log = justlog(); 
l.info('simple', 'info');
l.debug({a:1, b:2});
l.warn([1,2,3,4]);
l.error('name:%s, number:%d', 'somename', 123);$ node simple.jsthe stdout/stderr is as below
19:01:41 INFO  a.js:4 simple info
19:01:41 DEBUG a.js:5 {"a":1,"b":2}
19:01:41 WARN  a.js:6 1,2,3,4
19:01:41 ERROR a.js:7 name:somename, number:123and also, you can got a log file on logs/simple-%Y-%M-%D.log
2013-01-06 19:01:41 [WARN] (a.js:6) 1,2,3,4
2013-01-06 19:01:41 [ERROR] (a.js:7) name:somename, number:123var log = justlog({
  file : {level: justlog.INFO | justlog.WARN} // file log levels
  stdio : {level: justlog.DEBUG | justlog.ERROR} // stdio log levels
});available levels
- justlog.INFO
 - justlog.DEBUG
 - justlog.WARN
 - justlog.ERROR
 - justlog.ALL include all 4 level above
 - justlog.EXCEPTION include WARN and ERROR
 
var stdLog = justlog({file : false}); // not write log file, only use stdio
var fileLog = justlog({stdio : false}); // not use stdio, only write a log file
});var log = justlog({
  stdio: {
    stderr: process.stdout
  }
});// write logs into filename.log and never rotate
var log1 = justlog({
  file: {
    path : '[filename.log]'
  }
});
// write logs into filename-%Y-%M-%D.log, and rotate every days
var log2 = justlog({
  file: {
    path : '[filename]-YYYY-MM-DD[.log]'
  }
}); time format use moment string-format
rotate will be trigger when log filename changed.
var log = justlog({
  file : {
    pattern : '{fulltime} [{level}] {msg}' // use custom pattern
  }
  stdio : {
    pattern : 'simple-color' // use predefined pattern
  }
});
log.warn('log msg');{
  file : {
    level           : error | warn, // levels for filelog
    pattern         : 'file', // filelog pattern
    path            : '[logs/%main_script_name]YYYY-MM-DD[.log]', // log file path
    mode            : '0664', // log file mode
    dir_mode        : '2775', // if log dir is not exists, log dir mode when create
    _watcher_timeout : 5007,  // log file renamed watch timeout, DO NOT CHANGE THIS IF YOU REALLY KNOWN WHAT YOU DO.
  },
  stdio : {
    level   : error | warn | debug | info, // levels for stdio
    pattern : 'color', // stdio pattern
    stdout  : process.stdout, // stdout stream (for info & debug log)
    stderr  : process.stderr, // stderr stream (for warn & error log)
  }
}a connect middleware for apache-like accesslog.
middleware's has same options as normally justlog object, but has different default value
var app = connect();
app.use(justlog.middleware({}));{
  file: {
    path    : '[logs/%main_script_name-access-]YYYY-MM-DD[.log]',
    pattern : 'accesslog-rt'
  }
  stdio :
    pattern : 'accesslog-color'
}you can buffer your log if you have big visits.
var log = justlog({
  duration : 1000, // flush buffer time, default is 1000
  bufferLength : 1000 // max buffer length, default is 0
  //... other options
});or
var log = justlog.create({
  duration : 1000, // flush buffer time, default is 1000
  bufferLength : 1000 // max buffer length, default is 0
});{
  duration : 1000,
  bufferLength : 0,
  // file: ...
  // stdio : ...
}justlog.end(cb);Justlog has a powerful log line pattern support. You can use variables, objects and functions in you patterns. And you can define ansi color output patterns easily.
{var[ args...][@colors...]}
- "{variable_name}": show varaible's value.
eg. 
{remote-address} - "{object_name.prop_name}": show property value.
eg. 
{headers.accepted-encoding} - "{function_name "const1", "const2"}": show function's return value with const arguments.
eg. 
{now "YYYY-MM-DD"} - "{function_name variable_name, object_name.prop_name}": show function's return value with variable arguments.
eg. 
{color.status status-code} - "{something@color1,color2}": set output ansi color.
eg. 
{url@blue,underline} 
- msg : (all log arguments).toString()
 - level : log level text align ("INFO ", "DEBUG", "WARN ", "ERROR")
 - levelTrim : log level text without align ("INFO", "DEBUG", "WARN", "ERROR")
 - file : log triggered file path
 - lineno : log triggered code line number
 - stack : alias for "file:lineno"
 - stackColored : alias for colored stack
 - time : time format as "HH:mm:ss"
 - date : time format as "YYYY-MM-DD"
 - fulltime : time format as "YYYY-MM-DD HH:mm:ss"
 - numbertime : time format as "YYYYMMDDHHmmss"
 - mstimestamp : unix timestamp (with milliseconds)
 - timestamp : unix timestamp (with seconds)
 
- now          : now formater function. eg. 
{now "YYYY-MM-DD"} - color.status : add color for http status code. eg. 
{color.status status} - color.method : add color for http request method. eg. 
{color.method method} - color.event  : add color for event type. eg. 
{color.event event} - color.level  : add color for log level. eg. 
{color.level level} 
- simple-color: log message and colored level text
 - simple-nocolor: like simple without color
 - color: tracestack, time, log message and colored level text
 - nocolor: like color without color
 - event-color: time, log message and colored event
 - event-nocolor: like event-color without color
 - file : fulltime, tracestack, log message and level text
 - accesslog: apache access-log
 - accesslog-rt: like access-log with response-time on the end (with microsecond)
 - accesslog-color: like accesslog-rt with ansi colored
 
justlog is published under BSD license.
