java - 删除向导请求响应日志记录

标签 java jakarta-ee jersey dropwizard jersey-client

我想将 dropwizard 中的每个请求和响应记录到不同的文件中。例如,我希望将所有请求记录在 /var/log/applicationname-request.log 中,并将所有响应记录在 /var/log/applicationname-response.log

有什么方法可以达到同样的效果吗?

最佳答案

不幸的是,DropWizard 目前本身不支持此功能。请参阅this lively discussion了解更多信息。

幸运的是,如果您愿意放弃使用 DropWizard 配置日志记录,那么有一个解决方法。在 run 方法中的某个位置调用以下代码来重置日志记录并使用 sfl4j 的标准机制重新配置它:

LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
context.reset();
ContextInitializer initializer = new ContextInitializer(context);
initializer.autoConfig();

然后,您可以通过将 logback.xml 添加到类路径并进行如下配置来配置日志记录:

<configuration>
  <appender name="REQUEST" class="ch.qos.logback.core.FileAppender">
    <file>/var/log/applicationname-request.log</file>
    <append>false</append>
    <encoder>
      <pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="RESPONSE" class="ch.qos.logback.core.FileAppender">
    <file>/var/log/applicationame-response.log</file>
    <append>false</append>
    <encoder>
      <pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="org.example.request">
    <level value="DEBUG" />
    <appender-ref ref="REQUEST" />
  </logger>

  <logger name="org.example.response">
    <level value="DEBUG" />
    <appender-ref ref="RESPONSE" />
  </logger>

  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

然后您可以在资源中获取相应的记录器并退出:

static final Logger REQUEST_LOG = LoggerFactory.getLogger("org.example.request");
static final Logger RESPONSE_LOG = LoggerFactory.getLogger("org.example.response");

关于java - 删除向导请求响应日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356918/

相关文章:

java - jdbc 语句的 Hibernate 模拟.setBinaryStream

java - 是否可以将 CORS header 添加到 Tomcat 容器中来自 j_security_check 的响应

java - 使用注释时忽略 `web.xml` 中的过滤器顺序?

java - Jersey 1.x 和 Tomcat : how to register a ContainerRequestFilter programmatically, 即没有 web.xml?

java - 当我尝试发送包含内联图像的电子邮件时(使用 Jersey 2 REST 客户端和 Mailgun 网络服务发送电子邮件),为什么会出现此错误?

java - 从AWS下载带有特殊字符 ":"的文件

java - 当我在 Debug模式下中断 JUnit4 测试时如何清理资源?

java - 使用远程 WSDL 生成 stub (需要使用 SSL 证书的用户名和密码)?

java - 具有双向 hasMany 关联的 Grails 查询

java - 使用 Maven Eclipse 和 Tomcat 服务器设置 RESTFull Web 应用程序项目