Log4j Download Binary Option

Logging-Praktiken Als eine Bibliothek HttpClient ist nicht zu diktieren, welche Logging-Framework der Benutzer verwenden muss. Daher verwendet HttpClient die Protokollierungsschnittstelle, die vom Commons-Protokollierungspaket bereitgestellt wird. Commons Logging bietet eine einfache und verallgemeinerte Protokollschnittstelle für verschiedene Protokollierungspakete. Durch die Verwendung von Commons Logging. HttpClient kann für eine Vielzahl unterschiedlicher Protokollierungsverhalten konfiguriert werden. Das bedeutet, dass der Benutzer eine Auswahl treffen muss, um welches Protokollierungswerkzeug es sich handelt. Standardmäßig unterstützt Commons Logging die folgenden Logging-Frameworks: Log4J java. util. logging SimpleLog (intern für Commons Logging) Durch die Implementierung einiger einfacher Schnittstellen kann Commons Logging erweitert werden, um grundsätzlich jedes andere benutzerdefinierte Logging-Framework zu unterstützen. Commons Logging versucht, automatisch das zu verwendende Protokollierungsframework zu ermitteln. Wenn es fehlschlägt, die erwartete auszuwählen, müssen Sie Commons Logging von Hand konfigurieren. Weitere Informationen finden Sie in der Commons Logging-Dokumentation. HttpClient führt zwei verschiedene Arten der Protokollierung durch: die Standardkontextprotokollierung, die in jeder Klasse verwendet wird, und die Drahtprotokollierung. Kontextprotokollierung Kontextprotokollierung enthält Informationen über den internen Vorgang von HttpClient, wenn es HTTP-Anforderungen ausführt. Jede Klasse hat ein eigenes Protokoll, das nach dem voll qualifizierten Namen der Klasse benannt ist. Zum Beispiel hat die Klasse HttpClient ein Protokoll mit dem Namen org. apachemons. httpclient. HttpClient. Da alle Klassen dieser Konvention folgen, ist es möglich, die Kontextprotokollierung für alle Klassen mit dem einzelnen Protokoll mit dem Namen org. apachemons. httpclient zu konfigurieren. Drahtprotokollierung Das Drahtprotokoll wird verwendet, um alle Daten zu protokollieren, die an und von Servern übertragen werden, wenn HTTP-Anforderungen ausgeführt werden. Dieses Protokoll sollte nur aktiviert werden, um Probleme zu debuggen, da es eine extrem große Menge an Protokolldaten erzeugt, einige davon im Binärformat. Da der Inhalt von HTTP-Requests für das Debugging normalerweise weniger wichtig ist als die HTTP-Header, wurden diese beiden Datentypen in unterschiedliche Drahtprotokolle aufgeteilt. Das Inhaltsprotokoll ist httpclient. wire. content und das Header-Protokoll ist httpclient. wire. header. Konfigurationsbeispiele Commons Logging kann an eine Vielzahl von Loggern zur Verarbeitung der tatsächlichen Ausgabe delegieren. Im Folgenden finden Sie Konfigurationsbeispiele für Commons Logging. Log4j und java. util. logging. Commons Logging Beispiele Commons Logging kommt mit einem einfachen Logger namens SimpleLog. Dieser Logger schreibt alle protokollierten Nachrichten an System. err. Die folgenden Beispiele zeigen, wie Sie Commons Logging über Systemeigenschaften konfigurieren können, um SimpleLog zu verwenden. Hinweis: Die Systemeigenschaften müssen gesetzt sein, bevor ein Verweis auf eine Commons Logging-Klasse erfolgt. Aktivieren Kopfdraht Kontext Protokollierung - Best für Debugging System. setProperty (org. apachemons. logging. Log, org. apachemons. logging. impl. SimpleLog) System. setProperty (org. apachemons. logging. simplelog. showdatetime, true) System. setProperty (Org. apachemons. logging. simplelog. log. httpclient. wire. header, debug) System. setProperty (org. apachemons. logging. simplelog. log. org. apachemons. httpclient, debug) Aktivieren Sie den Volldraht-Kontext (Header und Inhalt) Anmeldung System. setProperty (org. apachemons. logging. Log, org. apachemons. logging. impl. SimpleLog) System. setProperty (org. apachemons. logging. simplelog. showdatetime, true) System. setProperty (org. apachemons. logging. simplelog. log. httpclient. wire, debug) System. setProperty (org. apachemons. logging. simplelog. log. org. apachemons. httpclient, debug) Aktivieren gerade Zusammenhang Anmeldung System. setProperty (org. apachemons. logging. Log, org. apachemons. logging. impl. SimpleLog) System. setProperty (org. apachemons. logging. simplelog. showdatetime, true) System. setProperty (org. apachemons. logging. simplelog. log. org. apachemons. httpclient, debug) Log4j Beispiele Der einfachste Weg, Um Log4j zu konfigurieren ist über eine log4j. properties-Datei. Log4j liest und konfiguriert sich selbst automatisch mit einer Datei mit dem Namen log4j. properties, wenn er im Stammverzeichnis des Anwendungsklassenpfads vorhanden ist. Im Folgenden finden Sie einige Konfigurationsbeispiele von Log4j. Hinweis: Log4j ist nicht in der HttpClient-Distribution enthalten. Aktivieren der Headerdrahtkontextprotokollierung - am besten für das Debuggen log4j. rootLoggerINFO, stdout log4j. appender. stdoutorg. apache. log4j. ConsoleAppender log4j. appender. stdout. layoutorg. apache. log4j. PatternLayout log4j. appender. stdout. layout. ConversionPattern5p c mn log4j. logger. httpclient. wire. headerDEBUG log4j. logger. org. apachemons. httpclientDEBUG aktivieren Volldraht (Header und Inhalt) Kontext log4j. rootLoggerINFO Protokollierung, stdout log4j. appender. stdoutorg. apache. log4j. ConsoleAppender log4j. appender. stdout. layoutorg. apache. log4j. PatternLayout log4j. appender. stdout. layout. ConversionPattern5p c mn log4j. logger. httpclient. wireDEBUG log4j. logger. org. apachemons. httpclientDEBUG Protokollieren Sie die Datei für die Kontextprotokollierung log4j. rootLoggerINFO log4j. appender. stdoutorg. apache. Log4j. appender. stdout. layoutorg. apache. log4j. PatternLayout log4j. appender. stdout. layout. ConversionPattern5p c mn log4j. appender. Forg. apache. log4j. FileAppender log4j. appender. F.Filewire. log log4j. appender. F.layoutorg. apache. log4j. PatternLayout log4j. appender. F.layout. ConversionPattern 5p c mn log4j. logger. httpclient. wireDEBUG, F log4j. logger. org. apachemons. httpclientDEBUG, aktivieren stdout gerade Zusammenhang Anmeldung log4j. rootLoggerINFO, Stdout log4j. appender. stdoutorg. apache. log4j. ConsoleAppender log4j. appender. stdout. layoutorg. apache. log4j. PatternLayout log4j. appender. stdout. layout. ConversionPattern5p c mn log4j. logger. org. apachemons. httpclientDEBUG Beachten Sie, dass die Standardkonfiguration Für Log4J ist sehr ineffizient, da es bewirkt, dass alle Protokollierungsinformationen generiert werden, aber nicht tatsächlich irgendwo gesendet werden. Das Log4J-Handbuch ist die beste Referenz für das Konfigurieren von Log4J. Sie ist verfügbar unter logging. apache. org/log4j/docs/manual. html java. util. logging Beispiele Seit JDK 1.4 gibt es ein Paket java. util. logging, das ein Logging-Framework ähnlich Log4J bereitstellt. Standardmäßig liest es eine Konfigurationsdatei aus JAVAHOME / jre / lib / logging. properties, die diese (Kommentare gestrippt) sieht so aus: handlersjava. util. logging. ConsoleHandler. levelINFO java. util. logging. FileHandler. pattern h / javau. log java. util. logging. FileHandler. limit 50000 java. util. logging. FileHandler. count 1 java. util. logging. FileHandler. formatter java. util. logging. XMLFormatter java. util. logging. ConsoleHandler. level INFO java. util. logging. ConsoleHandler. formatter java. util. logging. SimpleFormatter com. xyz. foo. level SEVERE Um die Protokollierung anzupassen, sollte eine eigene logging. properties-Datei im Projektverzeichnis angelegt werden. Der Speicherort dieser Datei muss als Systemeigenschaft an die JVM übergeben werden. Dies kann, wie dies auf der Kommandozeile erfolgen: JAVAHOME / java - Djava. util. logging. config. fileHOME / myapp / logging. properties - classpath HOME / myapp / target / Klassen com. myapp. Main Alternativ LogManagerreadConfiguration (Input) können Verwendet werden, um die gewünschte Konfiguration zu übergeben. Aktivieren Kopfdraht Kontext Protokollierung - Best für Debugging. levelINFO handlersjava. util. logging. ConsoleHandler java. util. logging. ConsoleHandler. formatter java. util. logging. SimpleFormatter httpclient. wire. header. levelFINEST org. apachemons. httpclient. levelFINEST aktivieren Voll Draht (Header und Inhalt) Kontext Anmeldung. levelINFO handlersjava. util. logging. ConsoleHandler java. util. logging. ConsoleHandler. formatter java. util. logging. SimpleFormatter httpclient. wire. levelFINEST org. apachemons. httpclient. levelFINEST nur Kontext Protokollierung aktivieren. levelINFO handlersjava. util. logging. ConsoleHandler java. util. logging. ConsoleHandler. formatter java. util. logging. SimpleFormatter org. apachemons. httpclient. levelFINEST Nähere Informationen erhalten Sie von der Java-Logging documentation. Apache Log4j 2 Apache Log4j 2 ein ist Upgrade auf Log4j, das signifikante Verbesserungen gegenüber seinem Vorgänger Log4j 1.x bietet und viele der Verbesserungen zur Verfügung stellt, die in Logback zur Verfügung stehen, während einige inhärente Probleme in der Logbacks-Architektur behoben werden. Einige der Merkmale und Verbesserungen in Log4j 2 sind: API-Trennung Die API für Log4j ist von der Implementierung getrennt und macht es den Anwendungsentwicklern klar, welche Klassen und Methoden sie verwenden können, während sie die Vorwärtskompatibilität gewährleisten. Dies ermöglicht dem Log4j-Team, die Implementierung sicher und kompatibel zu verbessern. Verbesserte Leistung Log4j 2 enthält asynchrone Logger der nächsten Generation basierend auf der LMAX Disruptor-Bibliothek. In Multi-Thread-Szenarien haben Asynchronous Loggers einen 18-fach höheren Durchsatz und eine geringere Latenzordnung als Log4j 1.x und Logback. Weitere Informationen finden Sie unter Asynchronous Logging Performance. Andernfalls übertrifft Log4j 2 Log4j 1.x, Logback und java. util. logging deutlich, vor allem in Multi-Thread-Anwendungen. Weitere Informationen finden Sie unter Leistung. Unterstützung für mehrere APIs Während die Log4j 2 API die beste Leistung bietet, unterstützt Log4j 2 die Log4j 1.2, SLF4J, Commons Logging und java. util. logging (JUL) APIs. Vermeiden von Lock-In Anwendungen, die für die Log4j 2-API codiert sind, haben immer die Möglichkeit, eine beliebige SLF4J-kompatible Bibliothek als logger-Implementierung mit dem log4j-to-slf4j-Adapter zu verwenden. Automatisches Zurückladen von Konfigurationen Wie Logback kann Log4j 2 seine Konfiguration nach der Änderung automatisch neu laden. Im Gegensatz zu Logback, wird es tun, ohne dass Log-Ereignisse während der Rekonfiguration stattfindet. Erweiterte Filterung Wie Logback unterstützt Log4j 2 die Filterung basierend auf Kontextdaten, Markierungen, regulären Ausdrücken und anderen Komponenten im Log-Ereignis. Die Filterung kann so festgelegt werden, dass sie für alle Ereignisse gelten, bevor sie an Logger übergeben werden oder wenn sie durch Appenders passieren. Darüber hinaus können Filter auch Logger zugeordnet werden. Im Gegensatz zu Logback können Sie eine gemeinsame Filterklasse in einer dieser Situationen verwenden. Plugin-Architektur Log4j nutzt das Plugin-Muster, um Komponenten zu konfigurieren. Daher müssen Sie keinen Code schreiben, um einen Appender, ein Layout, einen Pattern-Konverter und so weiter zu erstellen und zu konfigurieren. Log4j erkennt Plugins automatisch und verwendet sie, wenn eine Konfiguration auf sie verweist. Eigenschaftsunterstützung Sie können Eigenschaften in einer Konfiguration referenzieren, Log4j wird sie direkt ersetzen, oder Log4j übergibt sie an eine darunterliegende Komponente, die diese dynamisch auflöst. Die Eigenschaften stammen aus Werten, die in der Konfigurationsdatei, den Systemeigenschaften, den Umgebungsvariablen, der ThreadContext Map und den im Ereignis vorhandenen Daten definiert wurden. Benutzer können die Eigenschaftenanbieter weiter anpassen, indem sie ihr eigenes Lookup-Plugin hinzufügen. Java 8 Lambda-Unterstützung Wenn eine Protokollmeldung teuer zu konstruieren war, wurde oft explizit geprüft, ob die angeforderte Protokollstufe vor dem Erstellen der Meldung aktiviert ist. Client-Code auf Java 8 kann von Log4js Lambda-Unterstützung profitieren. Da Log4j keinen Lambda-Ausdruck auswerten wird, wenn der angeforderte Log-Level nicht aktiviert ist, kann der gleiche Effekt mit weniger Code erreicht werden. Benutzerdefinierte Protokollstufen In Log4j 2 können benutzerdefinierte Protokollstufen einfach in Code oder in der Konfiguration definiert werden. Keine Unterklassen erforderlich. Müllfrei Während der Steady-State-Protokollierung ist Log4j 2 in Stand-Alone-Anwendungen und geringen Müll in Webanwendungen müllfrei. Dies verringert den Druck auf den Garbage Collector und kann eine bessere Reaktionszeit Leistung. Dokumentation Das Log4j 2-Benutzerhandbuch ist auf dieser Website oder als PDF zum Herunterladen verfügbar. Voraussetzungen Log4j 2.4 und höher erfordert Java 7, Versionen 2.0-alpha1 bis 2.3 benötigt Java 6. Einige Features erfordern optionale Abhängigkeiten Die Dokumentation für diese Features gibt die Abhängigkeiten an. Log4j 2.7 ist nun für die Produktion verfügbar. Die API für Log4j 2 ist nicht kompatibel mit Log4j 1.x, jedoch ist ein Adapter verfügbar, damit Anwendungen weiterhin die Log4j 1.x API verwenden können. Adapter sind auch für Apache Commons Logging und SLF4J verfügbar. Log4j 2.7 ist die neueste Version von Log4j und enthält mehrere Fehlerkorrekturen, die nach der Veröffentlichung von Log4j 2.6 gefunden wurden. Die Liste der Korrekturen finden Sie im aktuellen Änderungsbericht. Beachten Sie, dass im Anschluss an die Freigabe von Log4j 2.6 eine geringfügige Quelle Unverträglichkeit mit früheren releass wurde aufgrund der Zugabe von neuen Methoden, um die Logger-Schnittstelle gefunden. Wenn Sie Code haben, der tut: oder ähnlich mit jeder Log-Ebene erhalten Sie einen Compiler-Fehler sagen die Referenz ist mehrdeutig. Um dies zu beheben, tun Sie entweder: 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, bleiben so nah an ihrer API wie vernünftig. Quellen sind auf der SourceForges Download-Seite verfügbar. Wir liefern keine Binärdateien aufgrund der zahlreichen inkompatiblen ABIs (z. B. g 2,95 vs 2,96 vs 3,0 vs 3,2) und verschiedenen Paketformaten. Eine stabile, aber ältere Version von log4cpp ist im Debian-Stall verfügbar, siehe packages. debian. org/stable/libs/. FreeBSD-Benutzer finden log4cpp in der Ports-Sammlung, siehe freebsd. org/ports/devel. html Log4cpp enthält Unterstützung für das Erstellen von RPMs, so dass Ihr eigenes Build von der Quelle tar-ball ist so einfach wie As von Version 0.2.0 log4cpp sein kann Build mit autoconf auf Plattformen, die es unterstützen. Einfach: Dies wird log4cpp unter / usr / local installieren. Um in einer anderen Lokation zu installieren, geben Sie --prefixltlocationgt beim Ausführen von configure an. Optionen für ./configure Neben den üblichen ./configure-Optionen wie --prefix gibt es noch weitere: --with-idsa Unterstützung für die Protokollierung in IDSA (jade. cs. uct. ac. za/idsa/index. html) . Dies gibt Ihnen eine IdsaAppender Appender-Klasse. --with-omnithreadsltpath-to-omniORBgt Multithreading-Unterstützung mit OmniORB4s omniThreads MT Abstraktionsbibliothek (omniorb. org) aktivieren. Configure erwartet, dass sich die omnithread-Headerdateien in ltpath-to-omniORBgt / include befinden und die Bibliothek in ltpath-to-omniORBlt / lib, d. H. Nicht in einem plattformspezifischen Unterverzeichnis. Erstellen Sie gegebenenfalls Symlinks. NB. OmniORB4 wird benötigt: omniORB3 genügt nicht, da es keine ausreichende Unterstützung für threadspezifische Daten gibt. Im Moment (August 2002) ist omniORB4 in der Beta-Version, aber die meisten Teile und speziell die Threading-Bibliothek scheinen ziemlich stabil zu sein. --with-pthreads Aktivieren Sie die Multi-Threading Unterstützung mit der pthread POSIX Thread Bibliothek. Diese Option schließt sich gegenseitig mit --with-omnithreads aus. --enable-doxyen Ermöglicht die Generierung der API-Dokumentation von Dimitri van Heeschs Doxygen tool (doxygen. org/). Defaults auf yes, wenn doxygen im Suchpfad gefunden werden kann. --enable-html-docs Wenn doxygen aktiviert ist, lassen Sie es HTML-formatierte Dokumentation generieren. --enable-latex-docs Wenn doxygen aktiviert ist, muss es eine LaTeX-formatierte Dokumentation erzeugen. --enable-dot Lassen Sie Doxygen mit dem Punkt-Tool von GraphViz (graphviz. org) seine Graphen zeichnen. --disable-remote-syslog Exclude RemoteSyslogAppender von build (im Lieferumfang enthalten) --disable-smtp SmtpAppender von Build ausschließen (im Lieferumfang enthalten) Build-Notizen für bestimmte Plattformen nix-g-Compiler Log4cpp sollte ohne Änderungen an jedem annehmbaren nix-System mit erstellen G und GNU machen. Die primäre Entwicklungsplattform ist RedHat Linux 7.3, das g 2.96-rh hat, aber das Ziel ist, mit ab 2.95 und höher kompatibel zu sein. Wenn g 3.x weit verbreitet ist, können wir Unterstützung für ältere g Versionen aufgeben. Solaris - Sun CC Compiler Zusammenstellung mit Sun CC Compiler erfordert die Einstellung einiger Umgebungsvariablen. Auch statische Bibliotheken scheinen nicht zu funktionieren. Kurz gesagt: Win32 - VS2010 Verwenden Sie die Arbeitsbereich - und Projektdateien im Unterverzeichnis msvc10. (Möglicherweise müssen Sie include / log4cpp / config-win32.h und die Projektdateien an Ihre speziellen Bedürfnisse anpassen) Win32 - MSVC 6 Verwenden Sie die Arbeitsbereich - und Projektdateien im Unterverzeichnis msvc6. Möglicherweise müssen Sie include / log4cpp / config-win32.h und die Projektdateien an Ihre speziellen Bedürfnisse anpassen. Win32 - MSVC 5 Das Bauen von log4cpp mit MSVC 5 wird nicht unterstützt und wird nicht sein, es sei denn, jemand kann eine Möglichkeit 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 Verwenden Sie ./configure make make install. Seien Sie gewarnt, dass es nur sehr wenige Erfolgs - oder Misserfolgsberichte für diese Plattform gibt, also funktioniert es sehr reibungslos oder niemand benutzt log4cpp mit Cygwin aktiv :-) OpenVMS Edit include / log4cpp / config-openvms. h, wenn Sie unterschiedliche Einstellungen benötigen. Dies wurde nur auf OpenVMS Alpha v7.3 und Compaq C V6.3-020 getestet. 1) Kopieren Sie das src - und include-Verzeichnis (einschließlich aller Inhalte und Unterverzeichnisse) auf Ihr 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 Verzeichnis / include wird ein Verzeichnisname des Unix-Typs angefordert. In diesem Beispiel wird der Pfad A1DKBO: USER. TONY. PROJECT. LOG4CPP. INCLUDE Ein Repository-Verzeichnis wird auch hier 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üpfen Sie ein Programm mit log4cpp. olb. Z. B .: Ab Version 0.2.1 wird diese Bibliothek unter der Lesser General Public License anstelle der General Public License lizenziert. Es sind keine weiteren Lizenzänderungen geplant :-). API Dokumentation von Doxygen generiert finden Sie hier. Die Solaris Developer Connection verfügt über einen Artikel von Mo Budlon zur Verwendung von log4cpp 0.2.x, Protokollierung und Tracing in C vereinfacht. Empfohlene Lektüre, wenn Sie versuchen, herauszufinden, wie Sie log4cpp verwenden 1. ALLGEMEIN 1.1. Was ist Protokoll für C-Protokoll für C ist eine Bibliothek von C-Klassen für die flexible Protokollierung von Dateien, Syslog und anderen Zielen. Es ist modelliert nach der Log für Java-Bibliothek (jakarta. apache. org/log4j/) und bleiben so nah an ihrer API wie vernünftig. 1.2. Wie ist Log für C im Zusammenhang mit Log4j Ist es ein gerader Port Log für C versucht, eine ähnliche Schnittstelle für die Anmeldung in C wie Log4j bietet in Java zu liefern. Die Implementierung ist jedoch keine Übersetzung des Java-Codes. Also in diesem Sinne ist es kein Hafen von Log4j. Natürlich Log für C verdankt viele seiner Konzepte zu log4j. 1.3. Wie lautet der Name dieses Projekts, Log für C oder log4cpp Der offizielle Langname des Projekts ist Log für C, aber in der Praxis hat sich der Kurzname log4cpp mehr bewährt. 1.4. Unter welcher Lizenz ist Log für C verfügbar Ab Version 0.2.1 Log für C wird unter der GNU Lesser General Public License (LGPL) freigegeben. Versionen, die zuvor unter der GPL veröffentlicht wurden. Siehe die Lizenz Diskussion über das Forum bei SourceForge für die Motivationen hinter der Umstellung von GPL auf LGPL. 1.5. Unsere Rechtsabteilung nicht wie die LGPL, können Sie veröffentlichen Log für C unter Lizenz XYZ Nr. Lange Antwort: Technisch kann es möglich sein, wenn jeder Teilnehmer stimmt, die aufgrund ihrer wachsenden Zahl ist immer schwieriger geworden. Aber selbst wenn das überwunden werden könnte, wird es nicht passieren. Natürlich gibt die LGPL Ihnen 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 ich dieses Zeug Verwenden Sie einen Blick auf Simple Beispiel und Eigenschaften-Datei Beispiel. Für einige kleine Beispiele, die log4cpp verwenden, siehe das Unterverzeichnis test. Siehe auch den Dokumentationsbereich für einen Zeiger für API-Dokumentation und weitere Nutzungsinformationen. 3.2. Ist log4cpp threadsicher Die gleiche Instanz des log4cpp :: Category-Objekts (ein Logger) kann von verschiedenen Threads gleichzeitig ohne explizite Synchronisation verwendet werden. Gleichzeitiger Zugriff auf die Appender wird durch das Logger-Objekt selbst verhindert. Es sperrt interne Mutex jedes Mal, wenn es um Schreiben in Appender kommt. So ist es zum Beispiel sicher, von den mehreren Threads zu demselben Logger zu schreiben, der an dieselbe Datei anhängt. Obwohl log4cpp so konfiguriert ist, dass zwei unterschiedliche Logger an denselben Appender anhängen (es kann eine Datei sein), dann gibt es keine Möglichkeit für die Protokollierung Rahmen ordnungsgemäße Ergänzung und Dinge können sich vermischen. Diese Art der Konfiguration wird daher nicht empfohlen. 3.3. Was sind mögliche Formatzeichen für die benutzerdefinierte Protokollnachricht PatternLayout unterstützt folgenden Satz von Formatzeichen: - ein einzelnes Prozentzeichen c - die Kategorie d - das Datum Datumsformat: Das Datumsformatzeichen kann von einem Datumsformat-Spezifizierer gefolgt werden, der zwischen Klammern eingeschlossen ist. Zum Beispiel d oder d. Wenn kein Datumsformat-Spezifizierer angegeben ist, wird das folgende Format verwendet: Wed Jan 02 02:03:55 1980. Der Datumsformat-Spezifizierer gibt die gleiche Syntax wie die ANSI C-Funktion strftime mit 1 Addition an. Die Addition ist der Spezifizierer l für Millisekunden, gefüllt mit Nullen, um 3-stellig zu machen. M - die Nachricht n - das plattformspezifische Zeilentrennzeichen p - die Priorität r - milliseconds seit der Erstellung dieses Layouts. R - Sekunden seit dem 1. Januar 1970 u - Taktgeber seit Prozessstart x - der NDC t - Threadname Standardmäßig ist ConversionPattern für PatternLayout auf mn gesetzt. 4. PROBLEME UND FEHLERMELDUNGEN 4.1. Ich erhalte Naming collision für ERROR erkannt. Bitte lesen Sie die FAQ für einen Workaround. Dies wird durch die Grobheit einiger Plattformen verursacht, die den Namensraum mit einigen stumpfen Defines verstümmeln. Um genauer zu sein, enthält die Win32-API Definitionen von ERROR und DEBUG. Da der Präprozessor von C-Namensbereichen nicht Kenntnis hat, führt dies dazu, daß die Worte ERROR und DEBUG überall litteral reserviert werden. Insbesondere widerspricht dies mit log4cpp :: Priority :: ERROR und log4cpp :: Priority :: DEBUG. Diese beiden Namen stammen aus log4j, also sind sie nicht etwas, das wir uns ausgemacht haben. Sie Win32 Autoren sollten nicht rudelessly behauptet, diese generischen Namen durch den Präprozessor. Es gibt viel bessere Alternativen: Wenn sie es als Integer-Konstante verwenden, erklären Sie es mit einem Sprachkonstrukt. Entweder enum oder statische const int ERROR1 würde es gut. Verwenden Sie einen weniger generischen Namen wie WIN32APIERROR, um Namenskonflikte weniger wahrscheinlich zu machen Wenn sie es als Flag für die bedingte Kompilierung verwenden, verwenden Sie DEBUG DEBUG definieren und wenn definiert (DEBUG). In diesem Fall würde der Präprozessor einfach alle Vorkommen von DEBUG im Quellcode mit DEBUG ersetzen, so dass alles intakt bleibt. Natürlich wäre die richtige Lösung, wenn die beleidigende Partei würde eine der oben genannten Methoden verwenden, aber wir könnten einige Zeit warten, bis dies tatsächlich geschehen. Als eine alternative log4cpp kann Workaround diese definiert. Der Workaround-Code wird aktiviert, indem Sie LOG4CPPFIXERRORCOLLISION 1 definieren, bevor Sie alle log4cpp-Header-Dateien und nach dem Einschluss aller Plattform-Header einfügen. Für Win32-Plattformen ist diese Definition bereits in log4cpp / config-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 Paket log4cpp kompilieren / verknüpfen mit dem SunWorkshop Compiler (CC) auf einem Solaris 7-Computer. Die Bibliothek baut, aber der Testmain-Code kann nicht ordnungsgemäß verknüpft werden. Eine richtige Lösung für dieses Problem wurde noch nicht gefunden (Anregungen sind willkommen), aber James Emery berichtete Erfolg mit dem folgenden Workaround: Deaktivieren Sie den Aufbau der statischen Bibliothek Ändern Sie den Linker von / usr / ucb / ld zu CC und aktivieren Sie platzunabhängigen Code (Pic). Kurz: Konfigurieren mit: 4.3. / Configure erkennt snprintf () auf Plattform XYZ nicht. / Configure überprüft nicht nur das Vorhandensein einer snprintf () - Funktion, sondern auch für die C99-Kompatibilität. Insbesondere sollte snprintf () den Stringparameter strikt ehren, um potentielle 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 der Konsole und in die Datei program. log anmeldet. Logger und Appender werden manuell erstellt und konfiguriert. Beispiel verwendet sowohl die Funktionstyp-Protokollierung als auch die Stream-Protokollierung. Konsolenausgabe für dieses Beispiel Beispiel main. cpp-Datei, die die Protokollierungskonfigurationsdatei verwendet log4cpp. properties 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 seinen eigenen Eingang und Eingang seines Nachkommens auf die Konsole um. Descendant sub1 schreibt in zwei Dateien, filtern die Ausgabe nach Nachrichtenpriorität für die zweite. Descendant sub1 & sub2; schreibt auch in eine Rolldatei. Die Protokolldatei A3.log wird überschrieben, sobald sie die Grenze von 200 Byte erreicht hat, wird eine Sicherungsprotokolldatei beibehalten. Log4cpp ist auch direkt über CVS verfügbar, siehe die SourceForge CVS Seite für Anweisungen. CVS verfügt derzeit über zwei Zweige: für die log4cpp-Entwicklung zur Pflege von log4cpp-stable (0.2.x) Jedes Release erhält ein Tag mit dem Namen RELxyz. Um mit einer frisch ausgecheckten log4cpp Revision zu beginnen, führen Sie zuerst ./autogen. sh aus. Dies wird ./configure und die notwendigen Makefile. ins erstellen. Sie brauchen mindestens autoconf 2.50, automake 1.6.0 und libtool 1.4. WARNUNG: Releases aus der Entwicklungsabteilung sind ein in Arbeit befindliches Werk und können Ihren Desktop nicht aufbauen, abstürzen oder neu dekodieren. 1.1.2rc1 - master branch (04 April 2015) Kleine Korrekturen, DailyRollingFile Appender, Tests, Optionen zur Deaktivierung der Unterstützung für smtp und syslog 1.1.1 - stabiler Zweig (26 November 2013) Kleine Code - und Projektfixes. 1.1rc3 - Entwicklungsabteilung (18 Oktober 2012) Erstellt Build-Projekte für MSVC10 (VS2010). Kleine Code-Fixes. 0.3.4 - Entwicklungsabteilung (28. Oktober 2002) Feste Builds für MSVC6 und MSVC7. Log4cppCleanup wurde entfernt. 0.3.3 - Entwicklungsabteilung (26. Oktober 2002) Fixed 628211: Buildfehler auf MSVC 6.0. Fixed 625811: Protokollierung in RemoteSyslogAppender. Möglicherweise behoben 415160: Abstürze mit dynamischer Bibliothek auf Solaris 2.6. Ersetzte PatternLayout durch eine neue, schnellere und vollständigere Implementierung. 0.3.2 - Entwicklungsabteilung (5. Oktober 2002) Fixed 614903: Kompilierungsproblem bei Sun CC 5.3. Fehlende MSVC6.dsp-Dateien wurden hinzugefügt. Feste Protokollfunktion in RemoteSyslogAppender. Feste Umsetzbarkeit von log4cpp-devel RPM. 0.3.2rc5 - Entwicklungszweig (5. Oktober 2002) Zusammengeführt 604991: Unterstützung für die Einstellung additivy in PropertyConfig. Zusammengeführt 605143: Unterstützung für die Zusammenstellung in QNX Neutrino. 0.3.2rc4 - Entwicklung Zweig (16 August 2002) Fixed Last-Minute-upoffs, die Kompilierung auf beiden nix und Win32-Plattformen verhindert. 0.3.2rc2 - Entwicklungsabteilung (12. August 2002) Unterstützung für POSIX-Threads hinzugefügt. Eigenschaftskonfigurator hinzugefügt. Umgeordnete Dokumentation. Verschiedene Fehler wurden behoben. 0.3.2rc1 - Entwicklungsabteilung (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. Added aclocal Unterstützung. 0.3.1 - Entwicklungsabteilung (4. April 2002) RollingFileAppender-Klasse hinzugefügt. Fehlerkorrektur 572467: ungültigter Iteratorverbrauch. Fehler behoben 527475: format string bug. Fehler behoben 530332: fehlende std :: speciers. Behandelt Feature-Anfragen 536668, 527760, 527381. 0.3.0 - Entwicklungsabteilung (18 Februar 2002) Added experimentelle Unterstützung für Multi-threaded Anwendungen. Diese Implementierung verwendet OmniORB4s Threading-Bibliothek. Andere Threading-Bibliotheken, wie Boosts, können ebenfalls verwendet werden, aber dies ist noch nicht implementiert. 0.2.7 - stabiler Zweig (27 Januar 2002) Unterstützung für mehrere Appender pro Kategorie hinzugefügt (Merkmalsanforderung 501360). Fehler behoben in SyslogAppender (Fehler 499315) Fixer Speicherverlust in SyslogAppender und RemoteSyslogAppender (Fehler 499524) Fixes Kompilierungsproblem in Filter (Bug) Fixed config-Datei-Parseproblem in SimpleConfigurator (Fehler 500766) Zusätzliche Methoden zur Protokollierung auf FATAL-Ebene (Fehler 504314) ) Fixes Win32-Kompilierungsproblem (Fehler 506907) 0.2.6 (11. Dezember 2001) Vorbereitende Unterstützung für OpenVMS hinzugefügt. PatternLayout, SimpleConfigurator und RemoteSyslogAppender hinzugefügt. 0.2.5 (11. Juni 2001) Aufnahme 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 zur LGPL. 0.2.0 (10 Dezember 2000) log4cpp verwendet nun autoconf und automake. Die neueste stabile Version ist 1.1.1 log4cpp wird seit der Version 1.1.1 in git verschoben, cvs ist seitdem veraltet Seit der Version 0.3.0 verfügt log4cpp über einen eigenen Stall - und Entwicklungszweig. Es wird x. y.z freigegeben, wobei y gerade als stabil betrachtet wird, und diejenigen, bei denen y ungerade ist, sind experimentell (was bedeutet, dass einige oder alle Merkmale gebrochen werden können). Releases von 0.2.x sind nur für Bug-Fixes, neue Features gehen in 0.3.x und eventuell 0.4.x. Codierung auf Log4cpp wurde von mir (Bastiaan Bakker) Ende 2000 initiiert. Seitdem haben sich andere Personen dem Projekt angeschlossen oder haben dazu beigetragen:


Comments

Popular Posts