У меня есть функция javascript, которая переопределяет функцию console.log
, которая направляет аргументы в другое место назначения. Я все еще хочу, чтобы журнал выводился в консоли браузера без изменений. Однако исходный номер строки, где первоначально вызывался console.log, не отображается, и вместо этого номер строки всегда является точкой, где вызывается apply
.
Можно ли сохранить исходный номер строки, где Консоль вызывается, и какой будет лучший подход для этого?
Приложение, которое я создаю, VueJS, поэтому я собрал пример в качестве VueJS компонента ниже. Этот пример может быть сохранен как App.vue
и протестирован с использованием vue serve
. При нажатии кнопки «Test Log» вы увидите журнал в представлении, а также в инструментах разработки вы увидите вывод журнала в консоли. Проблема заключается в том, что номер строки всегда является этой строкой o_log.apply(console, arguments)
, и мне действительно нужно, чтобы она была этой строкой console.log('in testLog()')
(т. Е. Номер строки, в которой изначально вызывался журнал консоли).
<template>
<div>
<h1>{{name}}</h1>
<button @click="testLog">Test Log</button>
<hr/>
<p v-for="(log, i) in logs" :key="i" :style="{background: log.color}" >{{log.message}}</p>
</div>
</template>
<script>
export default {
data() {
return {
name: 'Console Log Prototype',
logs: [],
}
},
methods: {
testLog() {
console.log('in testLog()')
}
},
created() {
let self = this;
var o_log = console.log
function customLog(msg) {
var entry = {color: 'pink', message: msg}
self.logs.push(entry)
o_log.apply(console, arguments)
}
console.log = customLog;
}
}
</script>