Skip to content

Commit 7a025e4

Browse files
committed
add comments and find a way to make it clearer that the types are correct.
1 parent 3a80fc8 commit 7a025e4

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/logger.ts

+14-7
Original file line numberDiff line numberDiff line change
@@ -128,18 +128,25 @@ interface PrefixedLogger extends loglevel.Logger, LoggerWithLogMethod {
128128
*
129129
* @param prefix Prefix to add to each logged line. If undefined, no prefix will be added.
130130
*/
131-
function getPrefixedLogger(prefix?: string): LoggerWithLogMethod {
131+
function getPrefixedLogger(prefix?: string): PrefixedLogger {
132132
const loggerName = DEFAULT_NAMESPACE + (prefix === undefined ? "" : `-${prefix}`);
133133
const prefixLogger = loglevel.getLogger(loggerName) as PrefixedLogger;
134-
134+
// This is a save cast since export const logger is constructed with getPrefixedLogger
135+
// It is downcastet to `Logger` to minimize the public/exported api.
135136
if (prefixLogger.getChild === undefined) {
136137
// This is a new loglevel Logger which has not been turned into a PrefixedLogger yet.
137138
prefixLogger.prefix = prefix;
138139
prefixLogger.getChild = (childPrefix): Logger => {
139-
const childLogger = getPrefixedLogger((prefix ?? "") + childPrefix) as unknown as loglevel.Logger;
140-
childLogger.methodFactory = (logger as unknown as loglevel.Logger).methodFactory;
141-
childLogger.setLevel(childLogger.getLevel());
142-
return childLogger as unknown as Logger;
140+
const rootLogger = logger as PrefixedLogger;
141+
// create the new child logger
142+
const childLogger = getPrefixedLogger((prefix ?? "") + childPrefix);
143+
// assign the same methodFactory as the root logger.
144+
// this is useful if we add extensions to the root logger that modify
145+
// its methodFactory. (an example extension is: storing each log to a rageshake db)
146+
childLogger.methodFactory = rootLogger.methodFactory;
147+
// rebuild the child logger with the new methodFactory.
148+
childLogger.rebuild();
149+
return childLogger as Logger;
143150
};
144151
prefixLogger.setLevel(loglevel.levels.DEBUG, false);
145152
}
@@ -151,7 +158,7 @@ function getPrefixedLogger(prefix?: string): LoggerWithLogMethod {
151158
* Drop-in replacement for `console` using {@link https://www.npmjs.com/package/loglevel|loglevel}.
152159
* Can be tailored down to specific use cases if needed.
153160
*/
154-
export const logger = getPrefixedLogger();
161+
export const logger = getPrefixedLogger() as LoggerWithLogMethod;
155162

156163
/**
157164
* A "span" for grouping related log lines together.

0 commit comments

Comments
 (0)