2017-12-09 17 views
1

VertX로 작업하고 있습니다. Log4J를 내 코드 및 외부 라이브러리 용 로거로 사용하려고합니다. VertX 및 Log4j에서 구성을 가져올 수 없습니다.

그래서 나는이 코드 조각 적어 :

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"); 
    } 
} 

을 내가 SRC/메인/자원 파일 의 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> 

그러나 출력이 변하지 않는 것 같습니다 :

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) 

어떻게 구성 파일을 올바르게 설정할 수 있습니까?

답변

3

우선 log4jlog4j2 구성 파일이 결합 된 것처럼 보입니다. 그게 당신의 설정이로드되지 않은 이유가 될 수 있습니다.

하지만 vert.x 로깅 기능을 사용하는 것이 좋습니다. log4j 또는 log4j2도 함께 사용할 수 있습니다. 로거를 다음과 같이 정의하십시오.

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

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

그런 다음 정상적으로 사용하십시오. 그래서 :

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

다음으로 구성을 src/main/resources으로 유지합니다. 이것이 log4j2 설정이기 때문에 조심하십시오. 따라서 이름은 log4j2.xml이어야합니다.
이제 vertex에 대한 logger delegate factory를 지정하면됩니다. log4j에 대한 또는 log4j2의 :

io.vertx.core.logging.Log4jLogDelegateFactory 

또는

io.vertx.core.logging.Log4j2LogDelegateFactory 

당신이 설정 시스템 등록 정보 vertx.logger-delegate-factory-class-name 또는이 같은 VM 인수를 지정할 수 있습니다 :

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

(log4j2에 대한)

을 더 많은 정보 in documentation

0

마지막으로 해결 된 주요 문제는 maven 구성입니다. 나는

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

이 방법 받는다는가 /에게 자원 폴더를 고려할 것이라고하지 /src/main/resources 그래서 log4j에이 log4j.properties 파일을 찾을 수 없습니다 내 빌드 스크립트에 다음 줄을 추가