Hyperledger fabric 如何很好地格式化(“漂亮打印”)结构链码查询输出?
我试图生成一个格式良好的特定分类账分录(或分录范围)视图,其中包含所有相关值 运行链码查询时,会得到如下输出:Hyperledger fabric 如何很好地格式化(“漂亮打印”)结构链码查询输出?,hyperledger-fabric,hyperledger-chaincode,Hyperledger Fabric,Hyperledger Chaincode,我试图生成一个格式良好的特定分类账分录(或分录范围)视图,其中包含所有相关值 运行链码查询时,会得到如下输出: user@server:~/fabric-samples/test-network$ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n myFirstChaincode --
user@server:~/fabric-samples/test-network$ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C mychannel -n myFirstChaincode --peerAddresses localhost:7051 --tlsRootCertFiles $PEER1_TLS -c '{"function":"queryOrder","Args":["004"]}'
2020-11-08 16:01:05.166 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"{\"actualDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}},\"customer\":\"GM\",\"dueDate\":\"tomorrow\",\"manufacturer\":\"undefined\",\"manufacturingData\":{},\"numOfDims\":\"5\",\"orderStatus\":\"new\",\"partID\":\"004\",\"partName\":\"Test Part\",\"requiredDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}}}"
此输出看起来像一个长JSON字符串,其换行符替换为\
我正在寻找一个人类可读的输出。虽然我可以阅读上面的条目,但相关的数据结构非常简单。如果我查询另一个包含多个嵌套对象的条目,它很快就会变得非常混乱,难以轻松读取
我曾尝试向chaincode查询函数添加类似于JSON.stringify(value,null,4)
的内容,但这没有帮助:
2020-11-07 23:40:41.964 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"{\n \"actualDimensions\": {\n \"DIM1\": {},\n \"DIM2\": {},\n \"DIM3\": {},\n \"DIM4\": {}\n },\n \"customer\": \"GM\",\n \"dueDate\": \"tomorrow\",\n \"manufacturer\": \"undefined\",\n \"manufacturingData\": {},\n \"numOfDims\": \"5\",\n \"orderStatus\": \"new\",\n \"partID\": \"004\",\n \"partName\": \"Test Part\",\n \"requiredDimensions\": {\n \"DIM1\": {},\n \"DIM2\": {},\n \"DIM3\": {},\n \"DIM4\": {}\n }\n}"
看来peer命令可能在JSON.stringify之后格式化输出
建议您可以使用环境变量修改peer命令所使用的日志记录格式,尽管除了这一网页之外,我没有找到任何示例或详细信息。
当我尝试将环境变量添加到cli时:
export FABRIC\u LOGGING\u FORMAT=json
,没有多大帮助(它添加了更多“/”而不是换行):
(上面的测试是在一个单独的服务器上运行的,使用的是股票样本链码。)
注意:我还尝试用“format:json”更新fabric samples/config/core.yaml文件,然后重新运行链码(在正确关闭所有内容并重新启动网络之后)。这提供了与以前相同的输出(与原始输出没有变化)。我还尝试在/etc/hyperledger/fabric/core.yaml处编辑对等docker容器的内部core.yaml文件,这似乎也不会影响输出
我还尝试从应用程序调用链码(而不是直接从CLI)。结果输出字符串不再具有“/”(但仍然没有换行符/缩进):
如果我尝试在输出字符串上使用JSON.stringify,我会再次得到“/”:
user@server$ node query2.js
Wallet path: /home/user/Project/application/wallet
Transaction has been evaluated, result is: "{\"actualDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}},\"customer\":\"GM\",\"dueDate\":\"tomorrow\",\"manufacturer\":\"undefined\",\"manufacturingData\":{},\"numOfDims\":\"5\",\"orderStatus\":\"new\",\"partID\":\"004\",\"partName\":\"Test Part\",\"requiredDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}}}"
以下是应用程序代码:(第48行是原始代码;第46-47行是第二个版本)
我在一个类似的问题中看到了这一点,但它并没有为漂亮的格式提供任何解决方案
目前对此是否有任何解决方案/建议
我很乐意使用JSON格式或任何其他具有空格/换行符的格式,并使当前输出更具可读性。您可以更新core.yaml,也可以在docker compose文件中使用“FABRIC\u LOGGING\u FORMAT” 下面给出了core.yaml的示例:
# Logging section for the chaincode container
logging:
# Default level for all loggers within the chaincode container
level: info
# Override default level for the 'shim' logger
shim: warning
# Format for the chaincode container logs
format: json
您可以在“fabric samples/config”目录中找到core.yaml
链接:
如果下载最新的结构示例,可以在“fabric samples/config”目录中找到sample core.yaml
docker compose文件中的“FABRIC_LOGGING_FORMAT”示例如下所示:
您必须使用“-FABRIC\u LOGGING\u FORMAT=json”编辑cli容器的环境
您好,谢谢您的回复!您知道可以使用哪些格式参数来改进输出的格式(例如插入适当的换行符和间距)吗?我仍然不确定如何完成这部分(或者是否可以使用core.yaml或FABRIC_LOGGING_FORMAT环境变量完成)。Hi Ta seen Junaid,感谢您的回复和编辑。由于我正在使用的最新结构示例中没有cli容器,因此我向两个对等节点添加了“-fabric\u LOGGING\u FORMAT=json”变量。然而,它并没有改变输出。我尝试直接在CLI中设置变量-这一次,它更改了输出,但没有添加换行符,而是添加了额外的“/”。(请参阅我在编辑的帖子中添加的代码输出。)您可以在“fabric samples/config”目录中找到core.yaml。请在core.yaml中更新“format:json”。我也更新了我的答案。core.yaml和docker compose文件都适合我。是的,您使用的是对等cli,而不是容器。链接:你好,我在fabric samples/config/core.yaml中添加了“format:json”,清理了网络(./network down),重新启动了网络和链码-我的输出中仍然有“/”。我还尝试登录到对等容器并修改对等容器的内部core.yaml(位于/etc/hyperledger/fabric/core.yaml),然后重新运行链码,但仍然收到相同的输出。
user@server$ node query2.js
Wallet path: /home/user/Project/application/wallet
Transaction has been evaluated, result is: "{\"actualDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}},\"customer\":\"GM\",\"dueDate\":\"tomorrow\",\"manufacturer\":\"undefined\",\"manufacturingData\":{},\"numOfDims\":\"5\",\"orderStatus\":\"new\",\"partID\":\"004\",\"partName\":\"Test Part\",\"requiredDimensions\":{\"DIM1\":{},\"DIM2\":{},\"DIM3\":{},\"DIM4\":{}}}"
45 ¦ ¦ ¦ const result = await contract.evaluateTransaction('queryOrder','004');
46 ¦ ¦ ¦ const stringResult=result.toString();
47 ¦ ¦ ¦ console.log(`Transaction has been evaluated, result is: ${JSON.stringify(stringResult,null,4)}`);
48 ¦ ¦ ¦ //console.log(`Transaction has been evaluated, result is: ${result.toString()}`);
# Logging section for the chaincode container
logging:
# Default level for all loggers within the chaincode container
level: info
# Override default level for the 'shim' logger
shim: warning
# Format for the chaincode container logs
format: json
cli:
container_name: cli
image: hyperledger/fabric-tools:$IMAGE_TAG
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
#- FABRIC_LOGGING_SPEC=DEBUG
- FABRIC_LOGGING_FORMAT=json
- FABRIC_LOGGING_SPEC=INFO
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
networks:
- byfn