![](/img/trans.png)
[英]In Hyperledger Fabric NodeJS smart contract, should all parameters be passed as a string?
[英]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使用环境变量为对等方和订购者设置各种参数,为对等方设置的参数之一是链码记录
对等方的环境变量可以通过两种方式设置
通过创建core.yaml文件并将其安装到对等方/通过在docker-compose文件的environment部分中为所需对等方添加这些变量。
通过使用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.