Alle Konsolenfunktionen überschreiben

Benutzt man console.log oder console.debug für das Logging in JavaScript, so kann es zu Problemen kommen, wenn der ausführende Browser diese Konsolenfunktionen nicht kennt. Daher sollte man in diesem Fall die Konsolenfunktionen überschreiben:

if(!(window.console&&console.log)){
  (function(){
    var console = window.console = {};
    var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'markTimeline', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
    var length = methods.length;
    while (length--){
      console[methods[length]] = function(){};
    }
  }());
}

console.log() für Produktivumgebungen in JavaScript überschreiben

Wer viele console.log() Einträge in seinem JavaScript-Code hat, sollte diese Einträge beim Live-Schalten der Webseite unbedingt entfernen. Um auf Nummer sicher zu gehen, dass beim Endanwender keine Log-Einträge zu sehen sind, empfiehlt es sich, die console.log()-Funktion zu überschreiben und somit unbrauchbar zu machen:

var console = {};
console.log = function(){};

Ein Problem ist, dass Internet Explorer 8 und älter nicht mit console.log umgehen können. Stattdessen erscheint eine Fehlermeldung: 'console' is undefined. Daher empfiehlt es sich immer, auf console.log in der Produktivumgebung zu verzichten.

Man kann über einen Conditional Comment aber auch gezielt für IE8 und älter die Konsolenausgabe überschreiben (um die Fehleranzeige zu vermeiden):

<body>
  <!--[if lte IE 8]>
  <script type="text/javascript">
    var console = {};
    console.log = function(){};
  </script>
  <![endif]-->
  <script type="text/javascript">
    console.log('Hello World.'); // will not be shown in IE8 and lower
  </script>
</body>

Hinweis zu Conditional Comments:
gte steht für „greater than or equal“
gt steht für „greater than“
lte steht für „less than or equal“
lt steht für „less than“

Conditional Comments sollten außerdem möglichst früh (zum Beispiel im head-Bereich) einer HTML-Seite eingesetzt werden.

Mehr Infos siehe: Detecting Windows Internet Explorer More Effectively

Noch allgemeingültiger (und nicht ausschließlich auf den IE bezogen) ist folgender Patch:

<script type="text/javascript">
  if(typeof(console) == 'undefined'){
    var console = {};
    console.log = function(){};
  }
  console.log('Hello World.');
</script>

Wer auf das Logging nicht verzichten will, der kann für ältere Browser (z.B. Internet Explorer 5 und Firefox 1.0) die Bibliothek log4javascript einbinden, um console.log verfügbar zu machen:

<script type="text/javascript" src="./js/log4javascript_lite.js"></script>
<script type="text/javascript">
  if (!window.console) this.console = { log: function(){} };
  console.log('Hello World'); // will not be shown in IE5 and greater
</script>