Tag: logging

如何修复Veracode CWE 117(日志输出中和不当)

有一个Spring全局@ExceptionHandler(Exception.class)方法,它记录exception,如下所示: @ExceptionHandler(Exception.class) void handleException(Exception ex) { logger.error(“Simple error message”, ex); … Veracode扫描表明此日志记录具有Improper Output Neutralization for Logs并建议使用ESAPI记录器。 有没有办法在不将记录器更改为ESAPI的情况下修复此漏洞? 这是我遇到此问题的唯一代码,我试图找出如何以最小的更改来修复它。 也许ESAPI有一些我没有注意到的方法? PS当前记录器是slf4j上的Log4j UPD:最后我使用了ESAPI记录器。 我以为它不会使用我的默认日志记录服务,但我错了,它只是使用我的slf4j logger接口和适当的配置。 private static final Logger logger = ESAPI.getLogger(MyClass.class); … logger.error(null, “Simple error message”, ex); ESAPI具有log4j记录器和记录器工厂的扩展。 可以配置在ESAPI.properties中使用的内容。 例如: ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory

如何记录Spring Boot中Rest Web服务所用的时间?

我正在使用Spring Boot编写Web Rest Web服务。 我想记录我的webservice处理请求所花费的时间。 另外我想记录调用的头文件,方法和URI。 几个月前我在我的jersey网络服务中使用ContainerRequestFilter and ContainerResponseFilter filter() method.做了类似的工作ContainerRequestFilter and ContainerResponseFilter filter() method. 另外,AOP更好还是过滤?

如何让google guice注入一个自定义记录器,比如一个commons-logging或log4j logger

Google guice具有内置的记录器绑定function 。 但是,如果我想使用commons-logging或log4j记录器呢? 我是否可以注入一个由其创建的日志 LogFactory.getLog(CLASS.class) 但具有与内置绑定相同的行为: 绑定自动将记录器的名称设置为注入Logger的类的名称。 它甚至有意义吗? 或者喊我只是使用内置的java Logger? 或者只使用没有注射的公共记录?

如何创建MyLogger?

我使用log4j进行日志记录。 我想修改方法:warn(..),error(..)。 我想在这个方法中修改消息。 那么,有什么办法,如何创建自己的记录器? public class MyLogger extends Logger { protected MyLogger(String name) { super(name); } @Override public void error(Object message) { message = “test – ” + message; super.error(message); } } 在课堂电话中: private static final Logger logger = MyLogger.getLogger(TestClass.class); logger.error(“error message”); 但它,不起作用。 你可以帮帮我吗? 谢谢。

与库一起使用的不同记录器

我的问题涉及到库类的记录(库中使用的类),我们目前正在使用log4cxx但log4j库实现了相同的概念。 假设我有一个包含多个实体A,B和C的进程。它们中的每一个都使用许多不同的类和函数,在代码中明确分开。 A,B和C使用许多库类,函数,对象,资源,有时甚至是全局变量(遗留代码,我无能为力……) – 让我们称之为foo 记录A,B和C结果是性能问题 ,当我们将日志级别设置为调试时,日志会被破坏。 查看我们的系统后,我们得出了以下结论: 我们希望能够一次只更改其中一个类的调试级别(或者所有类,使用root) 当所有类型的foo打印到日志时,我们需要查看哪个实体称为A,B或C. 因为有很多foo我们希望能够为每个foo单独更改调试级别 foo应该被视为一个公共库,它不能直接依赖于A,B或C. A,B和C可能使用相同的foo实例(例如,我们的资源处理类的相同实例使用A,B和C),在日志中我们希望看到哪个类使用了foo 。 A可以使用B(或C),但我们不必在日志中看到它… 这是我们到目前为止所提出的 – A,B和C将有单独的记录器。 全局变量(保存在包含所有日志记录助手和包装器的不同库中)将始终保持当前日志报告。 每次实体开始处理它的逻辑时,它都会将全局变量设置为正确的记录器。 当foo想要向日志报告时,它会通过全局变量进行报告, 并将其名称(和上下文)添加到日志消息中 。 问题是,感觉必须有一些事情已经做到这一点,解决方案不会感觉干净,持有像这样的全局变量…… 我们在这里做错了吗? 有更好的解决方案吗?

禁用awt / swing调试(精细)日志消息

我正在使用java日志记录将我的应用程序的日志消息写入日志文件和其他目标。 将日志级别设置为FINE ,我还从AWT / Swing中获取(不需要的)消息,例如: {0}, when grabbed {1}, contains {2} 和别的。 查看JDK源代码(参见此处 ),可以看到相应记录器的名称是sun.awt.X11.grab.XWindowPeer 。 我从Java日志框架中理解的是,这个日志记录处理程序应该从其父类如sun.awtinheritance其日志级别。 我尝试了以下方法: Logger.getLogger(“sun.awt”).setLevel(Level.OFF); 但AWT / Swing调试消息仍出现在日志输出中。 以编程方式禁用这些日志消息的推荐方法是什么(同时仍允许来自其他来源的FINE消息)?

Log4j:如何为多个appender定义公共布局和ConversionPattern

我的log4j配置中有多个appender,我想知道是否可以为所有这些配置一次定义布局和转换模式 。 即我有 log4j.appender.CA=org.apache.log4j.ConsoleAppender log4j.appender.CA.layout=org.apache.log4j.PatternLayout log4j.appender.CA.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c %x – %m%n log4j.appender.FA=org.apache.log4j.RollingFileAppender log4j.appender.FA.MaxBackupIndex=0 log4j.appender.FA.MaxFileSize=100Mb log4j.appender.FA.File=log/my.log log4j.appender.FA.layout=org.apache.log4j.PatternLayout log4j.appender.FA.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c %x – %m%n 我想知道是否以及如何定义每个appender配置的最后两行只有一次。

比较log4j和Logger

JDK的Logger与Apache log4j相比如何? 针对Java 6的新项目哪个更好? 他们如何在灵活性和可配置性方面进行比较?

如何在测试期间覆盖log4j.properties?

我正在尝试在maven测试期间将所有DEBUG消息记录到控制台。 为此,我创建了一个文件src/test/resources/log4j.properties ,它将覆盖我在src/main/resources/log4j.properties已有的配置。 不幸的是,这种压倒一切都没有发生。 为什么以及如何解决它?

SLF4J日志级别作为参数

我们希望使用SLF4J,但我们发现的一件事是你不能将关卡指定为参数,即 Logger.log(Level.INFO, “messsage”); 你必须这样做 logger.info(“message”); 这可以防止能够通过方法传递所有内容,因此您可以将其他属性添加到类中的所有日志消息。 public class Test { public Test(SomeObj obj) { log(Level.INFO, “message”); } public void anotherMethod() { log(Level.DEBUG, “another message”); } private void log(Level level, String message) { logger.log(level, message + obj.someString()); } } 有没有办法使用SLF4j实现这一目标?