Lưu console.log trong Chrome vào một tệp


172

Có ai biết cách lưu sản phẩm console.log trong Chrome vào một tệp không? Hoặc làm thế nào để sao chép văn bản ra khỏi bàn điều khiển?

Giả sử bạn đang chạy một vài giờ kiểm tra chức năng và bạn đã có hàng ngàn dòng sản phẩm console.log trong Chrome. Làm thế nào để bạn lưu nó hoặc xuất nó?


Câu trả lời:


97

Tôi cần phải làm điều tương tự và đây là giải pháp tôi tìm thấy:

  1. Cho phép đăng nhập từ dòng lệnh bằng cách sử dụng các cờ:

    --enable-logging --v=1

    Điều này ghi nhật ký mọi thứ Chrome thực hiện trong nội bộ, nhưng nó cũng ghi nhật ký tất cả các console.log()tin nhắn. Tệp nhật ký được gọi chrome_debug.logvà nằm trong User Data Directory.

  2. Lọc tệp nhật ký bạn nhận được cho các dòng với CONSOLE(\d+).

Lưu ý rằng nhật ký giao diện điều khiển không xuất hiện với --incognito.


3
có vẻ như nó không hoạt động trên hệ điều hành mac của tôi, có nhật ký nội bộ nhưng không có Console.log ...
Nico

7
Điều này không lưu thông tin console.log vào tệp nhật ký. Trong Windows 8.
coderama

4
Trên máy Mac, tôi tìm thấy tệp nhật ký tại ~ / Thư viện / Hỗ trợ ứng dụng / Google / Chrome / chrome_debug.log
vaichidrewar

2
Điều này vẫn hoạt động với tôi trên OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1với nhật ký được lưu trong~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb

3
Tôi không nhận được bất cứ điều gì ngoài các bản ghi chrome nội bộ. Dòng của tôi console.log()không ở đâu trong tập tin đó. Bất cứ ai cũng có một sửa chữa cho điều này?
xandermonkey

186

Tin tốt

Công cụ phát triển Chrome hiện cho phép bạn lưu đầu ra của bàn điều khiển vào một tệp nguyên bản

  1. Mở bàn điều khiển
  2. Kích chuột phải
  3. Chọn "lưu dưới dạng .."

lưu bàn điều khiển vào tập tin

Hướng dẫn dành cho nhà phát triển Chrome tại đây .


3
Điều này có thể được thực hiện bằng cách sử dụng phím tắt hoặc chạy lệnh trên bàn điều khiển không?
Sarthak Singhal

1
Dưới đây là danh sách tất cả các phím tắt devTools developer.chrome.com/devtools/docs/shortype
adardesign

11
Điều này dường như không sao chép dấu vết ngăn xếp
Michael

2
Bạn có thể mở lại tập tin đó trong console không? Nếu vậy, làm thế nào để bạn như vậy?
Mahathi Vempati

7
Lưu ý rằng điều này sẽ không mở rộng đối tượng - nó vẫn sẽ in các đối tượng lớn ở dạng cắt ngắn của họ, ví dụ như {a: 1, b: 2, c: 3, ...}.
Galen Long

29

Có một plugin javascript mã nguồn mở thực hiện điều đó, nhưng đối với bất kỳ trình duyệt nào - debugout.js

Debugout.js ghi lại và lưu console.logs để ứng dụng của bạn có thể truy cập chúng. Tiết lộ đầy đủ, tôi đã viết nó. Nó định dạng các loại khác nhau một cách thích hợp, có thể xử lý các đối tượng và mảng lồng nhau và có thể tùy ý đặt dấu thời gian bên cạnh mỗi nhật ký. Bạn cũng có thể chuyển đăng nhập trực tiếp ở một nơi và không phải xóa tất cả các báo cáo đăng nhập của mình.


4
Để tham khảo, mặc dù đây trông giống như một công cụ tuyệt vời, nó sẽ không thu được đầu ra từ trình duyệt, như khi tải hình ảnh không thành công hoặc đầu ra giao diện điều khiển tích hợp khác và nó yêu cầu bạn viết lại các câu lệnh nhật ký của mình bằng một cú pháp đặc biệt.
Lukus

@Lukus chắc chắn sẽ không bắt được đầu ra của trình duyệt (bạn sẽ cần một bản vá khỉ để làm điều đó) nhưng không có cú pháp đặc biệt cần thiết. vượt qua các đối số tương tự như bạn sẽ điều khiển.log
inorganik

1
@Inorganik Tôi đã tìm kiếm một cách để kiểm tra selen để nắm bắt đầu ra của bàn điều khiển, nhưng nó sẽ được sử dụng cho một dịch vụ thử nghiệm để chúng tôi không kiểm soát các trang web của người dùng. Tôi nghĩ rằng công cụ của bạn rất tuyệt, nhưng nó sẽ yêu cầu người dùng viết lại các câu lệnh console.log hiện có của họ dưới dạng bugout.log, đó là ý nghĩa của cú pháp đặc biệt. Nó xuất hiện cho đến nay không có cách nào trình duyệt chéo để làm điều đó lần này.
Lukus

Không, nó sẽ không làm việc cho chúng tôi. Chúng tôi cần lưu nhật ký kết quả kiểm tra trang web phức tạp với số lượng lớn tập lệnh của bên thứ 3, chạy trên các tên miền khác nhau và chúng tôi không thể thay đổi hầu hết trong số chúng.
Mike Keskinov

22

Tôi đã tìm thấy một cách tuyệt vời và dễ dàng cho việc này.

  1. Trong bảng điều khiển - nhấp chuột phải vào đối tượng đã đăng nhập bảng điều khiển

  2. Nhấp vào 'Lưu trữ dưới dạng biến toàn cục'

  3. Xem tên của biến mới - ví dụ: đó là biếnName1

  4. Nhập vào bảng điều khiển: JSON.opesify (biếnName1)

  5. Sao chép nội dung chuỗi biến: vd: {"a": 1, "b": 2, "c": 3}

nhập mô tả hình ảnh ở đây

  1. Chuyển đến một số trình soạn thảo trực tuyến JSON: ví dụ: https://jsoneditoronline.org/

nhập mô tả hình ảnh ở đây


1
Có vẻ bề ngoài cồng kềnh nhưng nó hoạt động khá tốt. Trong các phiên bản sau, ở dưới cùng của đầu ra có nút "Sao chép". Tôi chỉ cần nhấn vào đó, sau đó có một đoạn script nhỏ lưu bảng tạm dưới dạng tệp .json và mở trong Visual Studio rất dễ đọc. Thay đổi duy nhất là tôi thực hiện JSON.opesify (temp1, null, 2) để dễ đọc hơn. Thủ thuật dưới đây để lưu giao diện điều khiển cũng hoạt động tốt.
Wade Hatler

8

Để có tệp nhật ký tốt hơn (không có vô nghĩa gỡ lỗi Chrome), hãy sử dụng:

--enable-logging --log-level=0

thay vì --v=1 đó chỉ là quá nhiều thông tin.

Nó vẫn sẽ cung cấp các lỗi và cảnh báo như bạn thường thấy trong bảng điều khiển Chrome.

cập nhật ngày 18 tháng 5 năm 2020: Thật ra, tôi nghĩ điều này không còn đúng nữa. Tôi không thể tìm thấy các thông báo bảng điều khiển trong bất kỳ mức ghi nhật ký nào.


7

Điều này có thể hoặc có thể không hữu ích nhưng trên Windows, bạn có thể đọc nhật ký bảng điều khiển bằng cách sử dụng theo dõi sự kiện cho Windows

http://msdn.microsoft.com/en-us/l Library / ms751538.aspx

Các thử nghiệm tích hợp của chúng tôi được chạy trong .NET, vì vậy tôi sử dụng phương pháp này để thêm nhật ký giao diện điều khiển vào đầu ra thử nghiệm của chúng tôi. Tôi đã thực hiện một dự án bảng điều khiển mẫu để trình diễn tại đây: https://github.com/jkells/chrome-trace

--enable-log --v = 1 dường như không hoạt động trên phiên bản Chrome mới nhất.


3

Rất nhiều câu trả lời hay nhưng tại sao không sử dụng JSON.opesify (your_variable)? Sau đó lấy nội dung qua bản sao và dán (loại bỏ dấu ngoặc kép bên ngoài). Tôi cũng đã đăng câu trả lời tương tự này tại: Làm thế nào để lưu đầu ra của console.log (object) vào một tệp?


