我正在我的Ember应用程序中实现远程日志记录功能,我希望将发送到日志控制台的所有内容推送到远程日志记录服务(例如Loggly)。
我相信我需要做的是覆盖Ember.Logger
的方法来将日志输出重定向到远程日志服务,但我无法弄清楚如何做到这一点。
Ember.Logger
的{{3}}只是声明:
覆盖它以提供更强大的日志记录功能。
如何“覆盖此”?我尝试过Ember.Logger.reopenClass()
并且抱怨Ember.Logger.reopenClass is not a function
。
我会在哪里这样做?在初始化程序中?在服务?其他
答案 0 :(得分:4)
Ember.Logger
不是Ember类。它只是一个带有一些方法的对象。
您可以通过类似
的方式覆盖它Ember.Logger.log = function(...
你可以把它放在任何你想要的地方。我可以把它放在app.js
的顶部。
答案 1 :(得分:1)
扩展并更新@ user663031响应...
截至2017年11月,Ember.Logger
的状态正在播出。它未包含在Ember's module API中,并且还没有针对未来的RFC。
可以直接使用调试实用程序,例如ember-debug-logger,并将这些原型与Ember.Logger
分开。
但是,我选择直接覆盖Ember.Logger
,因为它允许我包含我喜欢的任何日志记录工具(而不是debug util),而不必修改分散在整个代码中的日志语句。
当我在后端使用bunyan时,选择使用browser-bunyan进行记录,其中info
,warn
,error
与Ember.Logger
相同。
YMMV,但这是对我有用的最小例子......
// app/app.js
import LOG from './logger-bunyan';
if (config.APP.LOG_BUNYAN) {
Ember.Logger = LOG;
}
// app/logger-bunyan.js
import bunyan from 'npm:browser-bunyan';
const LOG = bunyan.createLogger({
name: 'emberApplication',
});
export default LOG;
// config/environment.js
if (environment === 'development') {
ENV.APP.LOG_BUNYAN = true;
}
// app/component/WhereIWantToLog.js
Logger.warn('bunyan logged warning message')