Skip to content
This repository was archived by the owner on May 14, 2024. It is now read-only.

Commit 2120ba1

Browse files
authored
Merge pull request #399 from jsumners/no-bunyan
Remove dependency on Bunyan
2 parents 365365c + 2e2a078 commit 2120ba1

File tree

9 files changed

+54
-53
lines changed

9 files changed

+54
-53
lines changed

docs/client.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,25 @@ client is:
2626
|---------------|-----------------------------------------------------------|
2727
|url |A valid LDAP URL (proto/host/port only) |
2828
|socketPath |Socket path if using AF\_UNIX sockets |
29-
|log |Bunyan logger instance (Default: built-in instance) |
29+
|log |A compatible logger instance (Default: no-op logger) |
3030
|timeout |Milliseconds client should let operations live for before timing out (Default: Infinity)|
3131
|connectTimeout |Milliseconds client should wait before timing out on TCP connections (Default: OS default)|
3232
|tlsOptions |Additional options passed to TLS connection layer when connecting via `ldaps://` (See: The TLS docs for node.js)|
3333
|idleTimeout |Milliseconds after last activity before client emits idle event|
3434
|strictDN |Force strict DN parsing for client methods (Default is true)|
3535

36+
### Note On Logger
37+
38+
A passed in logger is expected to conform to the [Bunyan](https://www.npmjs.com/package/bunyan)
39+
API. Specifically, the logger is expected to have a `child()` method. If a logger
40+
is supplied that does not have such a method, then a shim version is added
41+
that merely returns the passed in logger.
42+
43+
Known compatible loggers are:
44+
45+
+ [Bunyan](https://www.npmjs.com/package/bunyan)
46+
+ [Pino](https://www.npmjs.com/package/pino)
47+
3648
## Connection management
3749

3850
As LDAP is a stateful protocol (as opposed to HTTP), having connections torn

docs/server.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,22 @@ The code to create a new server looks like:
1616

1717
The full list of options is:
1818

19-
||log||You can optionally pass in a bunyan instance the client will use to acquire a logger.||
19+
||log||You can optionally pass in a Bunyan compatible logger instance the client will use to acquire a child logger.||
2020
||certificate||A PEM-encoded X.509 certificate; will cause this server to run in TLS mode.||
2121
||key||A PEM-encoded private key that corresponds to _certificate_ for SSL.||
2222

23+
### Note On Logger
24+
25+
The passed in logger is expected to conform to the Log4j standard API.
26+
Internally, [abstract-logging](https://www.npmjs.com/packages/abstract-logging) is
27+
used to implement the interface. As a result, no log messages will be generated
28+
unless an external logger is supplied.
29+
30+
Known compatible loggers are:
31+
32+
+ [Bunyan](https://www.npmjs.com/package/bunyan)
33+
+ [Pino](https://www.npmjs.com/package/pino)
34+
2335
## Properties on the server object
2436

2537
### maxConnections

lib/client/index.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,10 @@
11
// Copyright 2012 Mark Cavage, Inc. All rights reserved.
22

3-
var assert = require('assert');
4-
5-
var Logger = require('bunyan');
3+
var logger = Object.create(require('abstract-logging'));
64

75
var Client = require('./client');
86

97

10-
///--- Globals
11-
12-
var DEF_LOG = new Logger({
13-
name: 'ldapjs',
14-
component: 'client',
15-
stream: process.stderr,
16-
serializers: Logger.stdSerializers
17-
});
18-
198

209
///--- Functions
2110

@@ -47,7 +36,9 @@ module.exports = {
4736
if (!xor(options.url, options.socketPath))
4837
throw new TypeError('options.url ^ options.socketPath (String) required');
4938
if (!options.log)
50-
options.log = DEF_LOG;
39+
options.log = logger;
40+
if (!options.log.child)
41+
options.log.child = function () { return options.log; }
5142
if (typeof (options.log) !== 'object')
5243
throw new TypeError('options.log must be an object');
5344

lib/index.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
22

3-
var Logger = require('bunyan');
3+
var logger = Object.create(require('abstract-logging'));
44

55
var client = require('./client');
66
var Attribute = require('./attribute');
77
var Change = require('./change');
88
var Protocol = require('./protocol');
99
var Server = require('./server');
1010

11-
var assert = require('assert');
1211
var controls = require('./controls');
1312
var persistentSearch = require('./persistent_search');
1413
var dn = require('./dn');
@@ -33,11 +32,7 @@ module.exports = {
3332
throw new TypeError('options (object) required');
3433

3534
if (!options.log) {
36-
options.log = new Logger({
37-
name: 'ldapjs',
38-
component: 'client',
39-
stream: process.stderr
40-
});
35+
options.log = logger;
4136
}
4237

4338
return new Server(options);

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
"node": ">=0.10"
3030
},
3131
"dependencies": {
32+
"abstract-logging": "^1.0.0",
3233
"asn1": "0.2.3",
3334
"assert-plus": "^1.0.0",
34-
"bunyan": "^1.8.3",
35-
"dashdash": "^1.14.0",
3635
"backoff": "^2.5.0",
3736
"ldap-filter": "^0.2.2",
37+
"dashdash": "^1.14.0",
3838
"once": "^1.4.0",
3939
"vasync": "^1.6.4",
4040
"verror": "^1.8.1"
@@ -49,7 +49,7 @@
4949
"tape": "^4.6.2"
5050
},
5151
"scripts": {
52-
"report": "./node_modules/.bin/istanbul report html && open ./coverage/lcov-report/index.html",
53-
"test": "./node_modules/.bin/istanbul cover --print none test/test.js | ./node_modules/.bin/faucet"
52+
"report": "./node_modules/.bin/istanbul report html && open ./coverage/lcov-report/index.html",
53+
"test": "./node_modules/.bin/istanbul cover --print none test/test.js | ./node_modules/.bin/faucet"
5454
}
5555
}

test/client.test.js

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
22

3-
var Logger = require('bunyan');
3+
var logger = Object.create(require('abstract-logging'));
44

55
var test = require('tape').test;
66
var uuid = require('node-uuid');
@@ -16,14 +16,6 @@ var SOCKET = '/tmp/.' + uuid();
1616

1717
var SUFFIX = 'dc=test';
1818

19-
var LOG = new Logger({
20-
name: 'ldapjs_unit_test',
21-
stream: process.stderr,
22-
level: (process.env.LOG_LEVEL || 'info'),
23-
serializers: Logger.stdSerializers,
24-
src: true
25-
});
26-
2719
var ldap;
2820
var Attribute;
2921
var Change;
@@ -288,7 +280,7 @@ test('setup', function (t) {
288280
client = ldap.createClient({
289281
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
290282
socketPath: SOCKET,
291-
log: LOG
283+
log: logger
292284
});
293285
t.ok(client);
294286
t.end();
@@ -338,7 +330,7 @@ test('auto-bind bad credentials', function (t) {
338330
socketPath: SOCKET,
339331
bindDN: BIND_DN,
340332
bindCredentials: 'totallybogus',
341-
log: LOG
333+
log: logger
342334
});
343335
clt.once('error', function (err) {
344336
t.equal(err.code, ldap.LDAP_INVALID_CREDENTIALS);
@@ -353,7 +345,7 @@ test('auto-bind success', function (t) {
353345
socketPath: SOCKET,
354346
bindDN: BIND_DN,
355347
bindCredentials: BIND_PW,
356-
log: LOG
348+
log: logger
357349
});
358350
clt.once('connect', function () {
359351
t.ok(clt);
@@ -978,7 +970,7 @@ test('setup action', function (t) {
978970
var setupClient = ldap.createClient({
979971
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
980972
socketPath: SOCKET,
981-
log: LOG
973+
log: logger
982974
});
983975
setupClient.on('setup', function (clt, cb) {
984976
clt.bind(BIND_DN, BIND_PW, function (err, res) {
@@ -1002,7 +994,7 @@ test('setup reconnect', function (t) {
1002994
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
1003995
socketPath: SOCKET,
1004996
reconnect: true,
1005-
log: LOG
997+
log: logger
1006998
});
1007999
rClient.on('setup', function (clt, cb) {
10081000
clt.bind(BIND_DN, BIND_PW, function (err, res) {
@@ -1059,7 +1051,7 @@ test('setup abort', function (t) {
10591051
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
10601052
socketPath: SOCKET,
10611053
reconnect: true,
1062-
log: LOG
1054+
log: logger
10631055
});
10641056
var message = 'It\'s a trap!';
10651057
setupClient.on('setup', function (clt, cb) {
@@ -1081,7 +1073,7 @@ test('abort reconnect', function (t) {
10811073
connectTimeout: parseInt(process.env.LDAP_CONNECT_TIMEOUT || 0, 10),
10821074
socketPath: '/dev/null',
10831075
reconnect: true,
1084-
log: LOG
1076+
log: logger
10851077
});
10861078
var retryCount = 0;
10871079
abortClient.on('connectError', function () {
@@ -1109,7 +1101,7 @@ test('reconnect max retries', function (t) {
11091101
initialDelay: 10,
11101102
maxDelay: 100
11111103
},
1112-
log: LOG
1104+
log: logger
11131105
});
11141106
var count = 0;
11151107
rClient.on('connectError', function () {
@@ -1127,7 +1119,7 @@ test('reconnect on server close', function (t) {
11271119
var clt = ldap.createClient({
11281120
socketPath: SOCKET,
11291121
reconnect: true,
1130-
log: LOG
1122+
log: logger
11311123
});
11321124
clt.on('setup', function (sclt, cb) {
11331125
sclt.bind(BIND_DN, BIND_PW, function (err, res) {
@@ -1153,7 +1145,7 @@ test('no auto-reconnect on unbind', function (t) {
11531145
var clt = ldap.createClient({
11541146
socketPath: SOCKET,
11551147
reconnect: true,
1156-
log: LOG
1148+
log: logger
11571149
});
11581150
clt.on('setup', function (sclt, cb) {
11591151
sclt.bind(BIND_DN, BIND_PW, function (err, res) {

test/messages/del_request.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
var asn1 = require('asn1');
5-
var Logger = require('bunyan');
5+
var logger = Object.create(require('abstract-logging'));
66
var test = require('tape').test;
77

88

@@ -45,7 +45,7 @@ test('parse', function (t) {
4545
ber.writeString('cn=test', 0x4a);
4646

4747
var req = new DeleteRequest({
48-
log: new Logger({name: 'del_request.test.js'})
48+
log: logger
4949
});
5050
var reader = new BerReader(ber.buffer);
5151
reader.readSequence(0x4a);

test/messages/parser.test.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
// Copyright 2014 Joyent, Inc. All rights reserved.
22

33
var test = require('tape').test;
4-
var bunyan = require('bunyan');
4+
var logger = Object.create(require('abstract-logging'));
55

66
///--- Globals
77

88
var lib;
99
var Parser;
10-
var LOG = bunyan.createLogger({name: 'ldapjs-test'});
1110

1211
///--- Tests
1312
test('load library', function (t) {
@@ -19,7 +18,7 @@ test('load library', function (t) {
1918
});
2019

2120
test('wrong protocol error', function (t) {
22-
var p = new Parser({log: LOG});
21+
var p = new Parser({log: logger});
2322

2423
p.once('error', function (err) {
2524
t.ok(err);
@@ -31,7 +30,7 @@ test('wrong protocol error', function (t) {
3130
});
3231

3332
test('bad protocol op', function (t) {
34-
var p = new Parser({log: LOG});
33+
var p = new Parser({log: logger});
3534
var message = new lib.LDAPMessage({
3635
protocolOp: 254 // bogus (at least today)
3736
});
@@ -44,7 +43,7 @@ test('bad protocol op', function (t) {
4443
});
4544

4645
test('bad message structure', function (t) {
47-
var p = new Parser({log: LOG});
46+
var p = new Parser({log: logger});
4847

4948
// message with bogus structure
5049
var message = new lib.LDAPMessage({

test/server.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright 2011 Mark Cavage, Inc. All rights reserved.
22

3-
var Logger = require('bunyan');
3+
var logger = Object.create(require('abstract-logging'));
44

55
var test = require('tape').test;
66
var uuid = require('node-uuid');

0 commit comments

Comments
 (0)