如何将 bunyan 日志记录函数绑定到 ES6 中的 class 函数?
How do I bind a bunyan logging function to a class function in ES6?
今天纠结这个,还是报错。 Docs here. 我最接近的是:
constructor(region, sslEnabled = true,
logger = () => {}, errorLogger = () => {}) {
if (region === undefined || !region)
throw new Error("Initialization error: region is required");
this.log = () => {}; // these two lines might be unnecessary
this.logError = () => {}; //
this.log = logger.bind(this);
this.logError = errorLogger.bind(this);
this.region = region;
this.sslEnabled = sslEnabled;
}
在 class 的其他地方,我发送了一个 bunyan 记录器的函数:
const tools = new Tools(
config.region,
config.ssl,
logger.debug,
logger.error
);
记录器仅使用控制台输出。如果我通过 console.log
和 console.error
则此方法有效,但如果我通过 Bunyan 记录器则失败:
bunyan usage error: /usr/src/app/src/healthcheck.js:47:
attempt to log with an unbound log method: `this` is: TTools {
log: [Function: bound ],
logError: [Function: bound ],
region: 'us-west-2',
sslEnabled: false }
关于此问题有一个 github 问题,但并没有真正说明如何解决它。如何将像 logger.error
这样的 bunyan 记录器函数传递给另一个对象?这可能吗?
如果未绑定的对象方法被期望绑定到它们的上下文,则永远不应将它们作为回调传递。可以将 console
方法作为回调传递,因为它们在 大多数 现代实现中绑定到 console
,但这绝不应该暗示在跨平台代码中。
console
方法已绑定到 Node.js 中的 console
,无需额外措施即可作为回调安全传递。
对于其他方法,应该是:
const tools = new Tools(
config.region,
config.ssl,
logger.debug.bind(logger),
logger.error.bind(logger)
);
如果它抱怨 this
那是因为当您发送 logger.debug
函数时 this
上下文丢失了。
使用 ES6 粗箭头函数解决这个问题。
const tools = new Tools(
config.region,
config.ssl,
x => logger.debug(x),
x => logger.error(x)
);
今天纠结这个,还是报错。 Docs here. 我最接近的是:
constructor(region, sslEnabled = true,
logger = () => {}, errorLogger = () => {}) {
if (region === undefined || !region)
throw new Error("Initialization error: region is required");
this.log = () => {}; // these two lines might be unnecessary
this.logError = () => {}; //
this.log = logger.bind(this);
this.logError = errorLogger.bind(this);
this.region = region;
this.sslEnabled = sslEnabled;
}
在 class 的其他地方,我发送了一个 bunyan 记录器的函数:
const tools = new Tools(
config.region,
config.ssl,
logger.debug,
logger.error
);
记录器仅使用控制台输出。如果我通过 console.log
和 console.error
则此方法有效,但如果我通过 Bunyan 记录器则失败:
bunyan usage error: /usr/src/app/src/healthcheck.js:47:
attempt to log with an unbound log method: `this` is: TTools {
log: [Function: bound ],
logError: [Function: bound ],
region: 'us-west-2',
sslEnabled: false }
关于此问题有一个 github 问题,但并没有真正说明如何解决它。如何将像 logger.error
这样的 bunyan 记录器函数传递给另一个对象?这可能吗?
如果未绑定的对象方法被期望绑定到它们的上下文,则永远不应将它们作为回调传递。可以将 console
方法作为回调传递,因为它们在 大多数 现代实现中绑定到 console
,但这绝不应该暗示在跨平台代码中。
console
方法已绑定到 Node.js 中的 console
,无需额外措施即可作为回调安全传递。
对于其他方法,应该是:
const tools = new Tools(
config.region,
config.ssl,
logger.debug.bind(logger),
logger.error.bind(logger)
);
如果它抱怨 this
那是因为当您发送 logger.debug
函数时 this
上下文丢失了。
使用 ES6 粗箭头函数解决这个问题。
const tools = new Tools(
config.region,
config.ssl,
x => logger.debug(x),
x => logger.error(x)
);