Viel wichtiger als die eigentliche Entscheidung, wie du es machst, ist es zu verstehen, was der jeweilige Unterschied ist.
Singleton ist Blödsinn, weil es sehr gut vorstellbar ist, dass man verschiedene Logs haben will. Singleton ist eigentlich immer Blödsinn, aber hier ganz besonders.
Eine globale Variable wäre natürlich das aller einfachste. Lustig wird es, wenn du dir überlegen musst, was bei mehreren Threads passieren soll. Wenn du eh nicht Multithreaded programmieren willst, musst du dir darüber natürlich keine Gedanken machen, aber es lohnt sich auf jeden Fall, das im Hinterkopf zu behalten, weil es gerade bei so etwas wie einem Log-Objekt ab und zu möglich ist, dass 2 Threads gleichzeitig darauf zugreifen und dann lustige Fehler passieren. Sowas kann man durch unterschiedliche Logger für unterschiedliche Threads lösen, oder aber indem man den Thread-Zugriff synchronisiert.
Ein Log-Objekt irgendwie durchzureichen, bis es überall ist, wo man mal was loggen will finde ich nicht so toll. Es hängt natürlich stark davon ab, was genau du loggen willst, und wie tief runter es dann dementsprechend gehen müsste. Wenn du nur ein bisschen Initialisierungskram in 4 verschiedenen Objekten loggen willst, ist es kein Thema, aber wenn du in jedem Mini-Objekt Debugausgaben haben willst, bläht das den ganzen Code ohne wirklichen Mehrwert ziemlich auf. Und die extra Arbeit hält dich evtl. davon ab, etwas zu loggen, was du ansonsten gerne getan hättest, und durch sowas können sehr leicht wichtige Informationen einfach verloren gehen.
Aber: Bist du dir sicher, dass du überhaupt eine Log-Klasse brauchst? Damit Debug-Ausgaben zu machen ist ein wenig fragwürdig, mit den meisten IDE kannst du viel besser debuggen. Und Fehler will man vielleicht live ausgeben und nicht in irgendeine Datei schreiben.
Ich persönlich benutze meistens cout und habe dann eben noch ein Konsolenfenster neben dem Spielfenster. Der Vorteil ist, dass du überhaupt nichts machen musst, es ist einfach da und funktioniert. In meinem Editor benutzt der Exception-Handler dagegen Message-Boxen um Fehler auszugeben, weil es da sehr leicht geht - in mein Spiel eine GUI nur für Fehlermeldungen einzubauen hätte hingegen wenig Sinn gemacht.
@BlueCobold: Was genau meinst du mit Factory? Die Aussage ist mir ein bisschen zu allgemein um zu verstehen, was genau du meinst und ich bin mir ziemlich sicher, dass der Fragesteller nicht einmal ansatzweise versteht, worum es da geht. Eine Factory ist für mich einfach nur irgendeine Art von Objekt, das dafür da ist, irgendwelche anderen Objekte zu erzeugen, das hat zunächst mal gar nichts mit der Zugriffsmethode zu tun, und daher auch nichts mit Singletons. Und jetzt in den Apache-Source schauen will ich wirklich nicht.