Logging: To File
Store application log messages (from Client & Server) into the file. By default log-file created daily, you can easily adjust it to hourly or monthly or any other period, via fileNameFormat
.
Whenever you log message(s) on client or sever, it goes directly to log-file on your server.
Installation:
meteor add ostrio:logger # If not yet installed meteor add ostrio:loggerfile
Support this awesome package:
- Star on GitHub
- Star on Atmosphere
- Tweet
- Share on Facebook
Usage
Initialization [Isomorphic]
new LoggerFile(LoggerInstance, options)
LoggerInstance
{Logger} - fromnew Logger()
options
{Object}options.fileNameFormat
{Function} - Log file name, use to adjust file creation frequency, arguments:time
{Date}
options.format
{Function} - Log record format, arguments:time
{Date}level
{String} - 'ERROR', 'FATAL', 'WARN', 'DEBUG', 'INFO', 'TRACE'message
{String}data
{Object}userId
{String} - set if user is logged in and packageaccounts-base
is installed- Note: Do not forget
\r\n
at the end of record-line
options.path
{String} - Log's storage path, absolute, or relative to NodeJS process, note: do not use '~' (path relative to user)!
Example:
1// Initialize Logger: 2this.log = new Logger(); 3 4// Initialize LoggerFile and enable with default settings: 5(new LoggerFile(log)).enable();
Example 2:
1// Initialize Logger 2this.log = new Logger(); 3 4// Initialize LoggerFile: 5var LogFile = new LoggerFile(log, { 6 fileNameFormat: function(time) { 7 /* Create log-files hourly */ 8 return (time.getDate()) + "-" + (time.getMonth() + 1) + "-" + (time.getFullYear()) + "_" + (time.getHours()) + ".log"; 9 }, 10 format: function(time, level, message, data, userId) { 11 /* Omit Date and hours from messages */ 12 return "[" + level + "] | " + (time.getMinutes()) + ":" + (time.getSeconds()) + " | \"" + message + "\" | User: " + userId + "\r\n"; 13 }, 14 path: '/data/logs/' /* Use absolute storage path */ 15}); 16 17// Enable LoggerFile with default settings 18LogFile.enable();
Activate and set adapter settings: [Isomorphic]
1this.log = new Logger(); 2(new LoggerFile(log)).enable({ 3 enable: true, 4 filter: ['ERROR', 'FATAL', 'WARN'], /* Filters: 'ERROR', 'FATAL', 'WARN', 'DEBUG', 'INFO', 'TRACE', '*' */ 5 client: false, /* This allows to call, but not execute on Client */ 6 server: true /* Calls from client will be executed on Server */ 7});
Log message: [Isomorphic]
1this.log = new Logger(); 2(new LoggerFile(log)).enable(); 3 4/* 5 message {String} - Any text message 6 data {Object} - [optional] Any additional info as object 7 userId {String} - [optional] Current user id 8 */ 9log.info(message, data, userId); 10log.debug(message, data, userId); 11log.error(message, data, userId); 12log.fatal(message, data, userId); 13log.warn(message, data, userId); 14log.trace(message, data, userId); 15log._(message, data, userId); //--> Plain log without level 16 17/* Use with throw */ 18throw log.error(message, data, userId);
Catch-all Client's errors example: [Client]
1/* Store original window.onerror */ 2var _WoE = window.onerror; 3 4window.onerror = function(msg, url, line) { 5 log.error(msg, {file: url, onLine: line}); 6 if (_WoE) { 7 _WoE.apply(this, arguments); 8 } 9};
Use multiple logger(s) with different settings:
1this.log1 = new Logger(); 2this.log2 = new Logger(); 3 4(new LoggerFile(log1)).enable(); 5 6(new LoggerFile(log2, { 7 fileNameFormat: function(time) { 8 return (time.getDate()) + "-" + (time.getMonth() + 1) + "-" + (time.getFullYear()) + "_" + (time.getHours()) + ".log"; 9 }, 10 format: function(time, level, message, data, userId) { 11 return "[" + level + "] | " + (time.getMinutes()) + ":" + (time.getSeconds()) + " | \"" + message + "\" | User: " + userId + "\r\n"; 12 }, 13 path: '/data/logs/' 14})).enable();