Console.log (nesne) çıktısını bir dosyaya nasıl kaydederim?


240

Kullanmayı denedim JSON.stringify(object), ancak tüm yapı ve hiyerarşiye inmiyor.

Öte yandan console.log(object)bunu yapıyor ama kaydedemiyorum.

Gelen console.logçıkış Bir bütün çocuklar birer genişletebilir ve seçip kopyalamak / yapıştırmak ancak yapı bunun için büyük olmaktır olabilir.



Konsol.log dosyasını geliştirme amacıyla tarayıcıdan kaydetmeye mi çalışıyorsunuz? Son hedefinizin ne olduğunu açıklarsanız yardımcı olabilir.
travis

1
@MichaelS Nesneyi günlük dosyasında bulamadım.
Eduard Florinescu

@travis Bir nesneyi JSON'a vermek istiyorum, ancak tüm hiyerarşi, ayrıca özellikleri ve özelliklerinin özellikleri. Pratikte fonksiyonların uygulanması dışında bir nesnenin "arayüzü" almak istiyorum.
Eduard Florinescu

2
@MichaelS, bu sorular günlüğün tamamını kaydetmekle ilgilidir, bu soru tek bir nesneyi kaydetmekle ilgilidir. Benim bakış açımdan farklılar.
James McMahon

Yanıtlar:


307

Güncelleme: Şimdi sadece sağ tıklayabilirsiniz

Günlüğe kaydedilen iletileri bir dosyaya kaydetmek için Konsol panelinde> Farklı kaydet'e tıklayın.

Orijinal Yanıt:

Bir console.save yöntemi oluşturmak için aşağıda gösterilen bu devtools snippet'ini kullanabilirsiniz. Girişten bir FileBlob oluşturur ve otomatik olarak indirir.

(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)

Kaynak: http://bgrins.github.io/devtools-snippets/#console-save


2
Cevabı 'teşekkür' önlemek için bloke edilene kadar her yerde "Teşekkürler" bırakanlar değilim. Ama teşekkürler. Bir uzantı oluşturacağım.
Léon Pelletier

14
Farklı kaydet ... özelliği aslında yardımcı olmadı. Tam JSON nesnesini kaydetmiyor (benim durumumda, bir dizi nesne vardı, nesne özellikleri çıktı dosyasına aktarılmadı). Ama umarım yapıştırdığınız eski devtool pasajı bir cazibe gibi çalıştı. Teşekkür ederim
M. Kejji

1
işe yaramadı gibi kaydetmek, o zaman bir gerileme olduğunu. crbug.com'da hata bildirmelisiniz
Patrick

1
@ ishandutta2007 herhangi bir parçacığı indirmemelisiniz - şimdi konsola yerleştirilmiştir.
Patrick

10
Sağ tıklatma nesnenin derinlemesine kaydedilmesini sağlamaz.
user1032531

246

Günlüğe kaydedilmiş bir nesneniz varsa:

  • Konsoldaki nesneyi sağ tıklayın ve ardından Store as a global variable
  • çıktı gibi bir şey olacak temp1
  • konsolda yaz copy(temp1)
  • favori metin düzenleyicinize yapıştırın

1
Ayrıca bunu konklone.io/json'a yapıştırarak bunu hızlı bir şekilde bir CSV dosyasına ve oradan Excel'e alabileceğinizi buldum .
PeteW

9
Ben sadece [object Object] elde ediyorum
norbidrak

1
Konsol "tanımsız" diyor, ancak bu başarısız olduğu anlamına gelmez. Hala panoya kopyalar :)
Dean

1
HARİKA bir çözüm. Çok teşekkürler!
Ben Rondeau

1
Şimdiye kadar en basit ve en güvenilir çözüm!
Chris B.

130

Belirtilen nesnenin dize olarak temsilini panoya kopyalamak için Chrome DevTools Yardımcı Programları API copy()komutunu kullanabilirsiniz .

Çok sayıda nesneniz varsa, aslında tüm nesnelerinizi JSON.stringify () yapabilir ve bunları bir dizeye eklemeye devam edebilirsiniz. Şimdi copy()dizenin tamamını panoya kopyalamak için yöntemi kullanın.


13
Kullanım: kopya (nesne)
antoine

Not: tek tek uygulamak yerine kullanabilirsinizrequire("util").format(...)JSON.stringify() . NPM üzerinde modül hem node.js ve web tarayıcılarda çalışır. util
Константин Ван

2
Copy (object) yazarsanız ve 'undefined' döndürürse, bu aslında başarılı olur. Nesne şimdi panonuzda ve yapıştırılabilir.
Dean

7

Sadece bunu yapan açık kaynaklı bir javascript eklentisi var - debugout.js

Debugout.js kayıtlarını kaydeder ve uygulamanızın bunlara erişebilmesi için console.log'ları kaydeder. Tam açıklama, ben yazdım. Farklı türleri uygun şekilde biçimlendirir, iç içe geçmiş nesneleri ve dizileri işleyebilir ve isteğe bağlı olarak her günlüğün yanına bir zaman damgası koyabilir. Aynı zamanda canlı günlük kaydını tek bir yerde değiştirir.


Bir hata alıyorum -SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
Senura Dissanayake

@SenuraDissanayake şimdi deneyin - test etmediğim birinin PR'sini geri almak zorunda kaldım: /
inorganik

3

konsola sağ tıklayın .. farklı kaydet .. bu kadar basit .. bir çıktı metin dosyası alacaksınız


sadece hata vs günlüğü vs ne olduğunu herhangi bir gösterge olmadan.
Paulius Liekis


2

console.logSunucunuzdaki bir dosyaya tüm çıktıları kaydetmenizi sağlayan başka bir açık kaynaklı araç var - JS LogFlush (plug!).

JS LogFlush aşağıdakileri içeren entegre bir JavaScript günlük kaydı çözümüdür:

  • çapraz tarayıcı UI'sız console.log değiştirme - istemci tarafında.
  • günlük depolama sistemi - sunucu tarafında.

gösteri


2

Bu partiye gerçekten geç, ama belki birine yardım edecek. Çözümüm OP'nin sorunlu olarak tarif ettiği şeye benziyor, ancak belki de Chrome'un şimdi sunduğu bir özellik, ancak o zaman değil. Nesne konsola yazıldıktan sonra .log dosyasını sağ tıklatıp kaydetmeyi denedim, ancak bana tüm bunları veren bir metin dosyası oldu:

console.js: 230 Tamamlandı: Dizi (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] uzunluk: 50000__proto__: Dizi (0)

ki bu hiç kimsenin faydası değildi.

Yaptığım şey console.log(data), kodu bulmak, üzerine bir kesme noktası bıraktı ve sonra JSON.Stringify(data)tüm nesneyi bir JSON dizesi olarak görüntüleyen konsola yazdı ve Chrome konsolu aslında size kopyalamak için bir düğme veriyor . Sonra bir metin düzenleyicisine yapıştırın ve JSON'unuz

resim açıklamasını buraya girin


sonunda uzun metin kesildi diyor , eğer Kopyala basın 20.6MB tüm kopyalar?
Eduard Florinescu

1
@EduardFlorinescu evet, her şey
Adam Hey
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.