由于egg的logger、config等对象都是绑定在app或者ctx上的, 在某些非请求上下文环境中的代码,如果想使用logger、config等对象,有没有什么比较优雅的方式。 例如:
某些utils类中需要打日志 在封装的request方法中,需要获得config中配置的一些url Proposal目前的方式是通过在app启动时候,获得app中的对象,存到到某个类静态对象的方式。感觉怪怪的。例如:
import { Logger } from 'egg-logger';
class ContextHelper {
// logger
private static logger: Logger;
// ... other context obj
public static setLogger(logger: Logger) {
this.logger = logger;
}
public static getLogger() {
return this.logger;
}
}
export default ContextHelper;
configDidLoad() {
// Config, plugin files have loaded.
ContextHelper.setLogger(this.app.logger);
}
使用:
import ContextHelper from '../utils/contextHelper';
...
ContextHelper.getLogger().info('')
...
Additional context
egg官方有计划提供类似的插件嘛。可以实现类似于这种的使用方式,可以在任何地方获得对象。
import { Logger, Config } from 'egg-xxx';