วิธีบันทึกเอาต์พุตของ console.log (object) ไปยังไฟล์


240

ฉันพยายามใช้JSON.stringify(object)แต่มันไม่ได้ลงไปในโครงสร้างและลำดับชั้นทั้งหมด

ในทางกลับกันconsole.log(object)ทำเช่นนั้น แต่ฉันไม่สามารถบันทึกได้

ในconsole.logผลลัพธ์ฉันสามารถขยายเด็กทีละคนและเลือกและคัดลอก / วาง แต่โครงสร้างนั้นใหญ่สำหรับมัน



คุณพยายามบันทึก console.log จากเบราว์เซอร์เพื่อการพัฒนาหรือไม่ มันอาจช่วยได้ถ้าคุณอธิบายว่าเป้าหมายสุดท้ายของคุณคืออะไร
รวิส

1
@MichaelS ฉันไม่พบวัตถุในไฟล์บันทึก
Eduard Florinescu

@travis ฉันต้องการส่งออกวัตถุไปยัง JSON แต่ลำดับชั้นทั้งหมดรวมถึงคุณสมบัติของเขาและคุณสมบัติของคุณสมบัติของเขา ฉันต้องการจริงเพื่อรับ "interface" ของวัตถุยกเว้นการใช้งานฟังก์ชั่น
Eduard Florinescu

2
@MichaelS คำถามเหล่านี้เกี่ยวกับการบันทึกบันทึกทั้งหมดคำถามนี้เกี่ยวกับการบันทึกวัตถุเดียว พวกเขาแตกต่างจากมุมมองของฉัน
James McMahon

คำตอบ:


307

อัปเดต: ตอนนี้คุณสามารถคลิกขวาได้แล้ว

คลิกขวา> บันทึกเป็นในแผงคอนโซลเพื่อบันทึกข้อความที่บันทึกลงในไฟล์

คำตอบเดิม:

คุณสามารถใช้ส่วนย่อย devtools นี้แสดงด้านล่างเพื่อสร้างวิธี console.save มันสร้าง FileBlob จากอินพุตจากนั้นดาวน์โหลดโดยอัตโนมัติ

(function(console){

console.save = function(data, filename){

    if(!data) {
        console.error('Console.save: No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
 }
})(console)

ที่มา: http://bgrins.github.io/devtools-snippets/#console-save


2
ฉันไม่ได้มาจากคนที่ "ขอบคุณ" ไปทุกที่จนกว่าคำตอบจะถูกบล็อกเพื่อป้องกันไม่ให้ 'ขอบคุณ' แต่ขอบคุณ. จะสร้างส่วนขยาย
Léon Pelletier

14
คุณลักษณะบันทึกเป็น ... ไม่ได้ช่วยอะไรจริงๆ มันไม่ได้บันทึกวัตถุ JSON แบบเต็ม (ในกรณีของฉันฉันมีอาร์เรย์ของวัตถุคุณสมบัติของวัตถุไม่ได้ถูกส่งออกในไฟล์เอาต์พุต) แต่หวังว่า devtool-snippet อันเก่าแก่ที่คุณวางไว้จะทำงานอย่างมีเสน่ห์ ขอบคุณ
M. Kejji

1
หากบันทึกตามที่ใช้งานไม่ได้แสดงว่าเป็นความถดถอย คุณควรยื่นข้อผิดพลาดที่ crbug.com
Patrick

1
@ ishandutta2007 คุณไม่ควรดาวน์โหลดตัวอย่างใด ๆ - มันถูกสร้างไว้ในคอนโซลทันที
Patrick

10
คลิกขวาจะไม่ทำการบันทึกวัตถุในระดับลึก
user1032531

246

ในกรณีที่คุณมีการบันทึกวัตถุ:

  • คลิกขวาที่วัตถุในคอนโซลและคลิก Store as a global variable
  • ผลลัพธ์จะเป็นสิ่งที่ต้องการ temp1
  • พิมพ์ในคอนโซล copy(temp1)
  • วางในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ

1
ฉันยังพบว่าการวางสิ่งนี้ลงในkonklone.io/jsonคุณสามารถนำสิ่งนี้ไปเป็นไฟล์ CSV และจากนั้นลงใน Excel ได้อย่างรวดเร็ว
PeteW

9
ฉันได้รับแค่ [object Object]
norbidrak

1
คอนโซลแจ้งว่า "ไม่ได้กำหนด" แต่นั่นไม่ได้หมายความว่าจะล้มเหลว มันยังคงคัดลอกไปยังคลิปบอร์ด :)
ดีน

1
ทางออกที่ดีเลิศ ขอบคุณมาก!
Ben Rondeau

1
โดยวิธีที่ง่ายและน่าเชื่อถือที่สุด!
Chris B.

130

คุณสามารถใช้คำสั่งAPI DevTools Utilities APIcopy()เพื่อคัดลอกการแทนสตริงของวัตถุที่ระบุไปยังคลิปบอร์ด

หากคุณมีวัตถุจำนวนมากจากนั้นคุณสามารถ JSON.stringify () วัตถุทั้งหมดของคุณและต่อท้ายพวกเขาไปยังสตริง ตอนนี้ใช้copy()วิธีการคัดลอกสตริงที่สมบูรณ์ไปยังคลิปบอร์ด


13
การใช้งาน: คัดลอก (วัตถุ)
ทอน

หมายเหตุ: คุณสามารถใช้require("util").format(...)แทนการใช้JSON.stringify()ทีละหนึ่ง โมดูล NPMทำงานได้ทั้งบน Node.js และเว็บเบราว์เซอร์ util
КонстантинВан

2
หากคุณพิมพ์ copy (object) และส่งคืน 'undefined' นั่นก็สำเร็จแล้ว ขณะนี้วัตถุอยู่ในคลิปบอร์ดของคุณและสามารถวางได้
คณบดี

7

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

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


ฉันได้รับข้อผิดพลาด -SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
Senura Dissanayake

@SenuraDissanayake ลองตอนนี้ - ฉันต้องยกเลิก PR ของใครบางคนที่ฉันไม่ได้ทดสอบ: /
inorganik

3

คลิกขวาที่คอนโซล .. คลิกบันทึกเป็น .. มันง่ายมาก .. คุณจะได้รับไฟล์ข้อความเอาต์พุต


โดยไม่มีข้อบ่งชี้ว่าเกิดข้อผิดพลาดอะไรกับการบันทึก vs
Paulius Liekis


2

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

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

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

การสาธิต


2

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

console.js: 230 เสร็จสิ้น: อาร์เรย์ (50000) [0 … 9999] [10000 … 19999] [20000 … 29999] [30000 … 39999] [40000 … 49999] ความยาว: 50000__proto__: อาร์เรย์ (0)

ซึ่งไม่มีประโยชน์กับใครเลย

สิ่งที่ฉันสิ้นสุดที่ทำถูกหาconsole.log(data)ในรหัสที่ลดลงเบรกพอยต์ที่มันแล้วพิมพ์JSON.Stringify(data)ในคอนโซลที่แสดงวัตถุทั้งหมดเป็นสตริง JSON และคอนโซล Chrome จริงช่วยให้คุณมีปุ่มเพื่อคัดลอก จากนั้นวางลงในโปรแกรมแก้ไขข้อความและมี JSON ของคุณ

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


มันบอกว่าในตอนท้ายข้อความยาวถูกตัดทอนถ้ากดคัดลอกมันคัดลอกทั้ง 20.6MB?
Eduard Florinescu

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