log4j格式化在java中打印

时间:2014-10-03 02:12:27

标签: java log4j

这是我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

2 个答案:

答案 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