yeg*_*256 23 java logging log4j jersey slf4j
我找到了一篇有用的文章,解释了如何让泽西使用SLF4J而不是JUL.现在我的单元测试看起来像(并且它完美地工作):
public class FooTest extends JerseyTest {
@BeforeClass
public static void initLogger() {
java.util.logging.Logger rootLogger =
java.util.logging.LogManager.getLogManager().getLogger("");
java.util.logging.Handler[] handlers = rootLogger.getHandlers();
for (int i = 0; i < handlers.length; i++) {
rootLogger.removeHandler(handlers[i]);
}
org.slf4j.bridge.SLF4JBridgeHandler.install();
}
public FooTest() {
super("com.XXX");
}
@Test
public void testSomething() throws Exception {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我pom.xml包括这些依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但我不想在每个单元测试中进行相同的配置.这是一个明显的代码重复,我想避免.我怎样才能更有效地做到这一点?
PS.也许不可能优化上面的代码,我尽我所能?
ass*_*ias 17
如果您使用的是客户端API,则可以手动将日志重定向到slf4j(请注意,它可能会在将来的版本中中断,尽管看起来不太可能):
Logger LOG = LoggerFactory.getLogger(MyClass.class); //slf4j logger
WebTarget ws = ClientBuilder.newClient(config)
.register(new LoggingFilter(new JulFacade(), true));
private static class JulFacade extends java.util.logging.Logger {
JulFacade() { super("Jersey", null); }
@Override public void info(String msg) { LOG.info(msg); }
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是通过自定义监听器.在JSF servlet之前初始化它应该在中配置jul-to-slf4j桥contextInitialized(ServletContextEvent).
| 归档时间: |
|
| 查看次数: |
12237 次 |
| 最近记录: |