- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Spring 启动应用程序,我想通过我的 slf4j 日志系统将 Tomcat 的访问日志路由到远程系统日志。
既然是Spring,我想避免接触tomcat的server.xml文件。
我的 AccessLogValve 非常简单:
import java.io.CharArrayWriter;
import org.apache.catalina.valves.AccessLogValve;
public class Log4JAccessLogValve extends AccessLogValve {
@Override
public void log(CharArrayWriter message) {
log.info(message.toString());
}
}
我希望可以使用类似这样的东西将它连接到 Tomcat:
@Component
public class LogConfig {
@Autowired
private ServletContext servletContext;
@PostConstruct
public void setAccessLogValve() {
((ApplicationContextFacade)servletContext).addValve(new Log4JAccessLogValve());
}
}
除了 addValve() 方法不存在...
那么...有人知道我如何连接我的 AccessLogValve 吗?
我也对将访问日志获取到远程系统日志中的完全不同的建议持开放态度,但我们正在制作数十种微服务,因此它必须是一种非常标准化的方法,并且对于每个微服务都易于实现。
最佳答案
将这些答案组合成适用于 springboot 2.0 的东西
import org.apache.catalina.valves.AbstractAccessLogValve;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
import java.io.CharArrayWriter;
/**
* see https://www.baeldung.com/embeddedservletcontainercustomizer-configurableembeddedservletcontainer-spring-boot
*
*/
@Component
@Slf4j
public class CustomizeEmbeddedTomcatContainer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
log.info("configuring embedded Tomcat");
TomcatSlf4jAccessValve accessLogValve = new TomcatSlf4jAccessValve();
accessLogValve.setEnabled(true);
/**
* for pattern format see https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
*/
accessLogValve.setPattern("request: method=%m uri=\"%U\" response: statuscode=%s bytes=%b duration=%D(ms) client: remoteip=%a user=%u useragent=\"%{User-Agent}i\"");
factory.addContextValves(accessLogValve);
}
public static class TomcatSlf4jAccessValve extends AbstractAccessLogValve {
Logger httpAccessLogLogger = LoggerFactory.getLogger("http_access_log");
@Override
protected void log(CharArrayWriter message) {
httpAccessLogLogger.info(message.toString());
}
}
}
关于java - 如何以编程方式将 AccessLogValve 添加到 Tomcat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40172395/
我在 RHEL 7.2 服务器上安装了 Apache Httpd 2.4.6 和 Tomcat 7.0.54,配置了 AJP 连接器和 SSL,并启用了 SELinux。当我启动 Tomcat 服务器
下面是我的 server.xml 日志配置,我正在尝试调试某些内容,并且确实需要访问日志。尽管配置了 Valve 属性,Tomcat 突然停止创建访问日志。有什么指点吗? 提前谢谢您。 最佳答
我想用 setenv.bat 中的值填充 accesslogvalve 中的“dir”。例如: 我在 setenv.bat 中指定了“my.logs.dir” 设置 my.logs.dir=C:\x
我尝试让 Tomcat 有条件地跳过日志记录,因此访问日志不会充满大量本地应用程序到应用程序的通信条目。 目前我在 server.xml 中有以下内容: 如您所见,我使用 RemoteIpValv
是否可以在不重启 Tomcat 的情况下重新加载 server.xml 中的更改? 我想在许多服务器上对我的 access_log 格式(在 org.apache.catalina.valves.Ac
是否可以将 AccessLogValve 配置为在将密码写入日志文件之前隐藏/替换密码?我对阀门不熟悉,也许有办法插入自定义过滤器/阀门? 最佳答案 使用自定义 AccessLogValve 类的解决
我正在使用 Shiro (v1.2.1) 作为安全框架,它工作得很好,但是在 Tomcat (v7.0.32) 的访问日志中你无法远程访问当经过身份验证的用户访问任何资源时,用户登录。对于我的示例 W
我正在开发一个 Spring 启动应用程序,我想通过我的 slf4j 日志系统将 Tomcat 的访问日志路由到远程系统日志。 既然是Spring,我想避免接触tomcat的server.xml文件。
简单的问题是,使用 AccessLogValve 相对于 FastCommonAccessLogValve 是否存在明确的、可量化的开销? 如果我在 JBoss 4.2.3GA 中启用访问日志记录,我
我们有一个独立的 spring-boot 应用程序,我们希望在其中设置访问日志模式 X-forwarded-for header 存在于请求中:它应该作为第一个字段包含在日志中 X-forwarded
我是一名优秀的程序员,十分优秀!