JavaScript: Làm cách nào để in thông báo đến bảng điều khiển lỗi?


438

Làm cách nào tôi có thể in một thông báo đến bảng điều khiển lỗi, tốt nhất là bao gồm một biến?

Ví dụ: một cái gì đó như:

print('x=%d', x);

8
Bạn đang nói về giao diện điều khiển nào. Bảng điều khiển trình duyệt hoặc bảng điều khiển cụ thể khung JavaScript?
Eric Schoonover

Câu trả lời:


469

Cài đặt Firebug và sau đó bạn có thể sử dụng console.log(...)console.debug(...)vv (xem tài liệu để biết thêm).


14
@Dan: Trình kiểm tra WebKit Web cũng hỗ trợ API bảng điều khiển FireBug
olliej

160
Tại sao đây là câu trả lời được chấp nhận? anh ta không hỏi làm thế nào để ghi vào bảng điều khiển con bọ lửa, anh ta hỏi làm thế nào để viết vào bảng điều khiển lỗi. không phải là một tinh ranh hay bất cứ điều gì, chỉ cần chỉ ra nó.
matt lohkamp

127
+1. Và vì lợi ích của bất kỳ ai đến với câu hỏi này bây giờ, đáng để chỉ ra rằng vì câu hỏi đã được trả lời, tất cả các trình duyệt hiện đã triển khai đối tượng giao diện điều khiển, vì vậy, console.log()v.v. nên hoạt động trong tất cả các trình duyệt, kể cả IE. Tuy nhiên, trong mọi trường hợp, bạn cần mở cửa sổ gỡ lỗi tại thời điểm đó, nếu không các cuộc gọi đến consolesẽ phát sinh lỗi.
Spudley

2
@andrewjackson như đã lưu ý trước đó, console.log hoạt động tốt trong tất cả các trình duyệt hiện đại, bao gồm cả IE. Mã của bạn vẫn hoàn toàn hợp lệ và hữu ích nếu bạn có ý định hỗ trợ các trình duyệt cũ hơn (và nếu bạn đang làm việc trên một trang web công cộng, bạn chắc chắn là như vậy!), Tuy nhiên lời chỉ trích của tôi chỉ là nhận xét của bạn sai lệch / không chính xác.
BrainSlugs83

1
mặt khác console.debug () không tồn tại trong IE. Chúng ta có thể làm việc xung quanh đó với: if (! Console.debug) {console.debug = function (args) {console.log (args); }}
Rovmate

318
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

Bạn cũng có thể thêm CSS vào thông điệp đăng nhập của mình:

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


10
Đây là câu trả lời chính xác. Từ "lỗi" thậm chí không được đề cập trong câu trả lời được chọn, mặc dù nó có trong tiêu đề câu hỏi.
Ivan Durst

3
Thêm một chút về việc thêm CSS là khá thú vị. +1!
sudo thực hiện cài đặt vào

@ORMapper Những gì không làm việc ở đó? CSS tôi giả sử?
Nicholas

2
Khoảnh khắc bạn nhận ra rằng, tất cả những năm sử dụng này console.logbạn đều có thể sử dụng css bên trong bảng điều khiển: |
Đỏ

86

Các ngoại lệ được đăng nhập vào bảng điều khiển JavaScript. Bạn có thể sử dụng nó nếu bạn muốn tắt Firebird .

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

Sử dụng:

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

8
Trong một số trình duyệt, nếu bạn đã bật gỡ lỗi, điều này sẽ ném các thông báo bật lên.
BrainSlugs83

Bạn có thể giải thích tại sao throwphải được bọc trong một setTimeout?
Antony

55

Một cách tốt để làm điều này hoạt động trên nhiều trình duyệt được nêu trong Gỡ lỗi JavaScript: Vứt bỏ cảnh báo của bạn! .


7
throw () là một gợi ý tuyệt vời - đây nên là câu trả lời được chọn.
matt lohkamp

17
Đồng ý, đây là một cách tiếp cận trình duyệt chéo. Nhưng .. Không phải là ném một ngoại lệ khác về cơ bản với thông điệp đăng nhập?
Robin Maben

