diff --git a/example/example_async.js b/example/example_async.js new file mode 100644 index 0000000..d55edab --- /dev/null +++ b/example/example_async.js @@ -0,0 +1,33 @@ +"use strict"; + +let process = require('process'); +let SeqLogger = require('../seq_logger'); + +let seq = new SeqLogger({ serverUrl: 'http://localhost:5341', onRemoteConfigChange: (config) => { + console.log(config); +}}); + +sayHello(100) + .then(() => seq.close()); + +async function sayHello(times) { + for(let n = 0; n <= times; n++){ + await new Promise((accept) => setTimeout(accept, 1 * 1000)); // Waits 1 second before each round + + console.log('Round ', n); + seq.emit({ + timestamp: new Date(), + level: 'Information', + messageTemplate: 'Hello for the {n}th time, {user}!', + properties: { + user: process.env.USERNAME, + n: n + } + }); + + if (n % 5 == 0) { // Flush every 5 events + seq.flush(); + } + } +} + diff --git a/index.d.ts b/index.d.ts index 1626415..cdc487f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -6,10 +6,15 @@ export interface SeqLoggerConfig { batchSizeLimit?: number; requestTimeout?: number; onError: (e: Error) => void; + onRemoteConfigChange?: (remoteConfig: RemoteConfig) => void; } export type SeqLogLevel = 'Verbose' | 'Debug' | 'Information' | 'Warning' | 'Error' | 'Fatal'; +export interface RemoteConfig{ + MinimumLevelAccepted: SeqLogLevel | null +} + export interface SeqEvent { timestamp: Date; level?: SeqLogLevel; diff --git a/seq_logger.js b/seq_logger.js index f0b4025..2c53b73 100644 --- a/seq_logger.js +++ b/seq_logger.js @@ -45,6 +45,8 @@ class SeqLogger { this._timer = null; this._closed = false; this._activeShipper = null; + this._onRemoteConfigChange = cfg.onRemoteConfigChange || null; + this._lastRemoteConfig = null; } // Flush events queued at the time of the call, and wait for pending writes to complete @@ -269,7 +271,15 @@ class SeqLogger { httpErr = 'HTTP log shipping failed: ' + res.statusCode; } - res.on('data', () => {}); + res.on('data', (buffer) => { + let dataRaw = buffer.toString(); + + if(this._onRemoteConfigChange && this._lastRemoteConfig !== dataRaw){ + this._lastRemoteConfig = dataRaw; + this._onRemoteConfigChange(JSON.parse(dataRaw)); + } + }); + res.on('error', e => { reject(e); });