有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

日志记录如何打印在Java中导致异常的参数值?

我正在为csv文件编写解析器,有时我会收到NumberFormatException。有没有一种简单的方法可以打印导致异常的参数值

目前,我是否有很多类似于以下的试抓块:

String ean;
String price;

try {
    builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
    System.out.println("EAN: " + ean);
    e.printStackTrace();
}

try {
    builder.price(new BigDecimal(price));
} catch (NumberFormatException e) {
    System.out.println("Price: " + price);
    e.printStackTrace();
}

我希望能够写一些东西,比如:

try {
    builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
    e.printMethod();    // Long.parseLong()
    e.printArgument();  // should print the string ean "99013241.23"
    e.printStackTrace();
}

有什么方法至少可以改进我的代码吗?这种打印/记录方式是否更具编程性

更新:我试图实现约阿希姆·绍尔回答的问题,但我不知道我是否一切都对,或者是否可以改进。请给我一些反馈。这是我的代码:

public class TrackException extends NumberFormatException {
    private final String arg;
    private final String method;

    public TrackException (String arg, String method) {
        this.arg = arg;
        this.method = method;
    }

    public void printArg() {
        System.err.println("Argument: " + arg);
    }

    public void printMethod() {
        System.err.println("Method: " + method);
    }
}

包装器类:

import java.math.BigDecimal;
public class TrackEx {
    public static Long parseLong(String arg) throws TrackException {
        try {
            return Long.parseLong(arg);
        } catch (NumberFormatException e) {
            throw new TrackException(arg, "Long.parseLong");
        }
    }

    public static BigDecimal createBigDecimal(String arg) throws TrackException {
        try {
            return new BigDecimal(arg);
        } catch (NumberFormatException e) {
            throw new TrackException(arg, "BigDecimal.<init>");
        }
    }
}

使用示例:

try {
    builder.ean(TrackEx.createBigDecimal(ean));
    builder.price(TrackEx.createBigDecimal(price));
} catch (TrackException e) {
    e.printArg();
    e.printMethod();
}

编辑:相同的问题,但不适用于。网络:In a .net Exception how to get a stacktrace with argument values


共 (0) 个答案