บันทึก console.log ใน Chrome เป็นไฟล์


173

ไม่มีใครรู้วิธีบันทึก console.log เอาต์พุตใน Chrome เป็นไฟล์หรือไม่ หรือวิธีการคัดลอกข้อความออกจากคอนโซล?

สมมติว่าคุณใช้การทดสอบการทำงานสองสามชั่วโมงและคุณมีคอนโซลหลายพันบรรทัดเอาต์พุตของบล็อกใน Chrome คุณจะบันทึกหรือส่งออกได้อย่างไร


คำตอบ:


98

ฉันต้องการทำสิ่งเดียวกันและนี่เป็นวิธีแก้ปัญหาที่ฉันพบ:

  1. เปิดใช้งานการบันทึกจากบรรทัดคำสั่งโดยใช้แฟล็ก:

    --enable-logging --v=1

    สิ่งนี้จะบันทึกทุกอย่างที่ Chrome ทำภายใน แต่จะบันทึกconsole.log()ข้อความทั้งหมดด้วย แฟ้มบันทึกที่เรียกว่าและตั้งอยู่ในchrome_debug.logUser Data Directory

  2. CONSOLE(\d+)กรองล็อกไฟล์ที่คุณได้รับสายด้วย

--incognitoโปรดทราบว่าคอนโซลบันทึกไม่ปรากฏขึ้นพร้อมกับ


3
ดูเหมือนว่ามันไม่ทำงานบนระบบปฏิบัติการ Mac ของฉันมีบันทึกภายใน แต่ไม่มี console.log ...
นิโก้

7
สิ่งนี้ไม่บันทึกข้อมูล console.log ไปยังไฟล์บันทึก ใน Windows 8
coderama

4
สำหรับ Mac ฉันพบล็อกไฟล์ที่ ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar

2
ยังใช้งานได้กับฉันใน OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1ด้วยบันทึกที่บันทึกไว้ใน~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb

3
ฉันไม่ได้รับอะไรนอกเหนือจากบันทึกของ Chrome ภายใน console.log()บรรทัดของฉันไม่มีที่ใดในไฟล์นั้น ใครมีการแก้ไขสำหรับเรื่องนี้?
xandermonkey

187

ข่าวดี

เครื่องมือ Chrome dev ช่วยให้คุณสามารถบันทึกเอาต์พุตคอนโซลเป็นไฟล์ได้

  1. เปิดคอนโซล
  2. คลิกขวา
  3. เลือก "บันทึกเป็น .. "

บันทึกคอนโซลเป็นไฟล์

คำแนะนำสำหรับนักพัฒนาโครเมี่ยมที่นี่


3
สิ่งนี้สามารถทำได้โดยใช้แป้นพิมพ์ลัดหรือใช้คำสั่งบนคอนโซล?
Sarthak Singhal

1
นี่คือรายการของทางลัด devTools ทั้งหมดdeveloper.chrome.com/devtools/docs/shortcuts
adardesign

11
ดูเหมือนจะไม่คัดลอก stack stack
Michael

2
คุณสามารถเปิดไฟล์นั้นในคอนโซลอีกครั้งได้หรือไม่ ถ้าเป็นเช่นนั้นคุณจะทำอย่างไร
Mahathi Vempati

7
หมายเหตุว่านี้จะไม่ขยายวัตถุ - {a: 1, b: 2, c: 3, ...}มันจะยังคงพิมพ์วัตถุขนาดใหญ่ในรูปแบบที่ถูกตัดทอนของพวกเขาเช่น
Galen Long

29

มีปลั๊กอินจาวาสคริปต์แบบโอเพ่นซอร์สที่ทำเช่นนั้น แต่สำหรับเบราว์เซอร์ใด ๆ - debugout.js

Debugout.js บันทึกและบันทึก console.logs เพื่อให้แอปพลิเคชันของคุณสามารถเข้าถึงได้ การเปิดเผยแบบเต็มฉันเขียนไว้ มันจัดรูปแบบประเภทที่แตกต่างกันอย่างเหมาะสมสามารถจัดการวัตถุและอาร์เรย์ที่ซ้อนกันและสามารถเลือกที่จะบันทึกเวลาถัดจากแต่ละบันทึก นอกจากนี้คุณยังสามารถสลับการบันทึกสดได้ในที่เดียวและไม่ต้องลบข้อความการบันทึกทั้งหมดของคุณ


4
สำหรับการอ้างอิงถึงแม้ว่ามันจะดูเหมือนเป็นเครื่องมือที่ยอดเยี่ยม แต่มันจะไม่จับเอาท์พุทจากเบราว์เซอร์เช่นเมื่อการโหลดรูปภาพล้มเหลวหรือเอาต์พุตคอนโซลในตัวอื่นและต้องการให้คุณเขียนคำสั่งบันทึกของคุณใหม่โดยใช้ไวยากรณ์พิเศษ
Lukus