1
Đối với các vấn đề về " Uncaught TypeError: Chuyển đổi cấu trúc vòng tròn thành JSON " , có lẽ điều này có thể giúp ích.
KtX2SkD

2

Có một công cụ mã nguồn mở khác cho phép bạn lưu tất cả console.logđầu ra trong một tệp trên máy chủ của mình - JS LogFlush (plug!).

JS LogFlush là một giải pháp ghi nhật ký JavaScript tích hợp bao gồm:

  • thay thế giao diện người dùng không có giao diện người dùng của console.log - ở phía máy khách.
  • đăng nhập hệ thống lưu trữ - về phía máy chủ.

Bản giới thiệu


2

Nếu bạn đang chạy máy chủ Apache trên localhost của mình (không làm điều này trên máy chủ sản xuất), bạn cũng có thể đăng kết quả lên tập lệnh thay vì viết nó lên bàn điều khiển.

Vì vậy, thay vì console.log, bạn có thể viết:

JSONP('http://localhost/save.php', {fn: 'filename.txt', data: json});

Sau đó save.phpcó thể làm điều này

<?php

 $fn = $_REQUEST['fn'];
 $data = $_REQUEST['data'];

 file_put_contents("path/$fn", $data);

1
Tôi thực sự hy vọng không ai từng tải nó lên máy chủ trong sản xuất. Điều này là nguy hiểm cho máy chủ.
Dave Mackffy

Bạn đã không đọc dòng đầu tiên: "Nếu bạn đang chạy một máy chủ Apache trên localhost của bạn"?
supersan

Việc bạn bỏ phiếu cho bài đăng của tôi là không hợp lý bởi vì điều đó sẽ cực kỳ ngu ngốc khi ai đó chạy máy chủ sản xuất trên "localhost" (nơi JSONP yêu cầu dữ liệu đăng bài).
supersan

Tôi không bao giờ bỏ phiếu cho câu trả lời của bạn, tôi chỉ chỉ ra sự nguy hiểm mà kịch bản này gây ra nếu từng được tải lên một máy chủ có sẵn cho công chúng.
Dave Mackffy

1

Trên Linux (ít nhất), bạn có thể đặt CHROME_LOG_FILE trong môi trường để chrome ghi nhật ký hoạt động Console vào tệp đã đặt tên mỗi lần chạy. Nhật ký được ghi đè mỗi khi chrome bắt đầu. Bằng cách này, nếu bạn có phiên tự động chạy chrome, bạn không phải thay đổi cách bắt đầu chrome và nhật ký sẽ ở đó sau khi phiên kết thúc.

xuất CHROME_LOG_FILE = chrome.log


0

Ngày nay thật dễ dàng - nhấp chuột phải vào bất kỳ mục nào được hiển thị trong nhật ký bảng điều khiển và chọn lưu dưới dạng và lưu toàn bộ đầu ra nhật ký vào một tệp trên máy tính của bạn.


0

các giải pháp khác trong chủ đề này không hoạt động trên máy mac của tôi. Đây là một logger lưu đại diện chuỗi không liên tục bằng cách sử dụng ajax. sử dụng nó console.savethay vìconsole.log

var logFileString="";
var maxLogLength=1024*128;

console.save=function(){
  var logArgs={};

  for(var i=0; i<arguments.length; i++) logArgs['arg'+i]=arguments[i];
  console.log(logArgs);

  // keep a string representation of every log
  logFileString+=JSON.stringify(logArgs,null,2)+'\n';

  // save the string representation when it gets big
  if(logFileString.length>maxLogLength){
    // send a copy in case race conditions change it mid-save
    saveLog(logFileString);
    logFileString="";
  }
};

tùy thuộc vào những gì bạn cần, bạn có thể lưu chuỗi đó hoặc chỉ console.lognó và sao chép và dán. đây là ajax cho bạn trong trường hợp bạn muốn lưu nó:

function saveLog(data){
  // do some ajax stuff with data.
  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200) {}
  }

  xhttp.open("POST", 'saveLog.php', true);
  xhttp.send(data);
}

các saveLog.phpcần nối thêm dữ liệu vào một tập tin log ở đâu đó. Tôi không cần phần đó vì vậy tôi không bao gồm nó ở đây. :)

https://www.google.com.vn/search?q=php+append+to+log

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.