63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var util = require('util'),
|
||
|
winston = require('winston'),
|
||
|
Realm = require('realm');
|
||
|
|
||
|
var RealmLogger = exports.Realm = function (options) {
|
||
|
winston.Transport.call(this, options);
|
||
|
|
||
|
//
|
||
|
// Configure the Realm`
|
||
|
//
|
||
|
let LogSchema = {
|
||
|
name: 'Log',
|
||
|
properties: {
|
||
|
level: 'string',
|
||
|
message: 'string',
|
||
|
timestamp: 'date',
|
||
|
}
|
||
|
};
|
||
|
|
||
|
this.realm = new Realm({
|
||
|
path: 'winston.realm',
|
||
|
schema: [LogSchema]
|
||
|
});
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Inherit from `winston.Transport` so you can take advantage
|
||
|
// of the base functionality and `.handleExceptions()`.
|
||
|
//
|
||
|
util.inherits(RealmLogger, winston.Transport);
|
||
|
|
||
|
//
|
||
|
// Expose the name of this Transport on the prototype
|
||
|
//
|
||
|
RealmLogger.prototype.name = 'realm';
|
||
|
|
||
|
//
|
||
|
// Define a getter so that `winston.transports.Realm`
|
||
|
// is available and thus backwards compatible.
|
||
|
//
|
||
|
winston.transports.Realm = RealmLogger;
|
||
|
|
||
|
//
|
||
|
// ### function log (level, msg, [meta], callback)
|
||
|
// #### @level {string} Level at which to log the message.
|
||
|
// #### @msg {string} Message to log
|
||
|
// #### @meta {Object} **Optional** Additional metadata to attach
|
||
|
// #### @callback {function} Continuation to respond to when complete.
|
||
|
// Core logging method exposed to Winston. Metadata is optional.
|
||
|
//
|
||
|
RealmLogger.prototype.log = function (level, msg, meta, callback) {
|
||
|
let ts = new Date();
|
||
|
|
||
|
this.realm.write(() => {
|
||
|
this.realm.create('Log', {level: level, message: msg, timestamp: ts});
|
||
|
});
|
||
|
|
||
|
callback(null, true);
|
||
|
};
|
||
|
|