繁体   English   中英

无法打印以nodejs编写并部署在hyperledger-fabric上的智能合约中的日志

[英]Unable to print logs in Smart contract written in nodejs and deployed on hyperledger-fabric

嗨,我正在运行一个用nodejs编写并部署在hyperledger-fabric 1.2上的智能合约。 智能合约或代码链可以完美运行,但是不会打印任何日志。 我已经使用console.log()语句打印了日志。

已经尝试了多种解决方法,但似乎没有任何效果。 1)根据此处建议的解决方案,将console.log()的输出重定向到文件,并覆盖console.log函数。

const util = require('util');
var fs = require('fs');
var log_file = fs.createWriteStream('ankurkhera.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

2)使用shim.newLogger函数进行了尝试,并打印了日志,但是没有用。

const shim = require('fabric-shim');
var testLog = shim.newLogger('ankurkhera');
testLog.info('============= START : createSpend ===========')

3)尝试使用任何东西查看日志

docker logs -f <container id>

这是下面我的智能合约的代码

'use strict';
const shim = require('fabric-shim');
const util = require('util');

var testLog = shim.newLogger('ankurkhera');
var fs = require('fs');
var log_file = fs.createWriteStream('ankurkhera.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

async createSpend(stub, args) {
    console.log('how are you'); //DOES NOT GET SAVED TO FILE
    testLog.info('============= START : createSpend ===========');// NO Logs
    testLog.info('============= END : createSpend ===========');
  }

我希望为我查看日志以调试用nodejs编写并部署在hyperledger fabric 1.2上的智能合约。

您应该在chaincode容器中检查chaincode的日志,因为智能合约的日志写在其容器内。 您可以使用来查找使用链码的容器

docker ps -a

在这里,您可以轻松地查看适合您的链码的容器,然后可以跟踪链码的日志:

docker logs --follow [chaincode-container-id]

您可以查看智能合约的日志-首先使用-检查正在运行的docker容器-

docker ps -a

现在您可以在此处看到各种正在运行/已存在的容器的列表,您需要记录实例化的链码容器。 使用下面提到的命令-

docker logs --follow **<container id of chaincode listed above>**

*您的chaincode容器应已启动并正在运行以检查日志

Hyperledger Fabric使用环境变量为对等方和订购者设置各种参数,为对等方设置的参数之一是链码记录

对等方的环境变量可以通过两种方式设置

  1. 通过创建core.yaml文件并将其安装到对等方/通过在docker-compose文件的environment部分中为所需对等方添加这些变量。

  2. 通过使用export命令传递安装对等方的环境变量。

在您的情况下似乎您正在尝试在上述aws模板上使用shim logger,则可以使用以下方法将波纹管env变量添加到各个对等conatiners / VPC中

export CORE_CHAINCODE_LOGGING_LEVEL=INFO    
export CORE_CHAINCODE_LOGGING_SHIM=INFO 

或将其添加到docker compose文件的enviroments部分

 - CORE_CHAINCODE_LOGGING_LEVEL=INFO
 - CORE_CHAINCODE_LOGGING_SHIM=INFO 

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM