0

我正在开发使用第三方库(.NET eBMS/AS4 客户端)所需的 .NET 应用程序;该第三方库本身就是 Java 库的 JNI 包装器。当我调用该库时,Java 库中发生了异常,但是实现包装器的人并没有做好它,因为 Java 异常包含的任何信息(例如错误代码、特定错误消息)都没有添加到传递回我的应用程序的 .NET 异常,我得到的只是最通用的错误消息。正如您可以想象的那样,这使得支持生产中的应用程序成为一个困难的提议。

但是,如果我在 Visual Studio 中的开发人员 PC 上运行相同的代码,那么如果我观察输出窗口,调试器会从 Java 库中写入大量信息——我可以看到它正在自行初始化,加载它的所有模块,然后执行,最后我可以看到我的 Java 异常发生了,实际的错误就在输出窗口中。

Jul 25, 2018 8:46:42 AM com.ibm.b2b.as4.client.internal.MessageBatcherImpl logEventAudit
INFO: Event Details: App Context Component:[COMMS]; App Context Service Inst:[AS4]; Trans Id:[ebb64ae1-762d-4175-9ca3-61c0b7d74f48]; Stage:[PROCESSING_IN_PROGRESS]; Event Date Time:[25/07/2018 8:46:42 AM]; Event Action:[SENDING_REQUEST]; Event Status:[SUCCESS]; Event Data:[Mime Packing and sending request]; Is Processing:[false]; Is Final:[false]; Exchange Profile Id:[BatchBulkAsyncPull-EVTE-9ea3427a-ed94-474c-8785-460d2dc28a61]; Storage Ref:[Content-Type:[multipart/related]; Storage Blob Id:[000000020028418e00617564697400000000000000000000aa1c854f9817c08d00000164ddec3291]; ]; Role:[REQUEST]; Exchange Group Id:[e88e4628-13fc-411f-ab83-2a297dccb186]; External Reference:[Destination IP=[test2.ato.sbr.gov.au]]; 
Jul 25, 2018 8:46:42 AM com.ibm.b2b.as4.client.internal.MessageBatcherImpl logEventAudit
INFO: Event Details: App Context Component:[COMMS]; App Context Service Inst:[AS4]; Trans Id:[ebb64ae1-762d-4175-9ca3-61c0b7d74f48]; Stage:[PROCESSING_IN_PROGRESS]; Event Date Time:[25/07/2018 8:46:42 AM]; Event Action:[UNPACKAGING]; Event Status:[SUCCESS]; Event Data:[Unpacking Mime Message]; Is Processing:[false]; Is Final:[false]; Exchange Profile Id:[BatchBulkAsyncPull-EVTE-9ea3427a-ed94-474c-8785-460d2dc28a61]; Storage Ref:[Content-Type:[multipart/related]; Storage Blob Id:[000000020028dcb9006175646974000000000000000000007ca39a2ac13a687b00000164ddec3571]; ]; Role:[REQUEST]; Exchange Group Id:[e88e4628-13fc-411f-ab83-2a297dccb186]; External Reference:[Destination IP=[test2.ato.sbr.gov.au]]; 
Exception in thread "main" EBMS ERRORS : 1 - [ error Code : EBMS:0006, Severity : WARNING, Description : There is no message available for pulling from this MPC at this moment., Error Details : EmptyMsgPartitionChannelException: Pulling message from pull destination failed., RefToMessageInError : A1528423965023.21c28b02-2092-4faf-a394-96a1264f7e6e@1528423965023, Origin : EBMS, Category : Communication, Short description : EmptyMessagePartitionChannel].
    at com.ibm.b2b.as4.client.internal.ResponseImpl.workWithError(ResponseImpl.java:214)
    at com.ibm.b2b.as4.client.internal.ResponseImpl.<init>(ResponseImpl.java:89)
    at com.ibm.b2b.as4.client.internal.RequestImpl.createResponse(RequestImpl.java:341)
    at com.ibm.b2b.as4.client.internal.RequestImpl.createResponse(RequestImpl.java:317)
    at com.ibm.b2b.as4.client.internal.RequestImpl.sendBDO(RequestImpl.java:249)
    at com.ibm.b2b.as4.client.internal.RequestImpl.send(RequestImpl.java:226)
Exception thrown: 'IBM_AS4Client.AS4ClientEbMSException' in AS4Client_x64.dll

所以我的问题是:我怎样才能获得调试器可以看到但.NET 运行时不知道的信息?其中一些看起来像日志输出,但它没有被写入我能找到的文件系统上的任何日志中。

更新

第三方代码似乎对log4cxx有所利用(至少,它自带了一个log4cxx.properties和一个log4cxx_x64.dll,但log4cxx.properties似乎是纯log4j);无论如何,我对其进行了调整以显示 DEBUG 级别,而不是之前显示的默认 INFO 级别,现在我可以看到一些输出,但只有 DEBUG 级别,而不是 INFO 或更高级别。下面示例中的 INFO 条目与 DEBUG 条目使用的布局不同,因此我怀疑它们不是由 log4j 编写的。

进一步挖掘(嘿,我是 .NET 人,而不是 Java 人,所以我不知道这些东西是做什么的,直到我用尖头棒戳它)产生一个logging.properties文件,连同上面的日志记录示例,表明INFO: 东西是由 java.utils.logging 编写的,因此值得进行更多调查。

4

0 回答 0