2017-01-03 1 views
0

Vor allem ich folgen this example bei der Implementierung und Anpassung der Aurelia-Logger.Gewusst wie: Erweitern Sie den Aurelia Logger mit zusätzlichen Methoden

Dieser Ansatz funktioniert nur einwandfrei. Alle Änderungen an den vorhandenen Methoden im benutzerdefinierten Appender funktionieren einwandfrei. Allerdings, wenn ich die CustomLogAppender.js zu

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 
    } 
} 

Dann logger.newMethod(“send error to backend”); ändern ist keine definierte Methode, wenn in einem Ansicht-Modell genannt. Ich versuche, zusätzliche Protokollierungsmethoden zu schreiben, die Warnungen, Informationen, Fehler usw. an das Backend für die Datenbankprotokollierung senden können, wenn ich es für notwendig halte, aber Probleme beim Hinzufügen dieser Methoden zum Aurelia-Logger habe. Jede Anleitung würde geschätzt werden.

Antwort

1

Wenn Sie das Beispiel aus der URL folgen, die folgenden Zeilen relevant sind für: https://github.com/aurelia/logging/blob/21d92e79a5f924b25b1eae0648af5a7a0ab44527/src/index.js#L96-L115

Wie Sie sehen können, erstellt es einen Logger, die nur die Standardmethoden hat, also das, was Sie zurückgeschickt bekommen ist nicht genau dein Logger. Was Sie tun müssen, ist die bestehenden Methoden zu verbessern (dort können Sie Ihre eigenen Methoden verwenden).

Siehe folgende appender als Beispiel:

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') 
     }); 
    } 
} 

Wie Sie sehen können, werden die Standardmethoden (debug, info, warn, error) sendToServer() die benutzerdefinierte Methode verwenden.

Verwandte Themen