


So verwenden Sie Log4j, um Protokolle verschiedener Pakete in verschiedene Dateien auszugeben
Vorwort
Da der Umfang des Projekts immer größer wird, werden ständig neue Module eingeführt und verschiedene Module drucken ihre eigenen Protokolle. Am Ende können die Protokolle überhaupt nicht angezeigt werden als mein eigenes Im Projekt gibt es die folgenden Protokolle:
Protokolle zum Empfangen externer Nachrichten und Protokolle zum Senden externer Nachrichten;
Verarbeitungsprotokolle von Hintergrund-Resident-Threads; Externe Schnittstellenzugriffsschnittstellenprotokolle wie Parameter und Rückgabeergebnisse; SQL-Protokolle, die vom Dienst beim Zugriff auf die Datenbank generiert werden
Daunter ist die Menge an Protokolldaten im Nachrichtenprotokoll und im Hintergrundthread sehr groß Wenn alle Protokolle in einer Datei gedruckt werden und Sie die Datei tail -f log.log verwenden, werden Sie feststellen, dass das Protokoll schnell scrollt und es unmöglich ist, ein bestimmtes SQL- oder Dienstzugriffsprotokoll anzuzeigen oder sogar zu finden .
Die Lösung besteht darin, verschiedene Protokolle zu klassifizieren und auszugeben, sodass sich die Protokolle nicht gegenseitig beeinflussen, insbesondere die wichtigen Schnittstellenzugriffsprotokolle, mit denen Probleme leicht lokalisiert und behoben werden können.
Schritt 1: Konfigurieren Sie in log4j.properties
Veröffentlichen Sie zunächst alle meine eigenen log4j.properties-Konfigurationen:
Unterhalb der Konfigurationsdatei kann es praktisch sein Wie Sie sehen, gebe ich Nachricht (Nachricht), Async (Backend-Thread), Showsql (Datenbankprotokoll) und Service (Schnittstellenaufruf) jeweils in verschiedene Protokolldateien aus. Einige Erklärungen:log4j.rootLogger=INFO, console, file log4j.appender.console=net.czt.log.AsyncConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p crazyant-web %-17c{2} (%13F:%L) %X{USER_ID}|%X{USER_IP}|%X{SERVER_ADDRESS}|%X{SERVER_NAME}|%X{REQUEST_URI}|%X{SESSION_ID} - %m%n log4j.appender.console.bufferSize=10000 log4j.appender.console.encoding=UTF-8 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.file=/home/work/apache-tomcat-6.0.39/logs/crazyant.log log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.MaxFileSize=1GB log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%-5p] crazyant-web %d{yyyy-MM-dd HH:mm:ss,SSS} %X{USER_ID}|%X{USER_IP}|%X{SERVER_ADDRESS}|%X{SERVER_NAME}|%X{REQUEST_URI}|%X{SESSION_ID} method:%l%n%m%n log4j.appender.file.bufferSize=10000 log4j.appender.file.encoding=UTF-8 log4j.logger.net.czt.crazyant.msg=DEBUG, message log4j.additivity.net.czt.crazyant.msg=false log4j.appender.message=org.apache.log4j.RollingFileAppender log4j.appender.message.File=/home/work/apache-tomcat-6.0.39/logs/crazyant_message.log log4j.appender.message.Append=true log4j.appender.message.MaxFileSize=1GB log4j.appender.message.MaxBackupIndex=5 log4j.appender.message.layout=org.apache.log4j.PatternLayout log4j.appender.message.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] [%t] - %m%n log4j.appender.message.encoding=UTF-8 log4j.logger.net.czt.crazyant.async.service=DEBUG, async log4j.additivity.net.czt.crazyant.async.service=false log4j.appender.async=org.apache.log4j.RollingFileAppender log4j.appender.async.File=/home/work/apache-tomcat-6.0.39/logs/crazyant_async.log log4j.appender.async.Append=true log4j.appender.async.MaxFileSize=1GB log4j.appender.async.MaxBackupIndex=5 log4j.appender.async.layout=org.apache.log4j.PatternLayout log4j.appender.async.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] [%t] - %m%n log4j.appender.async.encoding=UTF-8 log4j.logger.net.czt.orm.mybatis.SqlMonitorManager=DEBUG, showsql log4j.additivity.net.czt.orm.mybatis.SqlMonitorManager=false log4j.logger.net.czt.transaction.interceptor.SmartTransactionInterceptor=DEBUG, showsql log4j.additivity.net.czt.transaction.interceptor.SmartTransactionInterceptor=false log4j.appender.showsql=org.apache.log4j.RollingFileAppender log4j.appender.showsql.File=/home/work/apache-tomcat-6.0.39/logs/crazyant_sql.log log4j.appender.showsql.Append=true log4j.appender.showsql.MaxFileSize=1GB log4j.appender.showsql.MaxBackupIndex=5 log4j.appender.showsql.layout=org.apache.log4j.PatternLayout log4j.appender.showsql.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] [%t] - %m%n log4j.appender.showsql.encoding=UTF-8 log4j.logger.net.czt.crazyant.service=DEBUG, service log4j.additivity.net.czt.crazyant.service=false log4j.appender.service=org.apache.log4j.RollingFileAppender log4j.appender.service.File=/home/work/apache-tomcat-6.0.39/logs/crazyant_service.log log4j.appender.service.Append=true log4j.appender.service.MaxFileSize=1GB log4j.appender.service.MaxBackupIndex=5 log4j.appender.service.layout=org.apache.log4j.PatternLayout log4j.appender.service.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] [%t] - %m%n log4j.appender.service.encoding=UTF-8
log4j.rootLogger=INFO, Konsole, Datei
log4j hat das Konzept eines RootLoggers und eines normalen Loggers. Standardmäßig benötigen wir nur einen RootLogger. Das heißt, alle Protokolle werden nur in diese Protokolldatei ausgegeben.
Sehen Sie sich die Konfiguration eines gemeinsamen Loggers an (am Beispiel des Schnittstellenprotokolldienstes):
1. log4j.logger.net.czt.crazyant.service=DEBUG, service
„net.czt.crazyant.service“ in diesem Satz stellt den vollständigen Pfad des Pakets dar, in dem die allgemeine Logger-Protokollkonfiguration wirksam wird
Schritt 2. Bei der Ausgabe von Protokollen müssen Sie die spezifische Klasse festlegen, die dem Protokollobjekt entspricht.
? Unter den oben genannten Konfigurationselementen gibt es eine Paketzeichenfolge von „net.czt.crazyant.service“. Denken wir also darüber nach, wie log4j die Logger-Protokolle in verschiedenen Paketen in verschiedene Dateien ausgibt. Denken Sie darüber nach, es gibt zwei Typen Methode:
1. Mithilfe von Interceptor oder AOP erkennt log4j selbst die Protokollausgabe, erkennt, aus welchem Paket das Protokoll generiert wurde, und gibt es in die entsprechende Datei aus
2 , der Benutzer übergibt einen Klassenparameter, log4j ruft das der Klasse entsprechende Paket ab und verwendet dieses als Standard, um verschiedene Protokolldateien zu finden.import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MyClassImpl implements MyClass { /** * loger */ private static final Log logger = LogFactory.getLog(MyClassImpl.class); /** * my func */ public void myfunc() { logger.info("call method myfunc."); } }
Oder für alle Protokolle eines bestimmten Typs stammen alle ihre Logger-Objekte von einer einzigen gekapselten Objektinstanz, und es gibt nur einen Parameter, der von dieser einzelnen Objektinstanz übergeben wird und zur Identifizierung verwendet wird. Klassifizieren Sie sie einfach logisch.
Zusammenfassung
In Log4j.properties wird die separate Ausgabe von Protokollen von Paketen oder bestimmten Klassen unterstützt, es muss jedoch auch dem Paket in der Protokollkonfiguration beim Logger entsprechen können wird im Code initialisiert.
Okay, das ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit von Nutzen sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.
Weitere verwandte Artikel zur Verwendung von Log4j zur Ausgabe von Protokollen verschiedener Pakete in verschiedene Dateien finden Sie auf der chinesischen PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.
