Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

99
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda