Czy jest jakiś sposób na wyłączenie wszystkich console.log
instrukcji w moim kodzie JavaScript do celów testowych?
javascript
debugging
console
Zack Burt
źródło
źródło
PICOLOG_LEVEL
(węzeł) i jest bardzo mały. Mniej niż 900 bajtów zminimalizowane i skompresowane. Oświadczenie: Jestem autorem.console
funkcji. Wystarczy spojrzeć na stapp.space/disable-javascript-console-on-productionOdpowiedzi:
Ponownie zdefiniuj funkcję console.log w skrypcie.
To wszystko, nie ma już komunikatów do konsoli.
EDYTOWAĆ:
Rozwijanie pomysłu Cide'a. Niestandardowy program rejestrujący, za pomocą którego można włączać / wyłączać logowanie z kodu.
Z mojej konsoli Firefox:
Jak korzystać z powyższego „loggera”? W gotowym zdarzeniu wywołaj logger.disableLogger, aby komunikaty konsoli nie były rejestrowane. Dodaj wywołania do logger.enableLogger i logger.disableLogger w ramach metody, dla której chcesz rejestrować wiadomości w konsoli.
źródło
console.log
... Dlaczego nie tylko mieć wartość logiczną i funkcję warunkową do logowania?Następujące informacje są dokładniejsze:
Spowoduje to wyzerowanie typowych metod w konsoli, jeśli taka istnieje, i można je wywoływać bez błędów i praktycznie bez narzutu wydajności. W przypadku przeglądarki takiej jak IE6 bez konsoli zostaną utworzone fałszywe metody, aby zapobiec błędom. Oczywiście w Firebug jest wiele innych funkcji, takich jak śledzenie, profil, czas itp. Można je dodać do listy, jeśli użyjesz ich w kodzie.
Możesz również sprawdzić, czy debugger ma te specjalne metody, czy nie (tj. IE) i wyzerować te, których nie obsługuje:
źródło
O ile mogę stwierdzić z dokumentacji , Firebug nie dostarcza żadnej zmiennej do przełączania stanu debugowania. Zamiast tego zawiń console.log () w opakowaniu, które warunkowo to wywołuje, tj .:
Aby nie musieć zmieniać wszystkich istniejących połączeń, możesz użyć tego:
źródło
Nie powinieneś!
Zastępowanie wbudowanych funkcji nie jest dobrą praktyką. Nie ma również gwarancji, że usuniesz wszystkie dane wyjściowe, inne używane biblioteki mogą cofnąć zmiany i istnieją inne funkcje, które mogą zapisywać na konsoli;
.dir()
,.warning()
,.error()
,.debug()
,.assert()
Itd.Jak niektórzy sugerują, możesz zdefiniować
DEBUG_MODE
zmienną i logować się warunkowo. W zależności od złożoności i charakteru kodu dobrym pomysłem może być napisanie własnego obiektu / funkcji rejestratora, który otacza obiekt konsoli i ma tę wbudowaną funkcję. To byłoby właściwe miejsce do radzenia sobie z oprzyrządowaniem .To powiedziawszy, do celów „testowania” możesz pisać testy zamiast drukować na konsoli. Jeśli nie przeprowadzasz żadnych testów, a te
console.log()
wiersze były tylko pomocą do napisania kodu, po prostu je usuń .źródło
"other libraries you use may revert your changes"
: jeśli wyłączęconsole.log
na samym początku, nie mogą wrócić do starej funkcji. Cóż, mogą przepisaćconsole.log
kod źródłowy, ale dlaczego?"it may be a good idea to write your own logger object/function that wraps around the console object"
: Zrobiłem to w przeszłości i to zły pomysł. Śledzenie danych wyjściowych konsoli odnosi się do opakowania, a nie do linii, która go wywołuje, co utrudnia debugowanie.console.log('Look ma, it reaches this point');
się do kodu, gdy wszystko inne zawiedzie, możesz rzeczywiście skorzystać zdebugger;
instrukcji."the code is coupled to that infrastructure"
: kod prawdopodobnie, ale wzór nie. Jeśli utworzysz wspólny podstawowy szablon dla swoich stron, na których funkcje rejestrowania są wyłączone, jest to logika, którą możesz zastosować wszędzie."the later shouldn't be browser-aware"
: cóż, więc nie powinieneś używać JS: PZdaję sobie sprawę, że jest to stary post, ale wciąż pojawia się na szczycie wyników Google, więc oto bardziej eleganckie rozwiązanie inne niż jQuery, które działa w najnowszych przeglądarkach Chrome, FF i IE.
źródło
Wiem, że zapytałeś, jak wyłączyć console.log, ale to może być to, czego naprawdę szukasz. W ten sposób nie musisz jawnie włączać ani wyłączać konsoli. To po prostu zapobiega tym nieznośnym błędom konsoli dla osób, które nie mają go otwartego lub zainstalowanego.
źródło
Wystarczy zmienić flagę,
DEBUG
aby zastąpić funkcję console.log. To powinno załatwić sprawę.źródło
function myLog(msg) { if (debug) { console.log(msg); } }
Dziwi mnie, że z tych wszystkich odpowiedzi nikt nie łączy:
Wybrałbym to:
źródło
Po tym, jak szukałem tego problemu i wypróbowałem go w mojej aplikacji Cordova, chcę tylko ostrzec każdego programistę, aby Windows Phone nie nadpisał
ponieważ aplikacja ulega awarii podczas uruchamiania.
Nie zawiesza się, jeśli rozwijasz się lokalnie, jeśli masz szczęście, ale przesłanie go do sklepu spowoduje awarię aplikacji.
Po prostu nadpisz
Jeśli potrzebujesz.
Działa to w mojej aplikacji:
źródło
Jeśli używasz IE7, konsola nie zostanie zdefiniowana. Bardziej przyjazna dla IE wersja to:
źródło
To hybryda odpowiedzi od SolutionYogi i Chrisa S. Utrzymuje numery linii i nazwa pliku console.log. Przykład jsFiddle .
źródło
Jeśli używasz Grunta, możesz dodać zadanie w celu usunięcia / skomentowania instrukcji console.log. Dlatego plik console.log nie jest już wywoływany.
https://www.npmjs.org/package/grunt-remove-logging-calls
źródło
Użyłem następujących, aby poradzić sobie z problemem: -
Ustaw debugowanie na 1, aby włączyć debugowanie. Następnie użyj funkcji rejestratora podczas wysyłania tekstu debugowania. Jest również skonfigurowany do akceptowania dwóch parametrów.
Więc zamiast
posługiwać się
źródło
Użyłem wcześniej rejestratora Winston .
Obecnie używam poniżej prostszego kodu z doświadczenia:
Ustaw zmienną środowiskową z wiersza poleceń cmd / (w systemie Windows):
Lub możesz mieć zmienną w swoim kodzie, jeśli chcesz, ale powyżej jest lepiej.
Uruchom ponownie polecenie cmd / wiersz poleceń lub edytor IDE /, taki jak Netbeans
Posiadaj poniższy kod:
Teraz użyj całej konsoli. * Jak poniżej:
Teraz, w oparciu o ustawienia LOG_LEVEL wprowadzone w punkcie 1 (jak
setx LOG_LEVEL log
i zrestartuj wiersz poleceń), niektóre z powyższych wydrukują, inne nie wydrukująMam nadzieję, że to pomogło.
źródło
Ostrzeżenie: bezwstydna wtyczka!
Możesz także użyć czegoś takiego jak mój obiekt JsTrace, aby mieć modułowe śledzenie z funkcją „przełączania” na poziomie modułu, aby włączyć tylko to, co chcesz w danym momencie zobaczyć.
http://jstrace.codeplex.com
(Ma również pakiet NuGet dla tych, którym zależy)
Wszystkie poziomy domyślnie mają wartość „błąd”, ale można je wyłączyć. Chociaż nie mogę wymyślić, dlaczego NIE chcesz widzieć błędów
Możesz je zmienić w następujący sposób:
Aby uzyskać więcej dokumentów, sprawdź dokumentację
T.
źródło
W tym adresie URL znalazłem trochę bardziej zaawansowany fragment kodu Wskazówka: Bust and Disable console.log :
źródło
Opracowałem bibliotekę dla tego przypadku użycia: https://github.com/sunnykgupta/jsLogger
Cechy:
log
,warn
,error
,info
.Jest otwarty na modyfikacje i będzie aktualizowany za każdym razem, gdy pojawią się nowe sugestie.
źródło
Powinno to zastąpić wszystkie metody window.console. Możesz umieścić go na samej górze sekcji skryptów, a jeśli korzystasz z frameworka PHP, możesz wydrukować ten kod tylko wtedy, gdy środowisko aplikacji jest produkcyjne lub jeśli jakiś rodzaj flagi debugowania jest wyłączony. Wtedy wszystkie logi w kodzie będą działać w środowiskach programistycznych lub w trybie debugowania.
źródło
Ja to napisałem:
Niestety nie działa w trybie ścisłym.
Więc używając,
console.fn.setEnabled = setEnabled
a następnieconsole.fn.setEnabled(false)
gdziefn
może być prawie każda funkcja konsoli. W twoim przypadku byłoby:Też napisałem:
więc po prostu musisz wprowadzić
FLAGS
wartość domyślną (przed wykonaniem powyższego kodu), na przykładFLAGS.LOG = false
funkcja dziennika byłaby domyślnie wyłączona, a mimo to można ją było włączyćconsole.log.setEnabled(true)
źródło
console.log.setEnabled(true)
i zacznij widzieć dziennikivar debug = false; debug && console.log(1/3)
rejestrowania dzienników jest użycie metody zwarciowej, takiej jak: ponieważ nie trzeba oceniać zawartości dziennika, jeśli nie jest włączona (w tym przypadku1/3
nie zostanie oceniona), nie trać linii dzwoniącego i można ją włączyć łatwo też (jeśli nie zmienia się jako consts).Moje kompleksowe rozwiązanie do wyłączania / zastępowania wszystkich
console.*
funkcji jest tutaj .Oczywiście upewnij się, że dołączasz to po sprawdzeniu niezbędnego kontekstu. Na przykład, tylko w wersji produkcyjnej, nie bombarduje żadnych innych kluczowych komponentów itp.
Cytując to tutaj:
źródło
Jeśli używasz gulp, możesz użyć tej wtyczki:
źródło
Uproszczenie https://stackoverflow.com/a/46189791/871166
źródło
Możesz użyć javascript AOP (np. Jquery-aop ), aby przechwycić wszystkie wywołania konsoli console.debug / log (około) i nie kontynuować faktycznego wywołania, jeśli jakaś zmienna globalna ma wartość false.
Możesz nawet wykonać wywołanie ajax (od czasu do czasu), aby zmienić zachowanie włączania / wyłączania dziennika na serwerze, co może być bardzo interesujące, aby umożliwić debugowanie w obliczu problemu w środowisku pomostowym lub podobnym.
źródło
Możesz użyć logeek , pozwala kontrolować widoczność wiadomości w dzienniku. Oto jak to zrobić:
Możesz także
logeek.show('nothing')
całkowicie wyłączyć każdy komunikat dziennika.źródło
Po przeprowadzeniu badań i rozwoju tego problemu, natknąłem się na to rozwiązanie, które ukryje ostrzeżenia / błędy / logi zgodnie z twoim wyborem.
Dodaj ten kod przed wtyczką JQuery (np. /../Jquery.min.js), nawet jeśli jest to kod JavaScript, który nie wymaga JQuery. Ponieważ niektóre ostrzeżenia znajdują się w samym JQuery.
Dzięki!!
źródło
Napisałem rozwiązanie ES2015 (używaj tylko z pakietem Webpack ).
Opis:
logger.disable()
- wyłącz wszystkie komunikaty konsolilogger.enable()
- włącz wszystkie komunikaty konsolilogger.log('message1', 'message2')
- działa dokładnie tak jak console.log.logger.warn('message1', 'message2')
- działa dokładnie tak samo jak console.warn.logger.error('message1', 'message2')
- działa dokładnie tak jak console.error. Szczęśliwego kodowania ..źródło