14
Mặt khác, việc ném một ngoại lệ sẽ dừng việc thực thi "luồng" hiện tại (như được lưu ý bởi Yuval A), và tiếp tục nó trong lệnh bắt nếu có. Tôi nghi ngờ đây là những gì mong muốn.
dlaliberte

7
throw()chắc chắn không phải là cách để làm điều này sớm muộn gì bạn cũng sẽ gặp rắc rối đối với tôi thì sớm hơn :(
Hugo Mota

4
@Ian_Oxley: đã có lúc nào đó bị sao lưu, bây giờ nó đã sao lưu, nhưng việc đăng mã ngay tại đây vẫn tốt hơn và được khuyến nghị bởi các thực tiễn tốt nhất của stackoverflow.
woohoo

15

Đây là một giải pháp cho câu hỏi theo nghĩa đen về cách in thông báo đến bảng điều khiển lỗi của trình duyệt, không phải bảng điều khiển trình gỡ lỗi. (Có thể có lý do chính đáng để bỏ qua trình gỡ lỗi.)

Như tôi đã lưu ý trong các nhận xét về đề xuất ném lỗi để nhận thông báo trong bảng điều khiển lỗi, một vấn đề là điều này sẽ làm gián đoạn chuỗi thực thi. Nếu bạn không muốn làm gián đoạn chuỗi, bạn có thể ném lỗi vào một luồng riêng, một luồng được tạo bằng setTimeout. Do đó, giải pháp của tôi (hóa ra là một công trình của 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');

Tôi bao gồm thời gian tính bằng mili giây kể từ thời gian bắt đầu vì thời gian chờ có thể làm lệch thứ tự mà bạn có thể mong đợi để xem các tin nhắn.

Đối số thứ hai cho phương thức Error là tên tệp, đây là một chuỗi rỗng ở đây để ngăn đầu ra của tên tệp và số dòng vô dụng. Có thể có được chức năng người gọi nhưng không phải theo cách độc lập với trình duyệt đơn giản.

Sẽ thật tuyệt nếu chúng ta có thể hiển thị thông báo bằng biểu tượng cảnh báo hoặc thông báo thay vì biểu tượng lỗi, nhưng tôi không thể tìm ra cách để làm điều đó.

Một vấn đề khác khi sử dụng cú ném là nó có thể bị bắt và vứt đi bởi một cú bắt bóng kèm theo, và ném cú ném vào một sợi riêng biệt cũng tránh được chướng ngại vật đó. Tuy nhiên, vẫn có một cách khác có thể bị lỗi, đó là nếu trình xử lý window.onerror được thay thế bằng một cách làm khác đi. Không thể giúp bạn ở đó.


15

Nếu bạn sử dụng Safari , bạn có thể viết

console.log("your message here");

và nó xuất hiện ngay trên bảng điều khiển của trình duyệt.


11
Tất cả các trình duyệt hiện đại hỗ trợ console.log().
JJJ

2
Tất cả các trình duyệt hiện đại NGAY hỗ trợ console.log(). Điều đó không đúng cho đến gần đây.
Bryce

9

Để thực sự trả lời câu hỏi:

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

Thay vì lỗi, bạn cũng có thể sử dụng thông tin, đăng nhập hoặc cảnh báo.


Câu trả lời của bạn có vẻ tốt nhất, nhưng trang MDN của Mozilla cho biết đây console.error(..)là một tính năng không chuẩn và không nên được sử dụng trong sản xuất. Ông nghĩ sao về điều này là gì? Bạn có bất cứ đề nghị cho một lập trình viên mới sử dụng console.errorvs console.log?
modulitos

Hay đấy. Chúng ta không nên sử dụng nó sau đó. Cảm ơn thông tin, Lucas.
Yster 13/03/2015

2
MDN cũng coi console.log(...)"không chuẩn". Về vấn đề đó, console.errorlà ổn định như console.log.
Mike Rapadas

1
@Lucas Ai quan tâm nếu nó là tiêu chuẩn? Ai sẽ sử dụng bảng điều khiển đăng nhập để sản xuất?
Andrew

Console.error hoạt động ngay bây giờ trong tất cả các trình duyệt chính. Ngay cả IE8. Xem developer.mozilla.org/en-US/docs/Web/API/Console/error
Red

8

Nếu bạn đang sử dụng Fireorms và cũng cần hỗ trợ IE, Safari hoặc Opera, Fireorms Lite sẽ hỗ trợ console.log () cho các trình duyệt này.


2
Wow .. Fireorms Lite thật tuyệt vời
Dexter


5

Một lưu ý về 'throw ()' đã đề cập ở trên. Có vẻ như nó dừng hoàn toàn việc thực thi trang (tôi đã kiểm tra trong IE8), vì vậy nó không hữu ích cho việc ghi nhật ký "đang diễn ra quá trình" (như để theo dõi một biến nào đó ...)

Đề nghị của tôi có lẽ là thêm một yếu tố textarea ở đâu đó trong tài liệu của bạn và thay đổi (hoặc nối thêm) giá trị của nó (sẽ thay đổi văn bản của nó) để ghi thông tin bất cứ khi nào cần ...


Tôi đoán là vì bạn đã không trả lời câu hỏi của OP. Để in ra cửa sổ Console JS, bạn phải sử dụng một phương pháp tích hợp như console.log(), throw()vv Bên cạnh đó, không có gì là sai với hành vi củathrow() bạn dường như ngụ ý - thực tế là nó dừng thi công là có chủ ý và tài liệu ( nhà phát triển. mozilla.org/en-US/docs/Web/JavaScript/Reference/ ,) và nó phù hợp với cách ngoại lệ được ném / bắt trong các ngôn ngữ lập trình khác. (Nếu bạn muốn ghi nhật ký nội dung của một biến mà không dừng thực thi, đó console.log()là mục đích của nó.)
Sean the Bean

@SeantheBean, ban đầu có một cuộc thảo luận về thực tế là IE không hỗ trợ console.log- vì vậy mọi người đang đưa ra giải pháp thay thế. Về throw()việc dừng thực thi, tất nhiên đó là cố ý, không ai nói là không. Đó là lý do tại sao nó thường không phải là một cách tốt để ghi lại thông tin gỡ lỗi trong thời gian chạy, điều mà OP muốn ...
Yuval A.

5

Như mọi khi, Internet Explorer là con voi lớn trong các con lăn khiến bạn chỉ cần sử dụng console.log().

Nhật ký của jQuery có thể được điều chỉnh khá dễ dàng, nhưng thật khó khăn khi phải thêm nó ở mọi nơi. Một giải pháp nếu bạn đang sử dụng jQuery là đặt nó vào tệp jQuery của bạn ở cuối, rút ​​gọn trước:

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

Hiện tại, nó được chấp nhận làm tiện ích mở rộng của jQuery, nhưng liệu nó có hiệu quả để kiểm tra xem các đối tượng 'console' và 'opera' có tồn tại trước khi bắt ngoại lệ không?
Thủy thủ Danubian

@lechlukasz Tôi nghĩ bạn có thể tiết kiệm chi phí hoạt động của tiện ích mở rộng và chỉ cần sử dụng console.log cộng với kiểm tra IE này: stackoverflow.com/questions/1215392/ Lỗi
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");

làm việc cho tôi .. tôi đang tìm kiếm cái này .. tôi đã sử dụng Firefox. đây là tập lệnh của tôi

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

hoạt động trong Firefox và Chrome.



1

Để trả lời câu hỏi của bạn, bạn có thể sử dụng các tính năng ES6,

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

0

Điều này không in ra Bảng điều khiển, nhưng sẽ mở cho bạn một Popup cảnh báo với thông báo của bạn có thể hữu ích cho một số gỡ lỗi:

cứ làm đi:

alert("message");

Không có gì chung với những gì OP yêu cầu
Zefir Zdravkov

0

Với cú pháp es6 bạn có thể sử dụng:

console.log(`x = ${x}`);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.