我最近开始使用 Log4j。我发现了一种更好的参数化日志记录技术。
我引用了以下链接。
https://logging.apache.org/log4j/2.x/performance.html
以上链接适用于 log4j2。但我想知道这是否同样适用于 1.2.9
当我尝试编写带有参数的记录器语句时,出现以下错误。
The method info(Object, Throwable) in the type Category is not applicable for the arguments (String, String)
我检查了源代码
我使用的是 log4j 1.2.9
java代码如下。
import org.apache.log4j.Logger;
import com.test.validators.CreateValidator;
public class CreateLogic {
Logger admin = Logger.getLogger("admin");
public void createLogic(){
admin.info("This is Create Logic");
CreateValidator CreateValidator = new CreateValidator();
CreateValidator.validateCreate();
int i = 5;
admin.info("the name is {}",i);
}
}
log4j属性如下。
log4j.logger.admin=INFO, admin
log4j.additivity.admin = false
log4j.appender.admin=org.apache.log4j.RollingFileAppender
log4j.appender.admin.File=C:\\Create.log
log4j.appender.admin.MaxFileSize=5MB
log4j.appender.admin.MaxBackupIndex=1
log4j.appender.admin.layout=org.apache.log4j.PatternLayout
log4j.appender.admin.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
最佳答案
您从 2.x API 引用的方法不是参数化日志记录,或者至少不是您想要的方式。您真正想要的方法是 void info(String message, Object... params) 。这个方法是log4j 2.x API的一部分。看起来 log4j 1.x 本身并没有提供它。但是,如果您未绑定(bind)到 log4j,您可以查看 sl4j 库,它本质上隐藏了 log4j 实现并提供参数化日志记录功能。
如果您绑定(bind)到log4j,那么我认为一种解决方案是使用您在日志消息中传递的参数预先格式化消息,如下所示:
int i = 5;
String msg = String.format("the name is %d", i);
admin.info(msg);
希望有帮助。
关于java - 使用 log4j 在 java 中进行参数化日志记录时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738777/