@ Lukus มันแน่นอนจะไม่จับเบราว์เซอร์เอาท์พุท (คุณจะต้องมีลิงปะทำเช่นนั้น) แต่ไม่มีไวยากรณ์พิเศษที่จำเป็น ผ่าน args เช่นเดียวกับที่คุณจะ console.log
inorganik

1
@Inorganik ฉันกำลังค้นหาวิธีการทดสอบซีลีเนียมเพื่อจับเอาท์พุทของคอนโซล แต่มันจะถูกใช้สำหรับบริการทดสอบดังนั้นเราจึงไม่สามารถควบคุมเว็บไซต์ของผู้ใช้ได้ ฉันคิดว่าเครื่องมือของคุณเจ๋ง แต่มันต้องการให้ผู้ใช้เขียนคำสั่ง console.log ที่มีอยู่เป็น bugout.log นั่นคือสิ่งที่ฉันหมายถึงโดยไวยากรณ์พิเศษ ดูเหมือนว่าจะไม่มีวิธีข้ามเบราว์เซอร์ในครั้งนี้
Lukus

ไม่มันไม่ได้ผลสำหรับเรา เราจำเป็นต้องบันทึกบันทึกผลการทดสอบเว็บไซต์ที่ซับซ้อนด้วยสคริปต์ของบุคคลที่สามจำนวนมากซึ่งทำงานบนโดเมนที่แตกต่างกันและเราไม่สามารถเปลี่ยนแปลงส่วนใหญ่ได้
Mike Keskinov

23

ฉันพบวิธีที่ดีและง่ายสำหรับสิ่งนี้

  1. ในคอนโซล - คลิกขวาบนวัตถุที่ล็อกคอนโซล

  2. คลิกที่ 'จัดเก็บเป็นตัวแปรทั่วโลก'

  3. ดูชื่อของตัวแปรใหม่ - เช่นตัวแปร name1

  4. พิมพ์ในคอนโซล: JSON.stringify (variableName1)

  5. คัดลอกเนื้อหาสตริงตัวแปร: เช่น {"a": 1, "b": 2, "c": 3}

ป้อนคำอธิบายรูปภาพที่นี่

  1. ไปที่เครื่องมือแก้ไขออนไลน์ JSON: เช่นhttps://jsoneditoronline.org/

ป้อนคำอธิบายรูปภาพที่นี่


1
ดูเหมือนว่า clunky บนพื้นผิว แต่มันใช้งานได้ดีทีเดียว ในรุ่นต่อมาที่ด้านล่างของผลลัพธ์จะมีปุ่ม "คัดลอก" ฉันกดปุ่มนั้นจากนั้นมีสคริปต์ขนาดเล็กที่บันทึกคลิปบอร์ดเป็นไฟล์. json และเปิดใน Visual Studio ซึ่งอ่านได้ง่ายมาก การเปลี่ยนแปลงเดียวคือฉันทำ JSON.stringify (temp1, null, 2) เพื่อให้อ่านง่ายขึ้น เคล็ดลับด้านล่างเพื่อบันทึกคอนโซลทำงานได้ดีเช่นกัน
ลุย Hatler

8

เพื่อการใช้งานไฟล์บันทึกที่ดีขึ้น (โดยไม่ต้องใช้ Chrome-debug)

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

แทนที่จะ --v=1เป็นข้อมูลที่มากเกินไป

มันจะยังคงให้ข้อผิดพลาดและคำเตือนเหมือนที่คุณมักจะเห็นในคอนโซล Chrome

อัปเดต 18 พฤษภาคม 2020: อันที่จริงฉันคิดว่านี่ไม่เป็นความจริงอีกต่อไป ฉันไม่พบข้อความคอนโซลภายในระดับการบันทึกนี้


7

สิ่งนี้อาจเป็นประโยชน์หรือไม่ก็ได้ แต่ใน Windows คุณสามารถอ่านบันทึกของคอนโซลโดยใช้การติดตามเหตุการณ์สำหรับ Windows

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

การทดสอบการรวมระบบของเราทำงานใน. NET ดังนั้นฉันจึงใช้วิธีนี้เพื่อเพิ่มบันทึกการทำงานคอนโซลให้กับผลการทดสอบของเรา ฉันได้ทำโครงการคอนโซลตัวอย่างเพื่อสาธิตที่นี่: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 ดูเหมือนจะไม่ทำงานกับ Chrome เวอร์ชันล่าสุด


3

