使用log4j在java中参数化日志记录中的错误

时间:2017-05-02 13:09:45

标签: java logging log4j

我最近开始使用Log4j。我遇到了一种更好的参数化日志记录技术。

我提到了以下链接。

https://logging.apache.org/log4j/2.x/performance.html

以上链接适用于log4j2。但我想知道这是否适用于1.2.9

当我尝试使用参数编写记录器语句时,我的误差低于此值。

  

类别Category中的方法info(Object,Throwable)不是   适用于参数(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

1 个答案:

答案 0 :(得分:2)

您从2.x API 引用的方法不是参数化日志记录,或者至少以您希望的方式引用。您真正想要的方法是void info(String message, Object... params) 。此方法是log4j 2.x API的一部分。看起来log4j 1.x并不能单独提供它。但是,如果您没有绑定到log4j,您可以查看sl4j库,它基本上隐藏了log4j实现并提供了参数化日志记录功能。

如果 绑定到log4j,那么我认为一种解决方案是使用您在日志消息中传递的参数预先格式化消息,如下所示:

 int i = 5;
 String msg = String.format("the name is %d", i);
 admin.info(msg);

希望有所帮助。