Skip to content

Commit eda40ef

Browse files
authoredJul 10, 2023
Export Logger class (#2181)
* export Logger class * Add semicolon and a couple of tests * Update index.d.ts * Update README.md * refactor: 🔥 dead code * revert: not so dead code
1 parent f7e7f2f commit eda40ef

File tree

5 files changed

+30
-23
lines changed

5 files changed

+30
-23
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ const logger = winston.createLogger({
226226

227227
const childLogger = logger.child({ requestId: '451' });
228228
```
229+
> `.child` is likely to be bugged if you're also extending the `Logger` class, due to some implementation details that make `this` keyword to point to unexpected things. Use with caution.
229230
230231
### Streams, `objectMode`, and `info` objects
231232

‎index.d.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,10 @@ declare namespace winston {
121121
defaultMeta?: any;
122122

123123
log: LogMethod;
124-
add(transport: Transport): Logger;
125-
remove(transport: Transport): Logger;
126-
clear(): Logger;
127-
close(): Logger;
124+
add(transport: Transport): this;
125+
remove(transport: Transport): this;
126+
clear(): this;
127+
close(): this;
128128

129129
// for cli and npm levels
130130
error: LeveledLogMethod;
@@ -153,11 +153,11 @@ declare namespace winston {
153153
stream(options?: any): NodeJS.ReadableStream;
154154

155155
startTimer(): Profiler;
156-
profile(id: string | number, meta?: Record<string, any>): Logger;
156+
profile(id: string | number, meta?: Record<string, any>): this;
157157

158158
configure(options: LoggerOptions): void;
159159

160-
child(options: Object): Logger;
160+
child(options: Object): this;
161161

162162
isLevelEnabled(level: string): boolean;
163163
isErrorEnabled(): boolean;

‎lib/winston.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ exports.format = logform.format;
4040
* @type {function}
4141
*/
4242
exports.createLogger = require('./winston/create-logger');
43+
/**
44+
* Expose core Logging-related prototypes.
45+
* @type {function}
46+
*/
47+
exports.Logger = require('./winston/logger');
4348
/**
4449
* Expose core Logging-related prototypes.
4550
* @type {Object}
@@ -172,5 +177,4 @@ warn.forFunctions(exports, 'deprecated', [
172177
'extend'
173178
]);
174179
warn.forProperties(exports, 'deprecated', ['emitErrs', 'levelLength']);
175-
// Throw a useful error when users attempt to run `new winston.Logger`.
176-
warn.moved(exports, 'createLogger', 'Logger');
180+

‎lib/winston/common.js

-15
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,6 @@ exports.warn = {
3434
obj[prop] = exports.warn[type](prop);
3535
});
3636
},
37-
moved(obj, movedTo, prop) {
38-
function movedNotice() {
39-
return () => {
40-
throw new Error([
41-
format('winston.%s was moved in winston@3.0.0.', prop),
42-
format('Use a winston.%s instead.', movedTo)
43-
].join('\n'));
44-
};
45-
}
46-
47-
Object.defineProperty(obj, prop, {
48-
get: movedNotice,
49-
set: movedNotice
50-
});
51-
},
5237
forProperties(obj, type, props) {
5338
props.forEach(prop => {
5439
const notice = exports.warn[type](prop);

‎test/integration/logger.test.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const assume = require('assume');
2+
const winston = require('../../lib/winston');
3+
4+
const Logger = winston.Logger;
5+
6+
describe('Logger class', () => {
7+
it('that Logger class is exported', () => {
8+
Logger === require('../../lib/winston/logger');
9+
});
10+
11+
it('can be inherited', () => {
12+
class CustomLogger extends Logger {}
13+
const instance = new CustomLogger();
14+
assume(instance).instanceOf(CustomLogger);
15+
assume(instance).instanceOf(Logger);
16+
});
17+
});

0 commit comments

Comments
 (0)
Please sign in to comment.