มีคำตอบที่ดีมากมาย แต่ทำไมไม่ใช้ JSON.stringify (your_variable)? จากนั้นนำเนื้อหาผ่านการคัดลอกและวาง (ลบเครื่องหมายคำพูดภายนอก) ฉันโพสต์คำตอบเดียวกันนี้ได้ที่: วิธีบันทึกผลลัพธ์ของ console.log (วัตถุ) ไปยังไฟล์ได้อย่างไร


1
สำหรับปัญหาเกี่ยวกับ" Uncaught TypeError: การแปลงโครงสร้างวงกลมเพื่อ JSON "บางทีนี่อาจจะช่วย
KtX2SkD

2

มีเครื่องมือโอเพนซอร์สอีกตัวที่ช่วยให้คุณสามารถบันทึกconsole.logผลลัพธ์ทั้งหมดในไฟล์บนเซิร์ฟเวอร์ของคุณ - JS LogFlush (plug!)

JS LogFlushเป็นโซลูชั่นการบันทึก JavaScript แบบบูรณาการซึ่งรวมถึง:

  • ข้ามเบราว์เซอร์ UI- น้อยแทน console.log - บนฝั่งไคลเอ็นต์
  • ระบบจัดเก็บข้อมูลบันทึก - บนฝั่งเซิร์ฟเวอร์

การสาธิต


2

หากคุณใช้เซิร์ฟเวอร์ Apache บนโลคัลโฮสต์ของคุณ (อย่าทำสิ่งนี้บนเซิร์ฟเวอร์ที่ใช้งานจริง) คุณสามารถโพสต์ผลลัพธ์ลงในสคริปต์แทนที่จะเขียนลงในคอนโซล

ดังนั้นแทนที่จะเป็นconsole.logคุณสามารถเขียน:

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

จากนั้นsave.phpสามารถทำได้

<?php

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

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

1
ฉันหวังว่าจะไม่มีใครอัพโหลดสิ่งนี้ไปยังเซิร์ฟเวอร์ที่ใช้งานจริง🙁 นี่เป็นอันตรายต่อเซิร์ฟเวอร์
เดฟแมคอินทอช

คุณไม่ได้อ่านบรรทัดแรก: "ถ้าคุณใช้เซิร์ฟเวอร์ Apache บนโลคอลโฮสต์"
supersan

การลงคะแนนของคุณในโพสต์ของฉันนั้นไม่ได้เป็นสิ่งที่ถูกต้องเพราะมันอาจเป็นเรื่องโง่สำหรับคนที่ใช้เซิร์ฟเวอร์การผลิตใน "localhost" (โดยที่ JSONP ร้องขอข้อมูลโพสต์)
supersan

ฉันไม่เคยลงคะแนนให้กับคำตอบของคุณฉันแค่ชี้ให้เห็นถึงอันตรายที่สคริปต์นี้โพสต์หากอัปโหลดไปยังเซิร์ฟเวอร์ที่ให้บริการแก่สาธารณชน
เดฟ Mackintosh

1

บน Linux (อย่างน้อย) คุณสามารถตั้งค่า CHROME_LOG_FILE ในสภาพแวดล้อมเพื่อให้ chrome เขียนบันทึกของกิจกรรม Console เป็นไฟล์ที่กำหนดชื่อในแต่ละครั้งที่เรียกใช้ บันทึกถูกเขียนทับทุกครั้งที่เริ่มการทำงานของ Chrome ด้วยวิธีนี้หากคุณมีเซสชันอัตโนมัติที่ใช้งาน Chrome คุณไม่จำเป็นต้องเปลี่ยนวิธีเริ่มการทำงานของ Chrome และบันทึกจะอยู่ที่นั่นหลังจากเซสชันสิ้นสุดลง

ส่งออก CHROME_LOG_FILE = chrome.log


0

ทุกวันนี้มันง่ายมาก - คลิกขวาที่รายการใด ๆ ที่แสดงในบันทึกของคอนโซลแล้วเลือกบันทึกเป็นและบันทึกผลลัพธ์ของบันทึกทั้งหมดลงในไฟล์บนคอมพิวเตอร์ของคุณ


0

โซลูชันอื่น ๆ ในชุดข้อความนี้ไม่ได้ทำงานกับ mac ของฉัน นี่คือตัวบันทึกที่บันทึกการแทนสตริงเป็นระยะโดยใช้ ajax ใช้มันด้วยconsole.saveแทน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="";
  }
};

ขึ้นอยู่กับสิ่งที่คุณต้องการคุณสามารถบันทึกสตริงนั้นหรือเพียงแค่console.logมันและคัดลอกและวาง นี่คือ ajax สำหรับคุณในกรณีที่คุณต้องการบันทึก:

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

saveLog.phpควรผนวกข้อมูลไปยังที่ใดที่หนึ่งล็อกไฟล์ ฉันไม่ต้องการส่วนนั้นดังนั้นฉันจึงไม่รวมที่นี่ :)

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.