La respuesta JSON de Hyperledger Fabric tiene barras invertidas

Aug 19 2020

Actualmente estoy probando una aplicación Hyperledger Fabric, pero obtengo una respuesta JSON inesperada. ¿Por qué hay barras diagonales inversas adicionales entre cada objeto en la respuesta?

result, err := json.Marshal(history)
logger.Debug(string(result))
if err != nil {
    message := fmt.Sprintf("unable to marshal the result: %s", err.Error())
    logger.Error(message)
    return shim.Error(message)
}

logger.Info("SimpleChaincode.getHistory exited successfully")
return shim.Success(result)

Salida CLI real:

Chaincode invoke successful. result: status:200 payload:"[{\"type\":\"history\",\"key\":\"key\",\"values\":[{\"tx_id\":\"723a398362282d92f7b05b821fc8f835736b6068e5d1b72d105fc86d6e57d64e\",\"value\":\"initial_value\",\"is_delete\":false}]}]" 

Resultado CLI esperado:

Chaincode invoke successful. 
result: status:200 
payload:
[
   {
      "type":"history",
      "key":"key",
      "values":[
         {
            "tx_id":"723a398362282d92f7b05b821fc8f835736b6068e5d1b72d105fc86d6e57d64e",
            "value":"initial_value",
            "is_delete":false
         }
      ]
   }
]

Registros de Docker:

2020-08-19 14:40:18.823 UTC [SimpleChaincode] Debug -> DEBU 015 [{"type":"history","key":"key","values":[{"tx_id":"723a398362282d92f7b05b821fc8f835736b6068e5d1b72d105fc86d6e57d64e","value":"initial_value","is_delete":false}]}]
2020-08-19 14:40:18.823 UTC [SimpleChaincode] Info -> INFO 016 SimpleChaincode.getHistory exited successfully

Respuestas

Ta-seenJunaid Nov 09 2020 at 03:33

Formato de registro

El formato de registro de los comandos peer y orderer se controla mediante la variable de entorno FABRIC_LOGGING_FORMAT. Esto se puede establecer en una cadena de formato, como la predeterminada

"%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}"

para imprimir los registros en un formato de consola legible por humanos. También se puede configurar en json para generar registros en formato JSON.

Enlace: https://hyperledger-fabric.readthedocs.io/en/release-2.2/logging-control.html#logging-format

Puede actualizar core.yaml o puede utilizar "FABRIC_LOGGING_FORMAT" en su archivo de composición de la ventana acoplable.

A continuación se muestra un ejemplo con 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

Puede encontrar core.yaml en el directorio "fabric-samples / config".

Enlace: https://github.com/hyperledger/fabric/blob/master/sampleconfig/core.yaml

Si descarga las últimas muestras de fabric, puede encontrar sample core.yaml en el directorio "fabric-samples / config".

A continuación se muestra un ejemplo con "FABRIC_LOGGING_FORMAT" en el archivo de composición de su ventana acoplable: Tiene que editar el entorno del contenedor cli con "- FABRIC_LOGGING_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/[email protected]/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