kostenloser Webspace werbefrei: lima-city


Javascript Zeilennummer eines Aufrufs ermitteln

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    w3j

    w3j hat kostenlosen Webspace.

    Hallo Comunity,

    ich habe Probleme dabei bei meinem Logging script die Datei und Zeilennummer zu bekommen.

    Momentan funktioniert es mit Error.captureStackTrace aber irgendwie funktionirt es mit dem auslesen des Objekts nicht.

    Auserdem währe es schön wenn man nicht beim log.info() das Stack mitgeben muss sondern nur den text und den Stack erst in den utils ermitteln könnte aber es trotzdem die Zeilennummer vom aufruf ausgibt.

    Ich hoffe ihr versteht was ich meine und mir helfen könnt.

    Danke


    var log = {
    output: 'html'
    , debug: function (text, at) {
    this.utils.addLine('debug', at, text);
    }
    , info: function (text, at) {
    this.utils.addLine('info ', at, text);
    }
    , warn: function (text, at) {
    this.utils.addLine('warn ', at, text);
    }
    , error: function (text, at) {
    this.utils.addLine('error', at, text);
    }
    , fatal: function (text, at) {
    this.utils.addLine('fatal', at, text);
    }
    , utils: {
    addLine: function (level, at, text) {
    var output = '[' + this.getTime() + '] [' + level + '] [' + at + '] ' + text;
    window.scrollBy(0,100000);
    if (log.output == 'html')
    document.getElementById('log').innerHTML += '<div>' + output + '</div>';
    else if (log.output == 'console')
    console.log(output);
    }
    , getTime: function () {
    var date = new Date;
    return date.getFullYear() + '-' + this.add0(date.getMonth()+1) + '-' + this.add0(date.getDate())
     + ' ' + this.add0(date.getHours()) + ':' + this.add0(date.getMinutes()) + ':' + this.add0(date.getSeconds())
     + '.' + this.add0(date.getMilliseconds(), 3);
    }
    , add0: function (num, toLength){
    if(typeof toLength === 'undefined')
    var toLength = 2;
    while(num.toString().length < toLength){
    num = '0' + num;
    }
    return num;
    }
    
    
    , getLocation: function () {
    var obj = {};
    Error.captureStackTrace(obj, this.getLocation);
    var errorStack = obj.stack;
    //getFileName
    //getLineNumber
    return errorStack;
    }
    
    
    }
    }



    log.debug('bla', log.utils.getLocation());
    log.info('bla2', log.utils.getLocation());
    =>
    [2015-10-18 18:08:02.033] [debug] [[object Object] at http://127.0.0.1/script.js:153:28] bla
    [2015-10-18 18:08:02.039] [info ] [[object Object] at http://127.0.0.1/script.js:154:28] bla2

    soll dazu werden
    log.debug('bla');
    log.info('bla2');
    =>
    [2015-10-18 18:08:02.033] [debug] [script.js:153] bla
    [2015-10-18 18:08:02.039] [info ] [script.js:154] bla2
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Naja, mit einem Stack kann man schon arbeiten, du kannst ihn auch erst im Log generieren:

    function getStack() {
        var e = new Error();
        return e.stack.split('\n');
    }

    Dadurch hast du ein Array, welches im Index 0 den Typ des Errors enthält (Error) und danach dann den vollständigen Stack, samt alle aufrufe. Wenn du dir die Entries dann anschaust, wirst du schnell feststellen, dass man die mittels Regexp auseinandernehmen kann, und du so alle gewünschten Informationen kriegst.

    Falls du keine Lust hast das alles selbst zu machen, gibt es da Leute die das bereits alles getan haben: https://github.com/stacktracejs/stacktrace.js
    Mit dieser Microlibrary kriegst du zu jedem Zeitpunkt den Callstack raus, und das in einer super einfach zu nutzenden Form. Du kannst also auch hier prüfen, wo das log.debug her aufgerufen wurde.

    Liebe Grüße
  4. Autor dieses Themas

    w3j

    w3j hat kostenlosen Webspace.

    Danke, ist eine einfache gute Lösung
    Funktioniert super :)
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!