Logback을 사용하는 Maven에서 테스트 webapp를 만들었습니다. 내가 mvn test
이 모든 것이 잘 작동 실행하면logback.xml 파일이로드되지 않습니다.
<configuration scan="true">
<!-- For more information: http://logback.qos.ch/manual/configuration.html -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/archive/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 31 days' worth of history -->
<maxHistory>31</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%level] [%thread] [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
내가 모두 src/main/resources
및 src/test/resources
이 파일을 복사 한 다음은 내 logback.xml 구성 파일입니다. 테스트 로그 메시지가 콘솔뿐만 아니라 myapp.log 파일 모두에 기록됩니다 그 후
public class TestLogService extends TestCase {
public TestLogService(String name) {
super(name);
}
public void testLogMessage() throws Exception {
LogService.debug("Hello from {}!", "TestLogService");
}
}
, 내가 mvn install
을 실행하고 (WEB-INF/classes
에서 logback.xml이있는) 결과 war 파일을 배포 내 로컬 WebLogic 서버. 출력은, 아무 일도 발생하지 다음이 "/ myapp와가에 봉사"옆에서,
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestServlet() {
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LogService.debug("Hello from {}!", "doGet()");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}
그러나 :이 작업이 일단, 난 그냥 로그 파일에 하나의 문을 로그하도록되어 테스트 서블릿을 맞았다! 아무것도 로그 파일이나 콘솔에 기록되지 않습니다. 콘솔에 오류 메시지가 표시되지 않습니다. 로그백이 자동으로 실패하는 것처럼 보입니다.
그리고 LogService 클래스는 logback 통화 단지 래퍼입니다 :
public class LogService {
private static Logger logger = LoggerFactory.getLogger("com.myapp");
public static void debug(String message) {
logger.debug(message);
}
public static void debug(String message, Object... argArray) {
logger.debug(message, argArray);
}
}
내가 내 자바 logback.configurationFile
속성을 설정하려고 여기 (Setting logback.xml path programmatically) 설명뿐만 아니라 프로그래밍 방식으로 설정 옵션을 시작합니다.
두 방법 모두 정확히 같은 결과가 나타납니다. mvn test
은 메시지를 잘 기록하지만 localhost에서 테스트 서블릿을 실행할 때 아무런 반응이 없습니다.
어떤 문제가 될 수 있습니까?
System.out.println("[LogService.debug] isDebugEnabled = " + logger.isDebugEnabled());
System.out.println("[LogService.debug] getName = " + logger.getName());
System.out.println("[LogService.debug] ROOT_LOGGER_NAME = " + Logger.ROOT_LOGGER_NAME);
System.out.println("[LogService.debug] toString = " + logger.toString());
그리고 지금 mvn test
과 TestServlet 다른 출력을 제공 타격 :
mvn test says: TestServlet says:
----------------------------------------------- -----------------------------------------------
[LogService.debug] isDebugEnabled = true [LogService.debug] isDebugEnabled = false
[LogService.debug] getName = com.myapp [LogService.debug] getName = com.myapp
[LogService.debug] ROOT_LOGGER_NAME = ROOT [LogService.debug] ROOT_LOGGER_NAME = ROOT
[LogService.debug] toString = Logger[com.myapp] [LogService.debug] toString = org.slf4j.impl.JDK14LoggerAdapter(com.myapp)
그래서 적어도 설명 내가 LogService 일부 디버그 문을 추가
추가 정보 왜 TestServlet에서 디버그 로그 문을 볼 수 없습니다. 이제 그 이유를 알아 내야 만합니다.
문제를 해결하려면''를 사용하여 디버그 출력을 활성화하십시오. 또는, 시스템 속성'-Dlogback.debug = true'를 사용하여 디버그를 활성화하십시오. –
tony19
@ tony19 감사합니다. 디버그 출력을 활성화하고 mvn 테스트로 디버그 출력을 보았습니다. 하지만 서블릿을 치면 나에게 침묵의 치료를 계속합니다. 나는 그 문제가 믿을 수 없을 정도로 간단하고 분명히 내가 완전히 빠져 나갔다고 생각하기 시작했다. – Aaron
SLF4J에서 로그백 로깅 구현을 선택하지 않은 것 같습니다. logback.jar이 web-app/lib에 있는지 확인하고 slf4j-jdk14 로깅과 같은 다른 로깅 구현이 없는지 확인하십시오. –