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-baseis installed- Note: Do not forget
\r\nat 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();