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!