簡體   English   中英

使用log4j在Java中進行參數化日志記錄時出現錯誤

[英]Errors in Parameterized Logging in java using log4j

我最近開始使用Log4j。 我遇到了一種更好的參數化日志記錄技術。

我引用了以下鏈接。

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

上面的鏈接用於log4j2。 但我想知道是否同樣適用於1.2.9

當我嘗試編寫帶有參數的logger語句時,出現以下錯誤。

類型類別中的方法info(Object,Throwable)不適用於參數(字符串,字符串)

我檢查了源代碼

我正在使用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

parameterized logging, or at least in the way you want. 從2.x API引用的方法參數化日志記錄,或者至少不是您想要的方式。 您實際想要的方法是void info(String message,Object ... params) 而且此方法是log4j 2.x API的一部分。 看起來log4j 1.x並沒有單獨提供它。 bound to log4j, you could take a look at the sl4j library, which essentially hides the log4j implementation and offers that parameterized logging functionality. 但是,如果您限於log4j,則可以查看sl4j庫,該庫實質上隱藏了log4j實現並提供了該參數化的日志記錄功能。

bound to log4j, then I think one solution would be to format the message beforehand with the parameters you would have passed in the log message, like so: 如果一定要log4j的話,我認為一個解決辦法是你將在日志消息已經過去了,像這樣的參數預先格式化消息:

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

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM