我正在构建一个客户端服务器,以使用fabric-go-sdk
连接Hyperledger Fabric网络。要使用自定义日志记录系统,我使用fabsdk.New()
获取一个FabricSDK
对象,然后使用gateway.WithSDK
函数将其注入Gateway
对象。检查下面的代码:
ccpPath := getPath("connection-profile.json", staticPath)
sdk, err := fabsdk.New(config.FromFile(ccpPath),
fabsdk.WithLoggerPkg(&FabSDKLoggerProvider{}), // using my custom logging system
)
if err != nil {
return nil, errors.Wrap(err, "failed to create a new fabsdk")
}
gw, err := gateway.Connect(
gateway.WithSDK(sdk),
gateway.WithIdentity(wallet, "admin"),
)
if err != nil {
return nil, errors.Wrap(err, "failed to connect the network via a fabric gateway")
}
运行测试时,出现错误:
Failed to submit: error registering for TxStatus event: could not create client conn: could not connect to peer0.test.bpl:7051: dialing connection on target [peer0.test.bpl:7051]: connection is in TRANSIENT_FAILURE
我运行的测试是使用Gateway
对象及其Submit
方法发送事务的测试。
当我定义一个没有FabricSDK
的Gateway
对象时,它工作正常。也就是说,如果我使用以下代码,测试会通过。但是,在这种情况下,我无法使用我的自定义日志记录系统。(我只想禁用结构 SDK 的日志记录系统。
ccpPath := getPath("connection-profile.json", staticPath)
gw, err := gateway.Connect(
gateway.WithConfig(config.FromFile(ccpPath)),
gateway.WithIdentity(wallet, "admin"),
)
if err != nil {
return nil, errors.Wrap(err, "failed to connect the network via a fabric gateway")
}
根据我的调查,由fabsdk.New()
和gateway.Connect(gateway.WithConfig())
初始化FabricSDK
对象之间的区别在于,gateway.Connect(gateway.WithConfig())
创建的FabricSDK
对象具有fabsdk.WithMSPPkg(gw.mspfactory)
选项,而另一个对象没有。我尝试为我的fabsdk.New()
代码提供相同的选项,但找不到该怎么做。
所以,我的问题是:
- 如何处理"TRANSIENT_FAILURE"错误,或
- 如何禁用结构 SDK 的默认日志记录系统?
谢谢。
在编写一些示例 CLI 以获取链码元数据时,我只是遇到了完全相同的两个问题
如何处理"TRANSIENT_FAILURE"错误
就我而言,dialing connection on target [peer0.org1.example.com:7051]: connection is in TRANSIENT_FAILURE
错误是因为我使用的是 Fabric 测试网络 docker 环境,但我没有设置DISCOVERY_AS_LOCALHOST环境变量。DISCOVERY_AS_LOCALHOST确定在服务发现期间找到的 IP 地址是否从 docker 网络转换为本地主机,这在开发应用程序的"连接选项"文档中进行了介绍。
如何禁用结构 SDK 的默认日志记录系统?
我仍然想看到错误消息,但我能够更改日志记录级别以使用logging.SetLevel("", logging.ERROR)
摆脱不需要的信息消息
ccmetadata 示例在 GitHub 上,如果有任何帮助的话