Je vous recommande également les log4javascript et d'expliquer comment vous pouvez toujours conserver les informations sur l'imprimé de nom de fichier et la ligne, au moins dans google Chrome.
Je ne parle pas de changer le nom du fichier et la ligne imprimée par Chrome, mais vous pouvez obtenir l'information qui vous intéresse et les ajouter à l'instruction de journal.
Ma solution a été rapidement un hack mais je pense qu'avec un peu plus de travail, vous pouvez obtenir bien formaté journal des états.
Il a probablement aussi une lourde les performances de l'impact, mais puisque vous ne pouvez pas laisser vos journaux activé dans la production, cela ne devrait pas être trop un problème.
Le Concept
Dans Chrome, vous pouvez créer un objet d'Erreur qui fournit une propriété de pile qui vous montre votre pile actuel emplacement et quelque part dans la pile de chaîne, vous trouverez le fichier et le numéro de ligne de votre script d'appel.
> new Error().stack
"Error
at eval at <anonymous> (eval at evaluate (unknown source))
at eval at evaluate (unknown source)
at FrameMirror.evaluate (native)
at Object.evaluate (unknown source)
at Object._evaluateOn (unknown source)
at Object._evaluateAndWrap (unknown source)
at Object.evaluateOnCallFrame (unknown source)
at meinAjaxAufruf (http://localhost:8080/numberajax.js:21:9)
at HTMLInputElement.onkeyup (http://localhost:8080/numberajax.html:15:188)"
Pour un log4javascript appel de la trace de la pile pourrait ressembler à quelque chose comme ceci:
"Error
at Object.append (http://localhost:8080/log4javascript_uncompressed.js:1921:17)
at Object.doAppend (http://localhost:8080/log4javascript_uncompressed.js:1047:9)
at Object.callAppenders (http://localhost:8080/log4javascript_uncompressed.js:647:27)
at Object.log (http://localhost:8080/log4javascript_uncompressed.js:640:10)
at Object.debug (http://localhost:8080/log4javascript_uncompressed.js:748:9)
at meinAjaxAufruf (http://localhost:8080/numberajax.js:36:16)
at HTMLInputElement.onkeyup (http://localhost:8080/numberajax.html:16:188)"
Et le fichier et la ligne qui a fait le log4javascript appel et que je me suis intéressé en est
at meinAjaxAufruf (http://localhost:8080/numberajax.js:36:16)
La Solution
Je suppose que la pile de la profondeur à partir du script de votre intérêt pour le vrai console
appel arrive, c'est toujours la même. Alors maintenant, vous avez simplement à savoir où l' BrowserConsoleAppender
fait son window.console
d'accès et d'ajouter la ligne qui vous intéresse pour la chaîne formatée. J'ai fait les modifications suivantes à l' log4javascript_uncompressed.js
(version 1.4.2 ligne 1913):
} else if (window.console && window.console.log) { // Safari and Firebug
var formattedMesage = getFormattedMessage();
//---my additions
var isChrome = navigator.userAgent.indexOf("Chrome") !== -1;
if(isChrome){
var stack = new Error().stack;
var lineAccessingLogger = stack.split("\n")[6];
formattedMesage += "\n" + lineAccessingLogger;
}
//---
// Log to Firebug using its logging methods or revert to the console.log
// method in Safari
if (window.console.debug && Level.DEBUG.isGreaterOrEqual(loggingEvent.level)) {
window.console.debug(formattedMesage);
} else if (window.console.info && Level.INFO.equals(loggingEvent.level)) {
...
Maintenant, au lieu de
17:53:22,872 DEBUG - sending /NumberServlet?zahl=1&text=
log4javascript.js:154
Je reçois
17:55:53,008 DEBUG - sending /NumberServlet?zahl=1&text=
at meinAjaxAufruf (http://localhost:8080/numberajax.js:36:16) log4javascript_uncompressed.js:1930
Il n'en est pas une solution sympa :), mais j'ai ce dont j'ai besoin.
Avec un peu plus de connaissances sur le cadre je suppose que l'on pouvait changer le PatternLayout dans une manière que vous pouvez définir le mode d'impression le nom/l'emplacement et le numéro de ligne.
modifier la Place de mon avant la solution que j'ai apporté quelques modifications à la PatternLayout.le prototype.fonction format, alors maintenant, je peux utiliser l'option additionnelle %l pour définir où et comment je veux en sortie le fichier appelant et sa ligne. J'ai publié mes changements et un exemple d'utilisation d'un Essentiel.