2017-05-02 1 views
0

Ich habe vor kurzem Log4j verwendet. Ich bin auf eine bessere Protokollierungstechnik der parametrisierten Protokollierung gestoßen.Fehler in der parametrisierten Protokollierung in Java mit log4j

Ich habe den folgenden Link verwiesen.

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

Der obige Link ist für log4j2. Aber ich frage mich, ob das gleiche gilt für 1.2.9

Wenn ich versuche, eine Logger-Anweisung mit Parametern zu schreiben, bekomme ich unter Fehler.

Die Methode info (Object, Throwable) in der Art Kategorie ist nicht anwendbar für die Argumente (String, String)

ich den Quellcode von

checkte ich log4j bin mit 1.2.9

Der Java-Code ist wie folgt.

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 Eigenschaften sind wie folgt.

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 
+0

Sie haben Recht. '.info (Objektnachricht, Throwable t)' wird sowohl in 1.x als auch in 2.x APIs angeboten. Ihr Problem scheint zu sein, dass Sie "Ich" als Throwable einreichen, aber es ist nicht. – Ishnark

+0

Wie schreibe ich in diesem Fall parametrierte Logger? –

+0

Ich sehe das Problem – Ishnark

Antwort

2

Die Methode, die Sie aus der 2.x-API-Referenz ist nicht parametrisierte Protokollierung, oder zumindest so, wie Sie wollen. Die Methode, die Sie tatsächlich möchten, ist void info(String message, Object... params). Und diese Methode ist Teil der log4j 2.x API. Es sieht so aus, als würde log4j 1.x es nicht alleine anbieten. Wenn Sie jedoch nicht an log4j gebunden sind, können Sie sich die Bibliothek sl4j ansehen, die im Wesentlichen die log4j-Implementierung versteckt und diese parametrisierte Protokollierungsfunktionalität bietet.

Wenn Sie sind verpflichtet, LOG4J, dann denke ich, eine Lösung, die die Nachricht vorher mit den Parametern zu formatieren würden Sie in der Log-Nachricht übergeben hätte, etwa so:

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

Hoffe, das hilft .

Verwandte Themen