Console.log dosyasını Chrome'a ​​bir dosyaya kaydedin


Yanıtlar:


98

Aynı şeyi yapmam gerekiyordu ve bulduğum çözüm bu:

  1. Bayrakları kullanarak komut satırından günlüğe kaydetmeyi etkinleştirin :

    --enable-logging --v=1

    Bu, Chrome'un dahili olarak yaptığı her şeyi günlüğe kaydeder, ancak tüm console.log()iletileri de günlüğe kaydeder . Günlük dosyası çağrılır chrome_debug.logve içinde bulunur User Data Directory.

  2. Satırlar için aldığınız günlük dosyasına filtre uygulayın CONSOLE(\d+).

Konsol günlüklerinin görünmediğini unutmayın --incognito.


3
Mac OS'ımda çalışmıyor gibi görünüyor, dahili günlükler var ama Console.log yok ...
Nico

7
Bu, console.log bilgilerini günlük dosyasına kaydetmez. Windows 8'de
kodlama

4
Mac'te günlük dosyasını ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar

2
Bu hala OSX 10.10.3'te /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1günlüğe kaydedilmiş olarak çalışıyor~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb

3
İç krom günlüklerinden başka bir şey almıyorum. Benim console.log()hatlar bu dosyada hiçbir yerde bulunmaktadır. Herkes bunun için bir düzeltme var mı?
xandermonkey

187

İyi haberler

Chrome geliştirici araçları artık konsol çıktısını yerel olarak bir dosyaya kaydetmenize izin veriyor

  1. Konsolu açın
  2. Sağ tık
  3. "Farklı kaydet .." seçeneğini belirleyin

konsolu dosyaya kaydet

Chrome Geliştirici talimatlarını burada bulabilirsiniz .


3
Bu bir klavye kısayolu kullanılarak veya konsolda bir komut çalıştırılarak yapılabilir mi?
Sarthak Singhal

1
Burada tüm devTools kısayollarının listesi developer.chrome.com/devtools/docs/shortcuts
adardesign

11
Bu yığın iz kopyalamak gibi görünmüyor
Michael

2
Bu dosyayı tekrar konsolda açabilir misiniz? Eğer öyleyse, bunu nasıl yapıyorsun?
Mahathi Vempati

7
Bunun nesneleri genişletmeyeceğini unutmayın; yine de büyük nesneleri kesilmiş biçiminde yazdırır, örn {a: 1, b: 2, c: 3, ...}.
Galen Long

29

Sadece bunu yapan açık kaynaklı bir javascript eklentisi var, ancak herhangi bir tarayıcı için - 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. Ayrıca, tüm günlük kaydı ifadelerinizi kaldırmak zorunda kalmadan tek bir yerde canlı günlük kaydı arasında geçiş yapabilirsiniz.


4
Referans olarak, bu harika bir araç gibi görünse de, görüntü yükleri başarısız olduğunda veya diğer yerleşik konsol çıktılarında olduğu gibi tarayıcıdan çıktı yakalamaz ve özel bir sözdizimi kullanarak günlük ifadelerinizi yeniden yazmanızı gerektirir.
Lukus

@Lukus kesinlikle tarayıcı çıktısını yakalamayacak (bunu yapmak için bir maymun yamasına ihtiyacınız olacak) ama özel bir sözdizimi gerekli değil. console.log
inorganik ile

1
@Inorganik Konsol çıktısını yakalamak için selenyum testlerinin bir yolunu arıyordum, ancak bir test hizmeti için kullanılacağı için kullanıcının web sitelerini kontrol etmiyoruz. Aracınızın harika olduğunu düşünüyorum, ancak bir kullanıcının mevcut console.log deyimlerini bugout.log olarak yeniden yazmasını gerektirecek, özel sözdizimiyle kastettiğim bu. Şimdiye kadar görünüyor ki, bu sefer bunu yapmak için çapraz tarayıcı yolu yoktur.
Lukus

Hayır, bizim için işe yaramaz. Karmaşık web sitesinin, farklı alanlarda çalışan çok sayıda 3. taraf komut dosyasıyla test edilmesinin sonucunu kaydetmemiz gerekiyor ve bunların çoğunu değiştiremeyiz.
Mike Keskinov

24

Bunun için harika ve kolay bir yol buldum.

  1. Konsolda - konsolda kayıtlı nesneyi sağ tıklatın

  2. 'Global değişken olarak depola'yı tıklayın

  3. Yeni değişkenin adına bakın - örneğin, değişkenAdı1

  4. Konsola yazın: JSON.stringify (değişkenAdı1)

  5. Değişken dize içeriğini kopyalayın: ör. {"A": 1, "b": 2, "c": 3}

resim açıklamasını buraya girin

  1. Bazı JSON çevrimiçi düzenleyicisine gidin: örn. Https://jsoneditoronline.org/

resim açıklamasını buraya girin


1
Yüzeyde tıknaz görünüyor ama oldukça iyi çalışıyor. Daha sonraki sürümlerde, çıktının altında bir "Kopyala" düğmesi bulunur. Ben sadece basın, sonra pano bir .json dosyası olarak kaydeder ve çok okunabilir Visual Studio açılır küçük bir komut dosyası var. Tek değişiklik, okumayı kolaylaştırmak için JSON.stringify (temp1, null, 2) yapıyorum. Konsolu kaydetmek için aşağıdaki hile de iyi çalışıyor.
Wade Hatler

8

Daha iyi günlük dosyası için (Chrome hata ayıklama saçmalık olmadan) şunu kullanın:

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

bunun yerine --v=1çok fazla bilgi var.

Yine de genellikle Chrome konsolunda gördüğünüz gibi hatalar ve uyarılar sağlar.

18 Mayıs 2020 güncellemesi: Aslında, bunun artık doğru olmadığını düşünüyorum. Bu günlük kaydı düzeyi ne olursa olsun konsol iletilerini bulamadım.


7

Bu yardımcı olabilir veya olmayabilir, ancak Windows'ta Windows için Olay İzlemeyi kullanarak konsol günlüğünü okuyabilirsiniz

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

Entegrasyon testlerimiz .NET'te çalıştırıldığından, konsol günlüğünü test çıktımıza eklemek için bu yöntemi kullanıyorum. Burada göstermek için örnek bir konsol projesi yaptım: https://github.com/jkells/chrome-trace

--enable-logging --v = 1, Chrome'un en son sürümünde çalışmıyor gibi görünüyor.



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

Yerel ana makinenizde bir Apache sunucusu çalıştırıyorsanız (bunu bir üretim sunucusunda yapma), sonuçları konsola yazmak yerine bir betiğe de gönderebilirsiniz.

Bunun yerine şunu console.logyazabilirsiniz:

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

Sonra save.phpbunu yapabilir

<?php

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

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

1
Umarım hiç kimse bunu üretimdeki bir sunucuya yüklemez hope. Bu sunucu için tehlike ile işlenir.
Dave Mackintosh

İlk satırı okumadınız: "Localhost'unuzda bir Apache sunucusu çalıştırıyorsanız"?
supersan

Mesajımın aşağı oyu haklı değil çünkü birisinin "localhost" üzerinde bir üretim sunucusu çalıştırması inanılmaz derecede aptalca olurdu (JSONP mesaj verileri ister).
supersan

Cevabınızı asla aşağıya oylamadım, sadece bu komut dosyasının halka açık bir sunucuya yüklendiğinde ortaya çıkardığı tehlikeye dikkat çektim.
Dave Mackintosh

1

Linux'ta (en azından), ortamdaki CHROME_LOG_FILE öğesinin, Chrome'un her çalıştığında adlandırılan dosyaya Konsol etkinliğinin günlüğünü yazmasını sağlayacak şekilde ayarlayabilirsiniz. Krom her başladığında günlüğün üzerine yazılır. Bu şekilde, krom çalıştıran otomatik bir oturumunuz varsa, kromun başlama şeklini değiştirmek için bir oturumunuz olmaz ve oturum sona erdikten sonra günlük oradadır.

dışa aktar CHROME_LOG_FILE = chrome.log


0

Bu günler çok kolay - konsol günlüğünde görüntülenen herhangi bir öğeye sağ tıklayın ve farklı kaydet'i seçin ve tüm günlük çıktısını bilgisayarınızdaki bir dosyaya kaydedin.


0

Bu konudaki diğer çözümler mac'umda çalışmadı. İşte ajax kullanarak aralıklı bir dize gösterimi kaydeden bir günlükçü. ile kullanmak console.saveyerineconsole.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="";
  }
};

neye ihtiyacınız olduğuna bağlı olarak, o dizeyi veya sadece console.logonu kaydedip kopyalayıp yapıştırabilirsiniz. kaydetmek istediğinizde sizin için bir 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.phpBir günlük dosyası yere veri ekle gerekir. O kısma ihtiyacım yoktu bu yüzden buraya dahil etmiyorum. :)

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

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.