2017-12-09 4 views
1

Ich arbeite mit VertX, ich möchte Log4J als Logger für meinen Code und für die externen Bibliotheken verwenden.VertX und Log4j können keine Konfiguration erhalten

Also schrieb ich dieses Stück Code unten:

import org.apache.log4j.Logger; 

public class Main extends AbstractVerticle { 

    final static Logger logger = Logger.getLogger("Gimli"); 

    @Override 
    public void start(Future<Void> fut) throws Exception { 
     System.setProperty("vertx.logger-delegate-factory-class-name", " io.vertx.core.logging.Log4j2LogDelegateFactory"); // Default logger 

    logger.debug("Debug log"); 
    logger.error("Error log"); 
    logger.warn("Warning log"); 
    } 
} 

und ich habe in src/main/resources die Datei log4j.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<Configuration> 
    <Appenders> 
    <RollingFile name="app_file" append="true" fileName="/var/log/seachlog.log" filePattern="/var/log/vertx/$${date:yyyy-MM}/seachlog-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - %m%n" /> 
     <Policies> 
      <OnStartupTriggeringPolicy /> 
      <SizeBasedTriggeringPolicy size="5MB" /> 
      <TimeBasedTriggeringPolicy /> 
     </Policies> 
    </RollingFile> 
    <RollingFile name="vertx_file" append="true" fileName="/var/log/vertx.log" filePattern="/var/log/vertx/$${date:yyyy-MM}/vertx-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - %m%n" /> 
     <Policies> 
      <OnStartupTriggeringPolicy /> 
      <SizeBasedTriggeringPolicy size="5MB" /> 
      <TimeBasedTriggeringPolicy /> 
     </Policies> 
    </RollingFile> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <!-- <LogStashJSONLayout/> --> 
     <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - sfsdfsdfsdfsdf %m%n" /> 
    </Console> 
</Appenders> 

<Loggers> 
    <Logger name="Gimli" level="DEBUG"> 
     <!-- <AppenderRef ref="vertx_rollingFile" /> --> 
     <!-- <AppenderRef ref="vertx_socket" /> --> 
     <AppenderRef ref="STDOUT"/> 
     <AppenderRef ref="vertx_file" /> 
    </Logger> 
    <Root level="DEBUG"> 
     <!-- <AppenderRef ref="vertx_socket" /> --> 
     <AppenderRef ref="STDOUT"/> 
     <AppenderRef ref="app_file" /> 
    </Root> 
</Loggers> 

Aber Die Ausgabe scheint sich nicht zu ändern:

2017-12-09 09:21:34,503 DEBUG [vert.x-eventloop-thread-0] [Gimli] Debug log (Main.java:31) 
2017-12-09 09:21:34,505 ERROR [vert.x-eventloop-thread-0] [Gimli] Error log (Main.java:32) 
2017-12-09 09:21:34,507 WARN [vert.x-eventloop-thread-0] [Gimli] Warning log (Main.java:33) 

Wie kann ich die Konfigurationsdatei korrekt einstellen?

Antwort

3

Zunächst sieht es so aus, als ob Sie log4j mit log4j2 Konfigurationsdatei kombinieren. Das könnte der Grund sein, warum deine Konfiguration nicht geladen ist.

Aber ich empfehle, vert.x Logging-Funktion zu verwenden - Sie können auch log4j oder log4j2 damit verwenden. Sie definieren Ihre Logger wie folgt:

import io.vertx.core.logging.Logger; 
import io.vertx.core.logging.LoggerFactory; 

Logger logger = LoggerFactory.getLogger("Gimli"); 

dann verwenden Sie dies normalerweise wie Sie getan haben. also:

logger.debug("Debug log"); 
logger.error("Error log"); 
logger.warn("Warning log"); 

Als nächstes werden Sie Ihre Konfig in src/main/resources halten. Seien Sie vorsichtig, denn das ist log4j2 config. So sollte es log4j2.xml genannt werden.
Und jetzt müssen Sie nur Logger Delegat Factory für Vertex angeben. Für log4j oder log4j2 seine:

io.vertx.core.logging.Log4jLogDelegateFactory 

oder

io.vertx.core.logging.Log4j2LogDelegateFactory 

Sie Setup-Systemeigenschaft vertx.logger-delegate-factory-class-name können, oder Sie VM Argument, da dies angeben:

-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4j2LogDelegateFactory 

(für log4j2)

Weitere Informationen in documentation

0

Schließlich habe ich festgestellt, das Hauptproblem war in der Maven-Konfiguration. Ich fügte hinzu, die folgenden Zeilen in meinem Build-Skript

<build> 
    <resources> 
     <resource> 
     <directory>/</directory> 
     <includes> 
      <include>config.json</include> 
     </includes> 
     </resource> 
    </resources> 
</build> 

diese Weise Maven würde / die Ordner Ressourcen berücksichtigt und nicht /src/main/resources so log4j nicht finden kann, die log4j.properties Datei

Verwandte Themen