Tag: logging

如何让泽西使用SLF4J代替JUL?

我找到了一篇有用的文章 ,解释了如何让泽西使用SLF4J而不是JUL。 现在我的unit testing看起来像(并且它完美地工作): 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 { // … } } 我的pom.xml包含以下依赖项: […]

混合log4j 1.x和log4j 2

我有一个使用log4j2编写的新应用程序,以利用它的一些新function。 它使用的其中一个库有点旧,用log4j 1.x构建。 我遇到的问题是应用程序中的新代码写入日志,但旧库中的代码不会写入日志。 我甚至有一个类是旧库中的某个子类,并且也被旧库中的代码调用,并且此代码也不会写入日志。 我已将应用程序配置为使用log4j2版本2.0.2,并在将旧库引用为maven依赖项时明确排除了log4j。 如何让旧库中的代码登录到与我的新代码相同的文件中? 重写旧库应该被认为是最后的选择

如何配置Tomcat JULI日志记录以滚动日志文件?

我有几个使用java.util.logging的webapps。 Tomcat 5.5配置为使用Juli记录器,以便每个webapp都有自己的日志文件。 问题是Juli没有最大文件大小和文件数的属性。 使用Juli文件将无限增长,并且只在一天结束时滚动。 此外,还保留了无限数量的日志文件。 您可以在此页面上看到FileHandler属性 – Apache Tomcat 5.5文档 没有限制或计数属性(以下行无效) org.apache.juli.FileHandler.limit=102400 org.apache.juli.FileHandler.count=5 在不更改webapps的情况下,有没有办法为每个应用程序获取日志文件大小的某种类型的边界的唯一日志文件? 更新:我发现的解决方案根本不使用Juli记录器! java.util.logging.FileHandler.limit=102400 java.util.logging.FileHandler.count=5 谢谢, 格雷格

如何以编程方式在运行时添加Log4J2 appender?

是否可以使用XML配置中的规范以编程方式添加Log4J2 appender? 我计划在log4j2.xml中定义它,然后像这样选择appender(不会编译): if (arg[0].equals(“log”) ) { Logger.getLogger(“loggerNameFromXMLConfig”).addAppender(“appenderNameFromXMLConfig”); } else { //… }

使用Java记录PreparedStatements

总是很痛苦的一件事是当你有PreparedStatement而不是查询本身时记录SQL(JDBC)错误。 你总是得到如下消息: 2008-10-20 09:19:48,114 ERROR LoggingQueueConsumer-52 [Logger.error:168] Error executing SQL: [INSERT INTO private_rooms_bans (room_id, name, user_id, msisdn, nickname) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE room_id = ?, name = ?, user_id = ?, msisdn = ?, nickname = ?] 当然,我可以编写一个辅助方法来检索值并用真实值解析/替换问号(如果我没有得到这个问题的结果,可能会沿着这条路走下去),但我只是想知道是否这个问题之前由其他人解决了和/或是否有任何通用的日志记录助手可以自动为我做这件事。 几个答案后编辑: 到目前为止提供的库似乎适合于记录调试语句,这无疑是有用的。 但是,我正在寻找一种方法来获取PreparedStatement本身(不是某些子类)并在发生错误时记录其SQL语句。 我不想部署具有PreparedStatement备用实现的生产应用程序。 我想我正在寻找一个实用工具类,而不是PreparedStatement专业化。 谢谢!

如何使用JDK Logging手动滚动日志文件

我有一个应用程序,它使用JDK Logging和logging.properties文件,该文件通过java.util.logging.FileHandler.count配置一些较旧的日志文件。 在应用程序的某些点,我想触发日志文件的手动翻转,以启动新的日志文件,例如在计划的活动开始之前。 这可能与JDK Logging有关吗? 在Log4j我使用以下,但在这种情况下,我想使用JDK日志记录! Logger logger = Logger.getRootLogger(); Enumeration appenders = logger.getAllAppenders(); while(appenders.hasMoreElements()) { Object obj = appenders.nextElement(); if(obj instanceof RollingFileAppender) { ((RollingFileAppender)obj).rollOver(); } }

如何正确设置Spring Boot和log4j2?

如何通过log4j2以及我拥有的其他依赖项(Hibernate,Netty,Mina等)正确地进行Spring日志记录? 我尝试了很多不同的细节和依赖组合。 但我要么可以让Spring登录而不是其他任何东西,或者除了Spring之外的其他东西。 所有dependecies正确记录(但Spring)我收到以下错误: java.lang.NoSuchMethodError: org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(Lorg/apache/logging/log4j/core/config/ConfigurationSource;)Lorg/apache/logging/log4j/core/config/Configuration; at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadConfiguration(Log4J2LoggingSystem.java:167) at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadDefaults(Log4J2LoggingSystem.java:150) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:75) at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:50) at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.initialize(Log4J2LoggingSystem.java:140) at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:277) at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:255) at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:224) at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:200) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121) at org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.java:111) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:65) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54) at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:329) at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) at com.myproject.MyProject.main(MyProject.java:XX) 这是我的build.gradle依赖项 dependencies { // FIX engine compile ‘org.quickfixj:quickfixj-all:1.6.2’ compile […]

Log4j2 – 配置RolloverStrategy以删除旧的日志文件

我正在尝试配置log4j以仅保留指定数量的备份文件或保留不超过某个年龄的文件。 最终,我希望有时间[每日]触发策略,并保留30个备份文件或删除30天以前的文件。 在做了一些研究之后,我了解到在使用时间策略时我无法指定备份文件的最大数量但是我遇到了这个问题https://issues.apache.org/jira/browse/LOG4J2-435和这个文档片段http: //logging.apache.org/log4j/2.x/manual/appenders.html#CustomDeleteOnRollover ,描述如何根据文件的年龄和名称模式删除文件。 现在我尝试在每分钟创建新备份文件的简单示例中应用此配置,并将自动删除3分钟以前的文件。 为此,我使用以下pom创建了简单的maven项目: 4.0.0 test test 1.0-SNAPSHOT org.apache.logging.log4j log4j-api 2.5 org.apache.logging.log4j log4j-core 2.5 org.apache.maven.plugins maven-dependency-plugin copy-dependencies prepare-package copy-dependencies ${project.build.directory}/lib false false true org.apache.maven.plugins maven-jar-plugin true lib/ test.Main log4j2.xml配置文件: %d %p %c{1.} [%t] %m%n <!—-> 和主要课程: package test; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * Created by mzurawski on 2015-12-22. */ public class […]

jar外部的spring boot log4j文件?

如何通过? 我能让它工作的唯一方法是将log4j.xml放在类路径上。 传递:-Dlog4j.configuration = file:/// c:\ log4j2.xml在命令行上不起作用(虽然它在非spring-boot测试应用程序中做得很好)。 我也尝试在spring将它作为环境变量/属性。

如何在Spring中拦截RequestRejectedException?

我在Tomcat日志中看到了大量的RequestRejectedException条目(下面粘贴了样本)。 几个月前,经过次要版本升级(Spring Security 4.2.4,IIRC)之后,这些内容开始出现在我的日志文件中,因此这显然是Spring中默认启用的新安全function。 这里报告了一个类似的问题,但我的问题具体涉及如何在控制器中拦截这些exception。 针对此问题记录了一个Spring Security错误( 提供一种处理RequestRejectedException的方法 )。 但是,在Spring 5.1之前,他们并未针对此问题进行修复。 我理解为什么抛出这些exception ,我不想禁用此安全function 。 我想获得对此function的一些控制,以便: 我知道我不会阻止合法用户访问我的网站。 我可以看到哪些请求触发了这个(它们是SQL注入攻击吗?) 我可以调整服务器响应。 Spring Security防火墙将完整的堆栈跟踪转储到Web客户端(信息泄露),以及500 Internal Server Error (这非常不正确,这应该是400 Bad Request )。 我想找到一种方法来记录所请求的URL,但也可以专门针对这些exception来抑制堆栈跟踪,因为它们会在不给我任何有用信息的情况下污染我的日志文件。 最理想的情况是,我想截取这些exception并在我的应用程序层中处理它们,而不是在Tomcat日志中报告它们。 例如,这是我的catalina.out每天出现的数千个日志条目之一: Aug 10, 2018 2:01:36 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because […]