Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

102
Vistas
automatizar/anular/extender el prefijo en console.log para la depuración

¿Alguien tiene una buena solución para extender console.log para que imprima automáticamente el nombre y el método de la clase como prefijo? Estoy usando componentes web y el uso estricto está activado.

 someFunction() { let varA = "hello" console.log(this.constructor.name, "someFunction", {varA}) }

Me gustaría automatizar esta parte: this.constructor.name, "someFunction", ...

arguments.callee.name imprimirá el nombre de la función, pero ya no funciona con el modo estricto activado. Ampliación de console.log en una ubicación centralizada a través de:

 export var log = function(){ var args = Array.prototype.slice.call(arguments); args.unshift(this.constructor.name + ": "); console.log.apply(console, args); }

no funciona porque this.constructor.name no imprime el contexto correcto y si no está en un componente web, no funciona en absoluto.
Extender console.log en cada componente web anula el propósito (o la mitad). Podría doblar una función que extienda console.log en la compilación para cada componente web, pero aún tendría el problema de no poder llamar a arguments.callee. Usando lit-element, pero este es un problema nativo de javascript.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

console.trace() puede ser útil aquí, en lugar de un método de consola personalizado. O use la nueva propiedad .stack de new Error() .

 class A { b() { return function c() { return function d() { return (function e() { return new Error().stack; })(); } } } } console.log("here's the stack:\n", new A().b()()());

about 4 years ago · Juan Pablo Isaza Denunciar

0

Entonces, según la respuesta de sean-7777, supongo que podríamos dividir la salida de la pila de esta manera:

 let funcname = new Error().stack.split('\n')[1]; funcname=funcname.slice(funcname.indexOf("at ")+3, funcname.indexOf(" (")); console.log(debugline, 'debug text');

Si lo coloca en una función de ayuda, podría tomar el índice de línea 2 (ya que el índice 1 le daría el nombre de la función de ayuda).

Esperaba algo un poco más sencillo, pero piratear la salida funciona.

ACTUALIZAR:

 export function prtfun() { let debugline = new Error().stack.split('\n')[2]; return debugline.slice(debugline.indexOf("at ")+3, debugline.indexOf(" (")); }

llámelo desde cualquier lugar como este: console.log(prtfun(), 'log text...');

e imprimirá el texto de registro ClassName.FunctionName...

Funciona genial. Sin embargo, deshabilitaría esto en producción.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda