JavaScript: Bagaimana cara mencetak pesan ke konsol kesalahan?

438

Bagaimana saya bisa mencetak pesan ke konsol kesalahan, lebih disukai termasuk variabel?

Misalnya, sesuatu seperti:

print('x=%d', x);
Mark Harrison
sumber
8
Konsol mana yang sedang Anda bicarakan. Konsol browser atau konsol khusus kerangka JavaScript?
Eric Schoonover

Jawaban:

470

Instal Firebug dan kemudian Anda dapat menggunakan console.log(...)dan console.debug(...), dll. (Lihat dokumentasi untuk lebih lanjut).

Dan
sumber
14
@Dan: Inspektur Web WebKit juga mendukung API FireBug console
olliej
160
mengapa ini jawaban yang diterima? dia tidak bertanya bagaimana cara menulis ke konsol pembakar, dia bertanya bagaimana menulis ke konsol kesalahan. tidak menjadi kontol atau apa pun, hanya menunjukkannya.
matt lohkamp
127
+1. Dan untuk kepentingan siapa pun yang tiba di pertanyaan ini sekarang, ada baiknya menunjukkan bahwa sejak pertanyaan itu dijawab, semua browser sekarang telah mengimplementasikan objek konsol, jadi console.log()dll harus bekerja di semua browser, termasuk IE. Namun, dalam semua kasus, Anda harus memiliki jendela debugger terbuka pada saat itu, jika tidak panggilan consoleakan menghasilkan kesalahan.
Spudley
2
@andrewjackson seperti disebutkan sebelumnya, console.log berfungsi dengan baik di semua browser modern, termasuk IE. Kode Anda masih benar-benar valid dan bermanfaat jika Anda bermaksud mendukung browser lama (dan jika Anda bekerja di situs web publik, Anda tentu harus melakukannya!), Namun kritik saya hanyalah bahwa komentar Anda menyesatkan / tidak akurat.
BrainSlugs83
1
console.debug () di sisi lain tidak ada di dalam IE. Kita dapat mengatasinya dengan: if (! Console.debug) {console.debug = function (args) {console.log (args); }}
Rovanion
319
console.error(message); //gives you the red errormessage
console.log(message); //gives the default message
console.warn(message); //gives the warn message with the exclamation mark in front of it
console.info(message); //gives an info message with an 'i' in front of the message

Anda juga dapat menambahkan CSS ke pesan logging Anda:

console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
Nicholas
sumber
10
Ini jawaban yang benar. Kata "kesalahan" bahkan tidak disebutkan dalam jawaban yang dipilih, meskipun itu dalam judul pertanyaan.
Ivan Durst
3
Sedikit tambahan tentang menambahkan CSS cukup menyenangkan. +1!
sudo make install
@ORMapper Apa yang tidak berhasil di sana? CSS yang saya asumsikan?
Nicholas
2
Saat Anda menyadari hal itu, selama bertahun-tahun menggunakan console.logAnda dapat menggunakan css di dalam konsol: |
Merah
86

Pengecualian dimasukkan ke konsol JavaScript. Anda dapat menggunakannya jika Anda ingin Firebug dinonaktifkan.

function log(msg) {
    setTimeout(function() {
        throw new Error(msg);
    }, 0);
}

Pemakaian:

log('Hello World');
log('another message');
Ivo Danihelka
sumber
8
Di beberapa browser, jika Anda telah mengaktifkan debug, ini akan memunculkan pesan pop-up.
BrainSlugs83
Bisakah Anda jelaskan mengapa throwharus dibungkus dengan setTimeout?
Antony
55

Salah satu cara yang baik untuk melakukan ini yang bekerja lintas-browser diuraikan dalam Debugging JavaScript: Membuang Peringatan Anda! .

Ian Oxley
sumber
7
throw () adalah saran yang bagus - ini harus menjadi jawaban yang dipilih.
matt lohkamp
17
Setuju, ini adalah salah satu pendekatan lintas browser. Tapi .. Bukankah melemparkan pengecualian berbeda dengan mencatat pesan?
Robin Maben
14
Di sisi lain, melempar pengecualian akan menghentikan eksekusi "utas" saat ini (seperti yang dicatat oleh Yuval A), dan melanjutkannya dalam tangkapan jika ada. Saya ragu inilah yang diinginkan.
dlaliberte
7
throw()jelas bukan cara untuk melakukan ini. Anda akan mendapat masalah cepat atau lambat. bagi saya itu lebih cepat :(
Hugo Mota
4
@ Ian_Oxley: itu turun di beberapa titik, sekarang kembali, tetapi memposting kode di sini masih lebih baik, dan direkomendasikan oleh praktik terbaik stackoverflow.
Woohoo
15

Berikut ini adalah solusi untuk pertanyaan literal tentang cara mencetak pesan ke konsol kesalahan browser, bukan konsol debugger. (Mungkin ada alasan bagus untuk memotong debugger.)

Seperti yang saya catat dalam komentar tentang saran untuk melempar kesalahan untuk mendapatkan pesan di konsol kesalahan, satu masalah adalah bahwa ini akan mengganggu utas eksekusi. Jika Anda tidak ingin menginterupsi utas, Anda dapat membuang kesalahan di utas terpisah, yang dibuat menggunakan setTimeout. Maka solusi saya (yang ternyata merupakan penjabaran dari Ivo Danihelka):

var startTime = (new Date()).getTime();
function logError(msg)
{
  var milliseconds = (new Date()).getTime() - startTime;
  window.setTimeout(function () {
    throw( new Error(milliseconds + ': ' + msg, "") );
  });
}
logError('testing');

Saya mencantumkan waktu dalam milidetik sejak waktu mulai karena batas waktu dapat membuat urutan pesanan Anda mungkin berubah.

Argumen kedua untuk metode Kesalahan adalah untuk nama file, yang merupakan string kosong di sini untuk mencegah keluaran dari nama file dan nomor baris yang tidak berguna. Dimungkinkan untuk mendapatkan fungsi pemanggil tetapi tidak dengan cara browser yang independen.

Akan lebih baik jika kita dapat menampilkan pesan dengan ikon peringatan atau pesan alih-alih ikon kesalahan, tetapi saya tidak dapat menemukan cara untuk melakukan itu.

Masalah lain dengan menggunakan lemparan adalah bahwa ia dapat ditangkap dan dibuang dengan cara coba-coba yang tertutup, dan menempatkan lemparan tersebut di utas terpisah untuk menghindari rintangan itu juga. Namun, masih ada cara lain kesalahan bisa ditangkap, yaitu jika window.oner handler diganti dengan yang melakukan sesuatu yang berbeda. Tidak bisa membantumu di sana.

dlaliberte
sumber
15

Jika Anda menggunakan Safari , Anda dapat menulis

console.log("your message here");

dan itu muncul tepat di konsol browser.

Lukas
sumber
11
Semua dukungan browser modern console.log().
JJJ
2
Semua browser modern SEKARANG mendukung console.log(). Itu tidak benar sampai saat ini.
Bryce
9

Untuk benar-benar menjawab pertanyaan:

console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);

Alih-alih kesalahan, Anda juga dapat menggunakan info, log atau peringatan.

Yster
sumber
Jawaban Anda tampaknya terbaik, tetapi halaman MDN Mozilla mengatakan console.error(..)adalah fitur non-standar dan tidak boleh digunakan dalam produksi. Apa pendapat Anda tentang hal ini? Apakah Anda memiliki saran untuk programmer pemula yang menggunakan console.errorvs console.log?
modulitos
Ini menarik. Kita tidak harus menggunakan ini kalau begitu. Terima kasih atas informasinya, Lucas.
Yster
2
MDN juga dianggap console.log(...)"non-standar". Dalam hal itu, console.errorsama stabilnya dengan console.log.
Mike Rapadas
1
@Lucas Siapa yang peduli jika itu standar? Siapa yang akan menggunakan pencatatan konsol untuk produksi?
Andrew
Console.error sekarang berfungsi di semua browser utama. Bahkan IE8. Lihat developer.mozilla.org/en-US/docs/Web/API/Console/error
Red
8

Jika Anda menggunakan Firebug dan perlu mendukung IE, Safari atau Opera juga, Firebug Lite menambahkan dukungan console.log () ke browser ini.

Devon
sumber
2
Wow .. Firebug Lite luar biasa
Dexter
6

The WebKit Web Inspektur juga mendukung Firebug konsol API (hanya tambahan kecil untuk jawaban Dan ini ).

olliej
sumber
WebKit yang sangat bagus mendukungnya. Jadi itu didukung secara luas. Bagus!
Albus Dumbledore
5

Catatan tentang 'throw ()' yang disebutkan di atas. Tampaknya itu menghentikan eksekusi halaman sepenuhnya (saya memeriksa di IE8), jadi itu tidak sangat berguna untuk masuk "pada proses yang sedang berjalan" (suka melacak variabel tertentu ...)

Saran saya mungkin untuk menambahkan elemen textarea di suatu tempat di dokumen Anda dan untuk mengubah (atau menambahkan) nilainya (yang akan mengubah teksnya) untuk mencatat informasi kapan saja diperlukan ...

Yuval A.
sumber
Saya menduga itu karena Anda tidak menjawab pertanyaan OP. Untuk mencetak ke konsol JS, Anda harus menggunakan metode bawaan seperti console.log(),, throw()dll. Selain itu, tidak ada yang salah dengan perilaku yang throw()tampaknya Anda maksudkan - fakta bahwa penghentian eksekusi sengaja dan didokumentasikan ( pengembang. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ), dan ini konsisten dengan bagaimana pengecualian dilemparkan / ditangkap dalam bahasa pemrograman lain. (Jika Anda ingin mencatat konten variabel tanpa menghentikan eksekusi, itulah console.log()
Sean the Bean
@ SeantheBean, awalnya ada diskusi tentang fakta bahwa IE tidak mendukung console.log- jadi orang memberikan alternatif. Tentang throw()menghentikan eksekusi, tentu saja itu disengaja, tidak ada yang mengatakan tidak. Itu sebabnya biasanya bukan cara yang baik untuk mencatat informasi debug dalam runtime, yang diinginkan OP ...
Yuval A.
5

Seperti biasa, Internet Explorer adalah gajah besar dalam sepatu roda yang menghentikan Anda hanya menggunakan console.log().

Log jQuery dapat diadaptasi dengan mudah, tetapi sulit untuk menambahkannya di mana-mana. Salah satu solusi jika Anda menggunakan jQuery adalah dengan memasukkannya ke file jQuery Anda di akhir, diperkecil terlebih dahulu:

function log()
{
    if (arguments.length > 0)
    {
        // Join for graceful degregation
        var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];

        // This is the standard; Firebug and newer WebKit browsers support this.
        try {
            console.log(args);
            return true;
        } catch(e) {
            // Newer Opera browsers support posting erros to their consoles.
            try {
                opera.postError(args);
                return true;
            } 
            catch(e) 
            {
            }
        }

        // Catch all; a good old alert box.
        alert(args);
        return false;
    }
}
Chris S
sumber
Sekarang diterima sebagai ekstensi jQuery, tetapi bukankah akan lebih efisien untuk memeriksa apakah objek 'konsol' dan 'opera' ada sebelum menangkap pengecualian?
Danubian Sailor
@ lechlukasz Saya pikir Anda dapat menyimpan overhead ekstensi dan cukup gunakan console.log plus cek IE ini: stackoverflow.com/questions/1215392/…
Chris S
3

function foo() {
  function bar() {
    console.trace("Tracing is Done here");
  }
  bar();
}

foo();

console.log(console); //to print console object
console.clear('console.clear'); //to clear console
console.log('console.log'); //to print log message
console.info('console.info'); //to print log message 
console.debug('console.debug'); //to debug message
console.warn('console.warn'); //to print Warning
console.error('console.error'); //to print Error
console.table(["car", "fruits", "color"]);//to print data in table structure
console.assert('console.assert'); //to print Error
console.dir({"name":"test"});//to print object
console.dirxml({"name":"test"});//to print object as xml formate

To Print Error:- console.error('x=%d', x);

console.log("This is the outer level");
console.group();
console.log("Level 2");
console.group();
console.log("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.log("Back to level 2");
console.groupEnd();
console.log("Back to the outer level");

Parth Raval
sumber
1
console.log("your message here");

bekerja untuk saya .. saya mencari ini .. saya menggunakan Firefox. ini skrip saya.

 $('document').ready(function() {
console.log('all images are loaded');
});

berfungsi di Firefox dan Chrome.

DK
sumber
1

Cara paling sederhana untuk melakukan ini adalah:

console.warn("Text to print on console");
Kenneth John Falbous
sumber
1

Untuk menjawab pertanyaan Anda, Anda dapat menggunakan fitur ES6,

var var=10;
console.log(`var=${var}`);
Aniket Kulkarni
sumber
0

Ini tidak mencetak ke Konsol, tetapi akan membuka Anda Popup peringatan dengan pesan Anda yang mungkin berguna untuk beberapa debugging:

kerjakan saja:

alert("message");
mmm
sumber
Itu tidak ada kesamaan dengan apa yang diminta OP
Zefir Zdravkov
0

Dengan sintaks es6 Anda dapat menggunakan:

console.log(`x = ${x}`);
jkordas
sumber