这是我10年来的第一个java程序。我正在尝试使用log4j 2记录错误时进行格式化打印。
我的代码是
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Feeder {
private static final Logger logger = LogManager.getLogger(Feeder.class);
public static void main(String args[]) throws InterruptedException {
try {
for (int i = 0; i < 100; i++) {
logger.info("Hello World " + i);
Thread.sleep(4000);
int x = 100 / 0;
}
}
catch (Exception ex){
StackTraceElement var[] = ex.getStackTrace();
for(StackTraceElement s: var){
logger.error("Error in Filename = %s", s.getFileName());
logger.error("Error in Class = " + s.getClassName());
logger.error("Error in line number " + s.getLineNumber());
logger.error("Error in method " + s.getMethodName());
}
//logger.error(ex.);
logger.error(ex.getMessage());
}
}
}
日志吐出以下内容
03 Oct 2014 12:12:46,302 INFO com.bluepoint.Feeder - Hello World 0
03 Oct 2014 12:12:50,304 ERROR com.bluepoint.Feeder - Error in Filename = %s
如何获取文件名而不是
%S
答案 0 :(得分:2)
记录器使用{}作为占位符,而不是%s。换掉即可。
答案 1 :(得分:1)
您可以使用String中的方法。
System.out.println(String.format("This is [%s] test", name));
在你的情况下,它将是:
logger.error(String.format("Error in Filename = %s", s.getFileName()));
有关更多格式选项:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html