Javascript Zeilennummer eines Aufrufs ermitteln
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
arbeiten
aufruf
auslese
code
dank
date
datei
ermitteln
feststelle
helfen
http
index
info
information
level
log
output
text
typ
url
-
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
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Danke, ist eine einfache gute Lösung
Funktioniert super :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage