Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.04.2015, 18:51

Static Logger, oder Instanz übergeben

Hallo,

in einigen meiner Klassen verwende ich einen Logger, momentan static.
Sollte dieser nun static sein? Oder immer eine Instanz übergeben?
Cleaner wäre ja immer eine Instanz zu übergeben. Was sind hier Best practices?

lg

2

08.04.2015, 18:55

Du meinst ein Singleton? Nein, die sollte man wirklich nur in wenigen Speziellen Fällen benutzen. Hier wäre ganz klar die die Referenz auf eine Instanz zu empfehlen.

3

08.04.2015, 19:07

Also ich handhabe es auch als globale Variabel. Es hat einfach den Vorteil, das ich es eben nicht überall durchreichen muss. Das ist eine ätzende Arbeit und wird meiner Meinung nach auch schnell unübersichtlich.
Wenn man sich große Frameworks wie z.B. Qt anschaut, dort ist es auch eine globale Variabel und es funktioniert ja wunderbar.
Wenn es um sensible Daten gehen würde, die man eigentlich nur als const Variante zur Verfügung stellen will, wäre das wieder was anderes, aber hier kann man schwer irgendwas kaputt machen. Deswegen ein klares -> mach es global.

mfg

ps: Wenn du vll sehen möchtest, wie mein Log im Detail funktioniert, dann schau doch mal hier nach:
http://docu.simple2d-engine.de/group___log.html

den Code findest die hier:
https://github.com/anti-freak/SimpleLib/…ter/include/log
https://github.com/anti-freak/SimpleLib/…mpleLib/Log.cpp
https://github.com/anti-freak/SimpleLib/…mpleLib/Log.cpp
https://github.com/anti-freak/SimpleLib/…LFileOutput.cpp

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »anti-freak« (08.04.2015, 19:13)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

08.04.2015, 20:11

Stichwort Log-Factory oder Dependency-Injection-Framework (ala Spring oder Ninject). Durchreichen würde ich das nicht, das ist schon unschön, weil es zur Funktion der Klasse eigentlich nicht beiträgt. Das ist aber auch irgendwie die einzige Ausnahme derart.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

08.04.2015, 21:48

Eine globale Variable ist die mit Abstand einfachste Lösung und sollte für jedes normale Spiel praktikabel sein. Irgendwelche großen Server-Anwendungen haben vermutlich höhere Ansprüche and Logklassen, aber wenn du nur ein paar Dinge vom Programmablauf dokumentieren willst, brauchst du wirklich nicht viel.
Lieber dumm fragen, als dumm bleiben!

Julién

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

6

08.04.2015, 22:47

Ich finde das Problem selber interessant und habe etwas recherchiert und bin darauf gestoßen.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

7

08.04.2015, 22:59

Möchtest du darauf hinaus, dass wir besser Singletons statt global nutzen sollen?
Damit trittst du dann hier gleich eine Endlosdiskussion los :P

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

8

08.04.2015, 23:01

Singleton hängt vom Kontext ab. Generell ist von Singletons (besonders in Java) abzuraten. Solange man in Java die Anwendung aber nicht verteilt (z.B. auf einem Appserver(-Cluster)) laufen lässt, sodass mehrere Classloader am Werkeln sind, kann man sie aber sicher mit einem lazy-initialization-on-demand Holder implementieren.

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
public class Singleton{
    private Singleton() {}
 
    private static class Holder {
        private static final Something INSTANCE = new Something();
    }
 
    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}


Für eine Logging-Klasse kann man aber Singletons benutzen, spart einem auch Ärger, der bei normalen globalen Variablen schiefgehen kann (Mehrfacher Zugriff von verschiedenen Logger-Objekten auf eine Datei).
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

9

08.04.2015, 23:09

Boost.Log.
Eine der schönsten Lösungen, die ich kenne, wenn nicht die schönste.

MfG
Check

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

08.04.2015, 23:13

Es wäre natürlich schön zu wissen, um welche Sprache es sich beim OP handelt.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige