如何:使用其他方法扩展Aurelia Logger

时间:2017-01-03 16:35:37

标签: javascript aurelia aurelia-framework

最重要的是我关注this example  关于实施和定制aurelia-logger。

这种方法只能正常工作。对自定义appender中现有方法的任何更改都可以正常工作。但是,如果我将CustomLogAppender.js更改为

export class CustomLogAppender {
  constructor(){}
  debug(logger, message, ...rest){
    console.debug(`DEBUG [${logger.id}] ${message}`, ...rest);
  }
  info(logger, message, ...rest){
    console.info(`INFO [${logger.id}] ${message}`, ...rest);
  }
  warn(logger, message, ...rest){
    console.warn(`WARN [${logger.id}] ${message}`, ...rest); 
  }
  error(logger, message, ...rest){
    console.error(`ERROR [${logger.id}] ${message}`, ...rest);
  }
  newMethod(logger, message, ...rest){
    //whatever
  }
}

然后logger.newMethod(“send error to backend”);在视图模型中调用时不是定义的方法。 我正在尝试编写其他日志记录方法,如果我认为有必要,可以将警告,信息,错误等发送到后端进行数据库日志记录,但是在将这些方法添加到aurelia-logger时遇到了问题。任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您关注网址中的示例,则以下行与您的相关:https://github.com/aurelia/logging/blob/21d92e79a5f924b25b1eae0648af5a7a0ab44527/src/index.js#L96-L115

正如您所看到的,它创建了一个记录器,它只有默认方法,即您返回的内容并不完全是您的记录器。您需要做的是增强现有方法(在那里,您可以使用自定义方法)。

以下面的appender为例:

import { inject } from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';
import {Logger} from 'aurelia-logging';

@inject(HttpClient)
export class ServerLogAppender {
    constructor(http) {
        this.http = http;
    }

    debug(logger, message, ...rest) {
        this.sendToServer(logger, message, ...rest);
    }

    info(logger, message,...rest){
        this.sendToServer(logger, message,...rest);
    }

    warn(logger, message,...rest){
        this.sendToServer(logger, message,...rest);
    }

    error(logger, message,...rest){
        this.sendToServer(logger, message,...rest);
    }

    sendToServer(logger, message,...rest){
        this.http.post('myerrorhandler', {
            url: window.location.href,
            source: logger.id,
            message: message,
            additional: rest.join('\r\n')
        });
    }
}

如您所见,默认方法(debug,info,warn,error)使用自定义方法sendToServer()