java - 使用 log4j 在 java 中进行参数化日志记录时出现错误

标签 java logging log4j

我最近开始使用 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/

相关文章:

python - 屏蔽掉 python 日志中的敏感信息

java - 如何在 beans 实例化之前记录 spring boot 应用程序的所有 Activity 属性?

java - 在 Elasticsearch 中以 Curl 格式启用 Java REST 客户端日志记录

java - 为来自 Java 程序的用户在 Microsoft 认证服务中注册证书

java - 使用 Mockito 单独测试 Fragment 类

java - Spring Boot 2.1 在 Debug模式下启动根记录器,直到横幅打印出来?

java - Log4J2 配置中的主要参数

java - 记录器究竟如何是单例以及如何创建不同的日志文件?实现了我自己的记录器以供理解

java - 如何将列表对象放入JSon对象

具有不同匹配和替换条件的 Java String.replaceAll