JavaScript: Hata konsoluna nasıl mesaj yazdırabilirim?


Yanıtlar:


470

Yükleme Firebug ve sonra kullanabilir console.log(...)ve console.debug(...)vb (bkz belgelere bakın).


14
@Dan: WebKit Web Inspector aynı zamanda FireBug konsol API'sini de destekliyor
olliej

160
bu neden kabul edilen cevap? Firebug konsoluna nasıl yazılacağını, hata konsoluna nasıl yazılacağını sordu. bir dick ya da başka bir şey değil, sadece işaret.
matt lohkamp

127
+1. Ve şimdi bu soruya gelen herkesin yararı için, soru cevaplandığından beri, tüm tarayıcıların konsol nesnesini uyguladığını console.log()belirtmek gerekir , bu yüzden vb. IE dahil tüm tarayıcılarda çalışmalıdır. Ancak, her durumda, hata ayıklayıcı penceresinin o anda açık olması gerekir, aksi takdirde çağrılar consolehata üretecektir.
Spudley

2
@andrewjackson daha önce de belirtildiği gibi, console.log, IE dahil tüm modern tarayıcılarda iyi çalışır. Eski tarayıcıları desteklemek istiyorsanız kodunuz hala geçerli ve kullanışlıdır (ve herkese açık bir web sitesinde çalışıyorsanız, heck'in olması gerektiği gibi eminiz!)
BrainSlugs83

1
console.debug () ise IE'de mevcut değil. Bu sorunu çözebiliriz: 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

Günlük iletilerinize CSS de ekleyebilirsiniz:

console.log('%c My message here', "background: blue; color: white; padding-left:10px;");


10
Bu doğru cevap. Soru başlığında olmasına rağmen, seçilen cevapta "hata" kelimesi bile geçmiyor.
Ivan Durst

3
CSS eklemeyle ilgili ekstra bit oldukça eğlenceli. 1!
sudo yapmak yüklemek

@ORMapper Orada ne işe yaramıyor? Tahmin ettiğim CSS?
Nicholas

2
Anladığınız anda, tüm bu yıllar kullanarak console.logkonsol içinde css kullanabilirsiniz: |
Kırmızı

86

İstisnalar JavaScript konsoluna kaydedilir. Firebug'ı devre dışı bırakmak istiyorsanız bunu kullanabilirsiniz .

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

Kullanımı:

log('Hello World');
log('another message');

8
Bazı tarayıcılarda, hata ayıklamayı etkinleştirdiyseniz, açılır mesajlar gönderilir.
BrainSlugs83

Lütfen neden throwbir sargıya sarılması gerektiğini açıklar setTimeoutmısınız?
Antony

55

Çapraz tarayıcı çalışan bunu yapmanın iyi bir yolu, JavaScript Hata Ayıklama: Uyarılarınızı atın! .


7
throw () harika bir öneri - bu seçilen cevap olmalı.
matt lohkamp

17
Kabul ediyorum, bu bir çapraz tarayıcı yaklaşımıdır. Fakat .. İstisna atmak, mesajların kaydedilmesinden temelde farklı değil mi?
Robin Maben

14
Öte yandan, bir istisna atmak geçerli "iş parçacığının" (Yuval A tarafından belirtildiği gibi) yürütülmesini durduracak ve varsa yakalamaya devam edecektir. İstenen bu olduğundan şüpheliyim.
dlaliberte

7
throw()kesinlikle bunu yapmanın yolu değil. er ya da geç başın belada olacak. benim için daha erken oldu :(
Hugo Mota

4
@Ian_Oxley: bir noktada çöktü, şimdi geri döndü, ancak kodu buraya göndermek hala daha iyi ve stackoverflow en iyi uygulamaları tarafından öneriliyor.
Mart'ta woohoo

15

Burada, hata ayıklayıcı konsoluna değil, tarayıcının hata konsoluna bir mesajın nasıl yazdırılacağıyla ilgili asıl soruya bir çözüm bulunmaktadır. (Hata ayıklayıcıyı atlamak için iyi nedenler olabilir.)

Hata konsolunda bir mesaj almak için bir hata atma önerisiyle ilgili yorumlarda belirttiğim gibi, bir sorun bunun yürütme iş parçacığını keseceğidir. İş parçacığını kesmek istemiyorsanız, hatayı setTimeout kullanılarak oluşturulan ayrı bir iş parçacığına atabilirsiniz. Bu yüzden benim çözümüm (bu Ivo Danihelka'nın çözümünün ortaya çıktığı ortaya çıkıyor):

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

Başlangıç ​​zamanından bu yana geçen milisaniye cinsinden zamanı ekliyorum çünkü zaman aşımı mesajları görmeyi beklediğiniz sırayı bozabilir.

Error yönteminin ikinci argümanı, işe yaramaz dosya adı ve satır numarasının çıktısını önlemek için burada boş bir dize olan dosya adı içindir. Arayan işlevini almak mümkündür, ancak basit bir tarayıcıdan bağımsız bir şekilde değil.

Mesajı hata simgesi yerine bir uyarı veya mesaj simgesiyle görüntüleyebilmemiz güzel olurdu, ancak bunu yapmanın bir yolunu bulamıyorum.

Fırlatma kullanmanın bir başka problemi, kapalı bir deneme yakalamasıyla yakalanıp atılabilmesidir ve fırlatmayı ayrı bir iş parçacığına koymak da bu engeli önler. Ancak, hatanın yakalanmasının başka bir yolu daha vardır, bu da window.onerror işleyicisinin yerine farklı bir şey yapan biriyle değiştirilir. Orada sana yardım edemem.


15

Eğer kullanırsanız Safari yazabilirsiniz

console.log("your message here");

ve doğrudan tarayıcının konsolunda görünür.


11
Tüm modern tarayıcılar desteklenir console.log().
JJJ

2
ŞİMDİ tüm modern tarayıcılar desteklenir console.log(). Yakın zamana kadar bu doğru değildi.
Bryce

9

Soruyu gerçekten cevaplamak için:

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

Hata yerine, bilgi, günlük veya uyarıyı da kullanabilirsiniz.


Yanıtınız en iyi görünüyor, ama Mozilla'nın MDN sayfası diyor console.error(..)standart dışı bir özelliktir ve üretimde kullanılmamalıdır. Bu konudaki görüşünüz nedir? console.errorVs kullanarak bir acemi programcı için herhangi bir öneriniz var console.logmı?
modüller

Bu ilginç. Bunu o zaman kullanmamalıyız. Bilgi için teşekkürler, Lucas.
Yster

2
MDN gördüğü console.log(...)yanı "standart dışı". Bu bağlamda, console.errorkadar kararlı console.log.
Mike Rapadas

1
@Lucas Standart olup olmadığına kim önem veriyor? Üretim için konsol günlüğünü kim kullanacak?
Andrew

Console.error şimdi tüm büyük tarayıcılarda çalışıyor. IE8 bile. Bkz. Developer.mozilla.org/tr-TR/docs/Web/API/Console/error
Kırmızı

8

Firebug kullanıyorsanız ve IE, Safari veya Opera'yı da desteklemeniz gerekiyorsa, Firebug Lite bu tarayıcılara console.log () desteği ekler.


2
Vay .. Firebug Lite harika
Dexter


5

Yukarıda belirtilen 'atış ()' ile ilgili bir not. Görünüşe göre sayfanın yürütülmesini tamamen durduruyor (IE8'de kontrol ettim), bu yüzden "devam eden işlemlere" giriş yapmak için çok yararlı değil (belirli bir değişkeni izlemek gibi ...)

Benim önerim, belgenizde bir yere bir textarea öğesi eklemek ve gerektiğinde bilgileri günlüğe kaydetmek için değerini ( veya metnini değiştirir ) değiştirmek (veya eklemek) ...


Sanırım OP'nin sorusuna cevap vermediniz. JS konsoluna yazdırmak için, gibi yerleşik bir yöntemi kullanmalısınız console.log(), throw()vb Ayrıca, davranışı ile yanlış bir şey yoktur throw()sen ima görünüyor gibi - bu çalışmasının bittiği gerçeği kasıtlı ve belgelenmiş (bir geliştirici. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) ve diğer programlama dillerinde istisnaların nasıl atıldığı / yakalandığı ile tutarlıdır. (Bir değişkenin içeriğini yürütmeyi durdurmadan günlüğe kaydetmek istiyorsanız, bunun console.log()için budur.)
Bean the Sean

@SeantheBean, aslında IE'nin desteklemediği gerçeği hakkında bir tartışma console.logvardı - bu yüzden insanlar alternatifler veriyordu. Yürütmeyi throw()durdurma hakkında, elbette kasıtlı, kimse söylemedi. Bu nedenle , OP'nin istediği şeyde hata ayıklama bilgilerini günlüğe kaydetmek genellikle iyi bir yol değildir ...
Yuval A.

5

Her zaman olduğu gibi, Internet Explorer, patenlerde sadece kullanmayı bırakan büyük fil console.log().

jQuery'nin günlüğü kolayca uyarlanabilir, ancak her yere eklemek zorunda olan bir acıdır. JQuery kullanıyorsanız bir çözüm, bunu önce küçültülmüş olarak sonunda jQuery dosyanıza koymaktır:

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;
    }
}

Artık jQuery'nin uzantıları olarak kabul ediliyor, ancak istisna yakalanmadan önce 'konsol' ve 'opera' nesnelerinin var olup olmadığını kontrol etmek verimli olmaz mı?
Danubian Sailor

@lechlukasz Bence uzantının yükünü kaydedebilir ve sadece console.log artı bu IE kontrolünü kullanabilirsiniz: 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");


1
console.log("your message here");

benim için çalışıyorum .. Bunu arıyorum .. Firefox kullandım. İşte Senaryom.

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

Firefox ve Chrome'da çalışır.



1

Sorunuzu cevaplamak için ES6 özelliklerini kullanabilirsiniz,

var var=10;
console.log(`var=${var}`);

0

Bu, Konsol'a yazdırılmaz, ancak mesajınızla birlikte bazı hata ayıklama için yararlı olabilecek bir uyarı Pop-up'ı açar:

sadece yap:

alert("message");

OP'nin sorduğu şeylerin hiçbiri ortak bir şey değil
Zefir Zdravkov

0

Es6 sözdizimi ile şunları kullanabilirsiniz:

console.log(`x = ${x}`);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.