Невозможно распечатать журналы в смарт-контракте, написанном в nodejs и развернутом на фабрике hyperledger - PullRequest
2 голосов
/ 07 июля 2019

Привет! У меня есть умный контракт, написанный на nodejs и развернутый на фабрике hyperledger 1.2.Смарт-контракт или цепочка кодов работают отлично, но не печатает никаких журналов.Я распечатал журналы с помощью оператора console.log ().

Уже пробовал многократные обходы, но, похоже, ни один из них не работает.1) Перенаправил вывод console.log () в файл и переопределил функцию console.log a согласно предложенному здесь решению.

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 1.2.

Ответы [ 3 ]

3 голосов
/ 07 июля 2019

Вы должны проверить журналы вашего цепного кода в контейнере цепного кода, потому что журналы смарт-контракта записаны внутри его контейнера. Вы можете найти контейнер, в котором используется цепной код, используя

docker ps -a

и здесь вы можете легко увидеть контейнер, который предназначен для вашего кода цепи, а затем вы можете следить за журналами вашего кода цепи:

docker logs --follow [chaincode-container-id]
1 голос
/ 08 июля 2019

Hyperledger Fabric использует переменные окружения для установки различных параметров для пиров и заказчиков, один из параметров для пиров - регистрация по цепочечному коду

Переменные среды для пиров могут быть установлены в двухспособы

  1. Создав файл core.yaml и подключив его к пиру / добавив эти переменные в разделе окружения файла docker-compose для нужных пиров.

  2. Передав переменные окружения, в которых установлен одноранговый узел, с помощью команды экспорта.

В вашем случае кажется, что вы пытаетесь использовать регистратор шимов на приведенном вышеВ aws-шаблоне вы можете либо добавить нижеприведенную переменную env к отдельным одноранговым контингентам / VPC, используя

export CORE_CHAINCODE_LOGGING_LEVEL=INFO    
export CORE_CHAINCODE_LOGGING_SHIM=INFO 

, либо добавить ее в раздел enviroments в ваш составной файл Docker

 - CORE_CHAINCODE_LOGGING_LEVEL=INFO
 - CORE_CHAINCODE_LOGGING_SHIM=INFO 

Надеюсь, что этопомогает.

1 голос
/ 07 июля 2019

Вы можете просмотреть журналы смарт-контракта. Сначала проверьте запущенный докер-контейнер, используя -

docker ps -a

Теперь вы можете увидеть список различных работающих / существующих контейнеров, вам нужно зарегистрировать инстанцированный цепной кодконтейнер.Используйте указанную ниже команду -

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

* Ваш контейнер с сетевым кодом должен быть запущен и запущен для проверки журналов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...