Vorherige Versionen Frühere Versionen von SLF4J können aus dem Hauptrepository heruntergeladen werden. Javadoc downloads Für jedes slf4j Modul können die entsprechenden javadoc Artefakte aus dem Maven zentralen Repository als javadoc. jar Dateien heruntergeladen werden. Eng verwandte Projekte sysout-over-slf4j-Modul leitet alle Anrufe an System. out und System. err an einen SLF4J-definierten Logger mit dem Namen der voll qualifizierten Klasse um, in der der System. out. println (oder ähnliches) Aufruf gemacht wurde Konfigurierbare Ebenen. SLF4J Test ist eine SLF4J-Implementierung, die auf die Erleichterung der einfacheren Einheitsprüfung des Logging-Codes fokussiert ist. Lidalia SLF4J Erweiterungen erlauben die Protokollierung auf einem Niveau, das zur Laufzeit und nicht zur Kompilierzeit bestimmt wird. Zusätzliche SLF4J-bezogene Software jdbcdslog ein Tracing-Tool für JDBC, von Andriy Kolyadenko Log4Ant. Von JWare Software log4jdbc. Ein JDBC-Treiber, der SQL-Informationen protokolliert, bevor er an einen zugrunde liegenden JDBC-Treiber von Arthur Blake SLF4Fx delegiert. Eine Open-Source-Logging-Suite für Flex, von Dmitry Motylev SLF4J Logger für JRuby on Rails und Einstellungen Datei. Von SonarSourcelog4j. properties Beispiel Ich verwende Log4j für Selen-Skript, wenn ich das Skript in Eclipse läuft, ist es richtig geben die Protokolle, aber ich laufe das Skript in ANT nicht immer ein Log. Können Sie mir bitte helfen Jede Idee, warum ich unter Warnung auf meine Glasfisch-Konsole stehe SEVERE: log4j: WARN Es konnten keine Aktenzeichen für Logger gefunden werden (org. displaytag. properties. TableProperties). Ich habe log4j in meinem Klassenordner log4j. rootLoggerDEBUG, testAppender log4j. appender. testAppendercom. webmethods. sc. logging. log4j. WmDailyFileAppender log4j. appender. testAppender. filelogtest1.log log4j. appender. testAppender. datePattern8217.8217yyyy-MM-ddHHmm log4j. appender. testAppender. Appendfalse log4j. appender. testAppender. layoutcom. webmethods. sc. log4j. PatternLayout log4j. appender. testAppender. layout. ConversionPatternmn Verhindern, dass interne log4j DEBUG Nachrichten aus der Verschmutzung der Ausgabe. Log4j. logger. org. apache. log4j. PropertyConfiguratorINFO log4j. logger. org. apache. log4j. config. PropertySetterINFO log4j. logger. org. apache. log4j. FileAppenderINFO Was ist Konsole in Bezug auf Linux. Ich bin vor einer komischen Situation, in der die erforderlichen Frühjahrsrahmenprotokolle in Eclipse-Konsole angemeldet sind, aber nicht in File Appender-Dateien in Windows. Einige andere Protokolle werden protokolliert. Seine nur Frühjahr verwandt, die nicht angemeldet sind Datei, sondern wird in eclipse Konsole angemeldet. In meiner linux-produktionsbox kann ich auch sehen, dass in den Dateien die Frühjahrsblöcke nicht besiedelt sind. So möchte ich überprüfen, wie über Konsolenprotokolle Ich suche um ein bisschen, aber muss alles aussehen, wo die Konsole sich in LinuxUnix-Box präsentiert. Was ist log4cpp Log4cpp ist eine Bibliothek von C-Klassen für die flexible Protokollierung von Dateien, Syslog, IDSA und anderen Zielen. Es ist nach der Log4j Java-Bibliothek modelliert und bleibt so nah an ihrer API wie es vernünftig ist. Quellen sind von der SourceForges Download-Seite verfügbar. Wir liefern keine Binärdateien, wegen der zahlreichen inkompatiblen ABIs (z. B. g 2.95 vs 2.96 vs 3.0 vs 3.2) und verschiedene Paketformate. Eine stabile, aber ältere Version von log4cpp ist im Debian-Stall verfügbar, siehe packages. debian. orgstablelibs. FreeBSD-Benutzer finden log4cpp in der Ports-Sammlung, siehe freebsd. orgportsdevel. html Log4cpp enthält Unterstützung für den Aufbau von RPMs, so dass Ihr eigenes aus der Quelle tar-ball ist so einfach wie As der Version 0.2.0 log4cpp kann mit autoconf auf bauen erstellt werden Plattformen, die es unterstützen. Einfach: Das wird log4cpp unter usrlocal installieren. Um in einer anderen Lokalisierung zu installieren, geben Sie --prefixltlocationgt beim Ausführen von configure an. Optionen für. configure Neben den üblichen. configure-Optionen wie --prefix sind noch einige andere verfügbar: --with-idsa Unterstützung für die Protokollierung von IDSA (jade. cs. uct. ac. zaidsaindex. html). Dies gibt Ihnen eine IdsaAppender Appender Klasse. --with-omnithreadsltpath-to-omniORBgt Aktiviere Multi-Threading-Unterstützung mit omniORB4s omniThreads MT Abstraktionsbibliothek (omniorb. org). Configure erwartet, dass die omnithread-Header-Dateien in ltpath-to-omniORBgtinclude und die Bibliothek in ltpath-to-omniORBltlib liegen, d. h. nicht in einem plattformspezifischen Unterverzeichnis. Symlinks erstellen, wo nötig. NB. OmniORB4 ist erforderlich: omniORB3 wird nicht ausreichen, da es keine ausreichende Unterstützung für fadenspezifische Daten gibt. Im Moment (August 2002) omniORB4 ist in Beta, aber die meisten Teile und speziell die Threading-Bibliothek scheinen ziemlich stabil zu sein. --with-pthreads Aktivieren Sie Multi-Threading-Unterstützung mit der pthread POSIX threads Bibliothek. Diese Option schließt sich gegenseitig mit --with-omnithreads aus. --enable-doxyen Ermöglicht die Erstellung von API-Dokumentation durch Dimitri van Heeschs Doxygen-Tool (doxygen. org). Standardmäßig, wenn doxygen im Suchpfad gefunden werden kann. --enable-html-docs Wenn doxygen aktiviert ist, muss man HTML-formatierte Dokumentation generieren. --enable-latex-docs Wenn doxygen aktiviert ist, muss es LaTeX formatierte Dokumentation generieren. --enable-dot Lassen Sie Doxygen das Punkt-Tool von GraphViz (graphviz. org) verwenden, um seine Graphen zurückzuziehen. --disable-remote-syslog Exclude RemoteSyslogAppender aus Build (standardmäßig enthalten) --disable-smtp SmtpAppender aus dem Build ausschließen (standardmäßig enthalten) Notizen für bestimmte Plattformen erstellen nix-g-Compiler Log4cpp sollte ohne Änderung an jedem anständigen nix-System mit bauen G und GNU machen. Die primäre Entwicklungsplattform ist RedHat Linux 7.3, die g 2.96-rh hat, aber das Ziel ist, mit ab 2.95 kompatibel zu sein. Wenn g 3.x weithin angenommen wurde, können wir Unterstützung für ältere g-Versionen fallen lassen. Solaris - Sun CC Compiler Zusammenstellung mit Suns CC Compiler erfordert die Einstellung von Umgebungsvariablen. Auch statische Bibliotheken scheinen nicht zu arbeiten. Kurz gesagt: Win32 - VS2010 Verwenden Sie den Arbeitsbereich und die Projektdateien im Unterverzeichnis msvc10. (Möglicherweise müssen Sie includeelog4cppconfig-win32.h und die Projektdateien an Ihre speziellen Bedürfnisse anpassen) Win32 - MSVC 6 Verwenden Sie den Arbeitsbereich und die Projektdateien im Unterverzeichnis msvc6. Möglicherweise müssen Sie includeelog4cppconfig-win32.h und die Projektdateien auf Ihre speziellen Bedürfnisse anpassen. Win32 - MSVC 5 Das Erstellen von log4cpp mit MSVC 5 wird nicht unterstützt und wird nicht sein, es sei denn, jemand kann einen Weg finden, dies zu tun, ohne den Quellcode zu verstümmeln. Win32 - Borland C Builder 5 Verwenden Sie das Projekt und machen Sie Dateien im Unterverzeichnis bcb5. Win32 - Cygwin Verwendung. configure make make install. Seien Sie gewarnt, dass es sehr wenige Erfolgs - oder Misserfolg-Berichte für diese Plattform gegeben hat, also funktioniert es auch sehr reibungslos oder niemand benutzt log4cpp mit Cygwin :-) OpenVMS Edit includeelog4cppconfig-openvms. h, wenn Sie unterschiedliche Einstellungen benötigen. Dies wurde nur auf OpenVMS Alpha v7.3 und Compaq C V6.3-020 getestet. 1) Kopiere das src und das Include-Verzeichnis (einschließlich aller Inhalte und Unterverzeichnisse) auf dein OpenVMS-System. 2) Kompilieren Sie jede Quelldatei (.CPP und. C im src-Verzeichnis) nacheinander durch den folgenden Befehl. Etc Bitte ersetzen Sie einen korrekten Pfad für Ihr Include-Verzeichnis. Im Include-Parameter wird ein Unix-Style-Verzeichnisname angefordert. In diesem Beispiel wird der Pfad A1DKBO: USER. TONY. PROJECT. LOG4CPP. INCLUDE Ein Repository-Verzeichnis wird hier auch als A1DKB0: USER. TONY. PROJECT. LOG4CPP. REPOSITORY angegeben. 3) Erstellen Sie eine statische Bibliothek, LOG4CPP. OLB 4) Setzen Sie alle kompilierten OBJ-Dateien in die LOG4CPP. OLB. Etc 5) Verknüpfe ein Programm mit log4cpp. olb. Z. B. Ab Version 0.2.1 ist diese Bibliothek unter der Lesser General Public License anstelle der General Public License lizenziert. Es sind keine weiteren Lizenzänderungen geplant :-). API Die von Doxygen erzeugte Dokumentation finden Sie hier. Die Solaris Developer Connection bietet einen Artikel von Mo Budlon über die Verwendung von log4cpp 0.2.x, genannt Logging und Tracing in C vereinfacht. Empfohlene Lektüre, wenn Sie versuchen, herauszufinden, wie man log4cpp einsetzt 1. ALLGEMEINES 1.1. Was ist Log für C Log für C ist eine Bibliothek von C-Klassen für die flexible Protokollierung von Dateien, Syslog und anderen Destinationen. Es ist nach dem Log für Java-Bibliothek (jakarta. apache. orglog4j) modelliert und bleibt so nah an ihrer API wie es vernünftig ist. 1.2 Wie ist Log für C im Zusammenhang mit Log4j Ist es ein gerader Port Log for C bemüht sich, eine ähnliche Schnittstelle für die Anmeldung in C wie Log4j bietet in Java zu liefern. Allerdings ist die Implementierung keine Übersetzung des Java-Codes. Also in diesem Sinne ist es kein Hafen von Log4j. Natürlich hat Log für C viele seiner Konzepte zu log4j verdanken. 1.3. Was ist der Name dieses Projekts, log für C oder log4cpp Der offizielle lange Name des Projektes ist Log für C, aber in der Praxis hat sich der Kurzname log4cpp als überzeugter erwiesen. 1.4. Unter der Lizenz ist Log for C verfügbar ab Version 0.2.1 Log für C wird unter der GNU Lesser General Public License (LGPL) veröffentlicht. Versionen, die zuvor unter der GPL veröffentlicht wurden. Sehen Sie die Lizenz-Diskussion auf dem Forum bei SourceForge für die Motivationen hinter Umstellung von GPL auf LGPL. 1.5 Unsere Rechtsabteilung mag die LGPL nicht, können Sie Log für C unter Lizenz XYZ freigeben. Lange Antwort: Technisch ist es möglich, wenn jeder Mitwirkende zustimmt, was aufgrund ihrer wachsenden Zahl immer schwieriger geworden ist. Aber auch wenn das überwunden werden könnte, wird es nicht passieren. Natürlich gewährt Ihnen die LGPL die Möglichkeit, die GPL anstelle der LGPL zu wählen, aber ich wette XYZ GPL. 2. ZUSAMMENSETZUNG UND INSTALLATION 3.1. Ive erfolgreich kompiliert log4cpp, jetzt wie verwende ich dieses Zeug Haben Sie einen Blick auf Einfache Beispiel und Eigenschaften Datei Beispiel. Für einige kleine Beispiele mit log4cpp, siehe das Unterverzeichnis Tests. Siehe auch den Dokumentationsabschnitt für einen Zeiger für die API-Dokumentation und weitere Nutzungsinformationen. 3.2 Ist log4cpp threadsicher Die gleiche Instanz des log4cpp :: Category-Objekts (ein Logger) kann aus verschiedenen Threads gleichzeitig ohne explizite Synchronisation verwendet werden. Der gleichzeitige Zugriff auf die Appender wird durch das Loggerobjekt selbst verhindert. Es wird interne Mutex jedes Mal sperren, wenn es um das Schreiben in Appender geht. So ist es zB sicher, aus den mehreren Threads zu demselben Logger zu schreiben, der an dieselbe Datei anhängt. Obwohl log4cpp so konfiguriert ist, dass zwei verschiedene Logger an denselben Appender angehängt werden (es kann sich um eine Datei handeln), dann gibt es keine Möglichkeit für das Logging-Framework, um ordnungsgemäße Ergänzung zu arrangieren und Dinge können sich verraten. So wird diese Art der Konfiguration nicht empfohlen. 3.3. Was sind mögliche Formatzeichen für die benutzerdefinierte Log-Meldung PatternLayout unterstützt folgende Satz von Formatzeichen: - ein einzelnes Prozentzeichen c - die Kategorie d - das daten Datumsformat: Das Datumsformat-Zeichen kann von einem Datumsformat-Spezifizierer gefolgt werden, der zwischen Klammern eingeschlossen ist. Zum Beispiel d oder d. Wenn kein Datumsformat-Spezifizierer gegeben wird, wird folgendes Format verwendet: Mi Jan 02 02:03:55 1980. Der Datumsformat-Spezifizierer gibt die gleiche Syntax wie die ANSI C-Funktion Strftime mit 1 Addition an. Der Zusatz ist der Spezifizierer l für Millisekunden, gefüllt mit Nullen, um 3 Ziffern zu machen. M - die Nachricht n - der plattformspezifische Zeilentrennzeichen p - die Priorität r - Millisekunden seit der Erstellung dieses Layouts. R - Sekunden seit Jan 1, 1970 u - Uhr tickt seit Prozessstart x - der NDC t - Thread Name Standardmäßig ist ConversionPattern für PatternLayout auf mn gesetzt. 4. PROBLEME UND FEHLERMELDUNGEN 4.1. Ich bekomme Naming Kollision für ERROR erkannt. Bitte lesen Sie die FAQ für einen Workaround. Dies wird durch die Grobheit einiger Plattformen verursacht, die den Namespace mit einigen stumpfen Definitionen verstümmeln. Um genauer zu sein, enthält die Win32-API Definitionen von ERROR und DEBUG. Da der Präprozessor von C-Namensbereichen nicht bewusst ist, führt dies dazu, dass die Worte ERROR und DEBUG überall verliebt werden. Insbesondere steht dies im Widerspruch zu log4cpp :: Priorität :: ERROR und log4cpp :: Priorität :: DEBUG. Diese letzteren zwei Namen kommen aus log4j, also sind sie nicht etwas, das wir uns selbst gemacht haben. Sie Win32-Autoren hätten diese generischen Namen nicht rücksichtslos durch den Präprozessor beansprucht. Es gibt viel bessere Alternativen: Wenn sie es als Ganzzahlkonstante verwenden, deklariere es mit einem Sprachkonstrukt. Entweder enum oder static const int ERROR1 würde gut machen Verwenden Sie einen weniger generischen Namen wie WIN32APIERROR, um Namenskonflikte weniger wahrscheinlich zu machen. Falls sie es als Flag für eine bedingte Kompilierung verwenden, verwenden Sie DEBUG DEBUG und falls definiert (DEBUG). In diesem Fall würde der Präprozessor einfach alle Vorkommen von DEBUG im Quellcode mit DEBUG ersetzen, wodurch alles intakt bleibt. Natürlich wäre die richtige Lösung, wenn die beleidigende Partei eine der oben genannten Methoden verwenden würde, aber wir hätten doch eine gewisse Zeit dafür warten müssen. Als Alternative kann log4cpp diese umgehen. Der Workaround-Code wird aktiviert, indem Sie LOG4CPPFIXERRORCOLLISION 1 definieren, bevor Sie alle log4cpp-Header-Dateien einfügen und alle Plattform-Header einschließen. Für Win32-Plattformen ist diese Definition bereits in log4cppconfig-win32.h enthalten. Sobald log4cpp auf die log4j 1.2 API aktualisiert wurde, können wir dieses Problem beheben, indem wir die neuen Namen für Log-Levels annehmen. 4.2. Ich versuche, das log4cpp Paket mit dem SunWorkshop Compiler (CC) auf einer Solaris 7 Maschine zu kompilieren. Die Bibliothek baut, aber der Testmain-Code kann nicht richtig verknüpfen. Eine ordnungsgemäße Lösung für dieses Problem wurde noch nicht gefunden (Vorschläge sind willkommen), aber James Emery berichtete über Erfolg mit dem folgenden Workaround: Deaktivieren Sie den Aufbau der statischen Bibliothek Ändern Sie den Linker von usrucbld zu CC und aktivieren Sie den unabhängigen Code (pic). Kurz gesagt, konfigurieren mit: 4.3. Configure kann snprintf () auf der Plattform XYZ nicht erkennen. Configure überprüft nicht nur auf das Vorhandensein einer snprintf () - Funktion, sondern auch für die C99-Kompatibilität. Insbesondere sollte snprintf () den String-Size-Parameter strikt ehren, um mögliche Pufferüberlaufprobleme zu vermeiden. Log4cpp fällt auf eine alternative snprintf () - Implementierung zurück, wenn das Betriebssystem nicht korrekt ist. Beispiel main. cpp-Datei, die sich auf Konsole und in Datei program. log anmeldet. Logger und Appender werden manuell erstellt und konfiguriert. Beispiel nutzt sowohl die funktionstüchtige Protokollierung als auch die Stream-Style-Protokollierung. Konsolenausgabe für dieses Beispiel Beispiel main. cpp-Datei, die die Protokollierungskonfigurationsdatei log4cpp. properties verwendet Konfigurationsdatei für die Verwendung mit diesem Code Konsolenausgabe für dieses Beispiel Es gibt drei Logger (einschließlich Root) und drei Appender. Root-Logger leitet alle eigenen Eingaben und Eingabe seines Nachkommens auf die Konsole um. Nachfolger Sub1 schreibt in zwei Dateien, Filterung Ausgabe durch Nachricht Priorität für die zweite von ihnen. Nachkomme sub12 schreibt auch in Rolldatei. Die Protokolldatei A3.log wird umgerollt, sobald sie das Limit von 200 Bytes erreicht hat, eine Sicherungsprotokolldatei wird beibehalten. Log4cpp ist auch direkt über CVS verfügbar, siehe die SourceForge CVS Seite für Anleitungen. CVS hat derzeit zwei Zweige: für log4cpp Entwicklung für die Pflege von log4cpp-stable (0.2.x) Jede Version erhält ein Tag namens RELxyz. Um mit einer frisch ausgecheckten Log4cpp-Revision zu beginnen, führen Sie bitte zuerst. autogen. sh aus. Dies wird erstellen. configure und die notwendigen Makefile. ins. Youll muss mindestens autoconf 2.50, automake 1.6.0 und libtool 1.4. WARNUNG: Freigaben aus der Entwicklungsbranche sind eine laufende Arbeit und können Ihren Desktop nicht bauen, abstürzen oder neu dekorieren. 1.1.2rc1 - master branch (04 April 2015) Kleine Fixes, DailyRollingFile Appender, Tests, Optionen zur Deaktivierung von Support für smtp und syslog 1.1.1 - stabiler Zweig (26 November 2013) Kleine Code - und Projektdatei-Fixes. 1.1rc3 - Entwicklungszweig (18. Oktober 2012) Erstellte Bauprojekte für MSVC10 (VS2010). Kleine Code-Fixes. 0.3.4 - Entwicklungsbranche (28. Oktober 2002) Feste baut für MSVC6 und MSVC7. Log4cppCleanup wurde entfernt. 0.3.3 - Entwicklungszweig (26. Oktober 2002) Fixed 628211: Build-Fehler auf MSVC 6.0. Fixed 625811: Log-Anlage in RemoteSyslogAppender. Möglicherweise fixiert 415160: stürzt mit dynamischer Bibliothek auf Solaris 2.6 ab. Ersetzte PatternLayout durch eine neue, schnellere und vollständigere Implementierung. 0.3.2 - Entwicklungszweig (5. Oktober 2002) Fixed 614903: Kompilierungsproblem bei Sun CC 5.3. Fehlende MSVC6.dsp Dateien hinzugefügt. Feste Protokollanlage in RemoteSyslogAppender. Feste Verlagerung von log4cpp-devel RPM. 0.3.2rc5 - Entwicklungsbranche (5. Oktober 2002) Zusammengeführt 604991: Unterstützung für die Einstellung von Additivie in PropertyConfig. Zusammengeführt 605143: Unterstützung für die Kompilierung in QNX Neutrino. 0.3.2rc4 - Entwicklungsbranche (16. August 2002) Feste Last-Minute-ups, die die Kompilierung sowohl auf nix - als auch auf Win32-Plattformen verhinderten. 0.3.2rc2 - Entwicklungsbranche (12. August 2002) Unterstützung für POSIX-Threads hinzugefügt. Added PropertyConfigurator hinzugefügt. Umgeordnete Unterlagen. Fixed verschiedene Bugs. 0.3.2rc1 - Entwicklungsbranche (19. Juni 2002) Unterstützung für Win32-Threads hinzugefügt. NTEventLogAppender hinzugefügt. Win32DebugAppender hinzugefügt. Fixed NDC-Kontext Problem, wenn Tiefe gt 2. hinzugefügt aclocal Unterstützung. 0.3.1 - Entwicklungsbranche (4. April 2002) RollingFileAppender-Klasse hinzugefügt. Fehler behoben 572467: Ungültiger Iteratorverbrauch. Fehler behoben 527475: format string bug. Fehler behoben 530332: fehlende std :: spezifizierer. Behandelte Feature-Anfragen 536668, 527760, 527381. 0.3.0 - Entwicklungsbranche (18. Februar 2002) Zusätzliche experimentelle Unterstützung für Multi-Thread-Anwendungen. Diese Implementierung verwendet omniORB4s Threading Bibliothek. Andere Threading-Bibliotheken, wie Boosts, können ebenfalls verwendet werden, aber dies wurde noch nicht implementiert. 0.2.7 - stabiler Zweig (27 Januari 2002) Unterstützung für mehrere Appensders pro Kategorie hinzugefügt (Feature Request 501360). Fixed-Variable-Bug in SyslogAppender (Bug 499315) Fixed Memory Leck in SyslogAppender und RemoteSyslogAppender (Bug 499524) Fixed Compile Problem in Filter (Bug) Fixed Config File Parse Problem in SimpleConfigurator (Bug 500766) Hinzugefügt Methoden für die Protokollierung auf FATAL-Ebene (Bug 504314 ) Fixed Win32 kompilieren Problem (Bug 506907) 0.2.6 (11. Dezember 2001) Vorläufige Unterstützung für OpenVMS hinzugefügt. PatternLayout, SimpleConfigurator und RemoteSyslogAppender hinzugefügt. 0,2,5 (11. Juni 2001) Einbeziehung der Unterstützung für Borland C Builder. Bibliothek Version 1.0.0: Diese Version ist nicht binär kompatibel mit vorherigen. (Version Update sollte in 0.2.4 durchgeführt worden sein). 0,2.2 (04. März 2001) Einbindung der Win32-Plattform (MSVC 6.0) 0.2.1 (15. Februar 2001) Lizenzänderung auf LGPL. 0.2.0 (10. Dezember 2000) log4cpp verwendet jetzt autoconf und automake. Die neueste stabile Version ist 1.1.1 log4cpp wird seit Version 1.1.1 verschoben, cvs ist seitdem veraltet ab Ab Version 0.3.0 hat log4cpp einen separaten Stall - und Entwicklungszweig. Releases x. y.z wo y ist sogar als stabil und diejenigen, wo y ist ungerade sind experimentell (was bedeutet, dass einige oder alle Features können gebrochen werden). Releases von 0.2.x sind für Bug-Fixes nur, neue Features gehen in 0.3.x und schließlich 0.4.x. Coding auf Log4cpp wurde von mir (Bastiaan Bakker) Ende 2000 initiiert. Seitdem haben andere Leute das Projekt beigetreten oder beigetragen Code:
No comments:
Post a Comment