XPages:我需要一个完整的堆栈跟踪

时间:2015-06-09 15:46:40

标签: java xpages

尝试在此处调试XPage应用程序。当存在Java异常时,XPages在log.nsf中为我提供了很多行,并且当它变得有趣时它会说:

09/06/2015 17:32:53 HTTP JVM:... 81 more

这太烦人了,至少可以说第一个真正的错误总是在stacktrace的底部。

我是否可以设置系统参数以获得完整的堆栈跟踪?

谢谢!

最后一部分来自log.nsf数据库:

09/06/2015 17:31:15   HTTP JVM: Caused by: 
09/06/2015 17:31:15   HTTP JVM: java.lang.NullPointerException
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.domino.utils.DominoUtils.isHierarchicalName(DominoUtils.java:412)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.arpa.NamePartsMap.parse(NamePartsMap.java:545)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.arpa.NamePartsMap.parse(NamePartsMap.java:532)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.arpa.NamePartsMap.<init>(NamePartsMap.java:103)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.domino.impl.Name.parse(Name.java:1045)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.domino.impl.Name.parse(Name.java:1060)
09/06/2015 17:31:15   HTTP JVM:     at org.openntf.domino.impl.Name.getCommon(Name.java:593)
09/06/2015 17:31:15   HTTP JVM:     ... 81 more

解决

    var author= doc.getItemValueString("Author");
    if(author) {
        var editor:NotesName= session.createName(author); 
        adoc.replaceItemValue("Editor", editor.getCommon());
    }

我添加了一个简单的测试来验证作者是否为空。 Author字段曾经存在于文档中,而空NotesName上的getCommon似乎会生成异常。

3 个答案:

答案 0 :(得分:2)

我认为e.printStackTrace();为您提供了全部内容。你单独使用这个线路。它不能成为System.out.println的一部分,我曾试图做过一次,虽然这就是它本质上的作用。

你会把它放在你的catch块中。所以整个代码将是:

catch (Exception e){
            e.printStackTrace();
        }

话虽如此,我无法记住一次有用的东西,其中包括#81; 81更多&#34;堆栈跟踪线。只需搜索&#34;由...引起的&#34;

作为一般规则,您希望将代码包围在try/catch块中,即使它们不是强制性的。通常认为使用日志记录来捕获错误比使用System.out.println和/或printStackTrace()

写入Notes日志更好

答案 1 :(得分:2)

XPages OpenLog Logger(以及OpenNTF Domino API中的相同代码)将错误的完整堆栈跟踪写入OpenLog。如果您在数据库中定义了自定义错误页面,则还会使用堆栈跟踪记录未捕获的异常。 (需要自定义错误页面,因此渲染响应阶段会运行,尽管在新页面中,它允许代码创建日志。)

如果可能,它还将识别触发错误的组件。

答案 2 :(得分:1)

根据javadoc,这些行将出现在堆栈跟踪本身中..请参阅此处:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html#printStackTrace()

  

注意是否存在包含字符“...”的行。这些行表示此异常的堆栈跟踪的剩余部分匹配由此异常(“封闭”异常)引起的异常的堆栈跟踪底部的指示帧数。这种简写可以大大减少输出的长度,在这种情况下,从捕获“致使异常”的同一方法抛出包装异常