在hyperledger结构智能合约中,如何打开日志记录?

ubbxdtey  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(364)

我已经用java和nodejs编写了一个hyperledger结构智能合约。如何打开不同级别的日志记录?
fabric智能合约类本身在信息级别进行日志记录,当合约部署并运行时,我如何更改它?
编辑:包括node.js(用于javascript和typescript)以及java。

4xy9mtcn

4xy9mtcn1#

解决方法是实现一个简单的“helper”事务。例如,您可以创建另一个类,如下所示。
在java中:

  1. @Contract(name = "ContractSupport")
  2. public class ContractSupport implements ContractInterface {
  3. /**
  4. * Required Default Constructor.
  5. */
  6. public ContractSupport() {
  7. }
  8. /**
  9. * Sets the log level.
  10. *
  11. * The setLogLevel method has the required parsing to manage the levels.
  12. *
  13. * @param ctx Transactional Context
  14. * @param level string id
  15. */
  16. @Transaction(intent = TYPE.EVALUATE)
  17. public void setLogLevel(final Context ctx, final String level) {
  18. Logging.setLogLevel(level);
  19. }
  20. }

请注意,这具有 @Contract() 注解,以便可以从客户端SDK调用它作为任何其他事务函数。记住要确保注解中的名称与其他合同不同,并且不要使用 @Default() 注解-应该由您自己的代码使用。
接受的字符串 Logging.setLogLevel 方法以及它们如何Map到 java.util.logging 级别是
严重,错误Map到level.severe
警告Map到level.warning
信息Map到level.info
注意Map到level.config
调试Map到level.finest
其他任何内容都Map到信息。
所有的伐木工人 org.hyperledger 将更新。
在node.js中(这个例子是在typescript中)

  1. @Info({ title: 'ContractSupport', description: 'Utilties to support the contract' })
  2. export class ContractSupport extends Contract {
  3. @Transaction(false)
  4. public async setLogLevel(ctx: Context, loglevel: string): Promise<void> {
  5. const logger = ctx.logger.setLevel(loglevel);
  6. }
  7. }

这是使用 @Info 用于指定合同标题和 Contract 已使用。记住要将这个contract类添加到index.js/index.ts中的导出列表中,否则它将不会被提取。
这里的MapMap到温斯顿使用的级别
临界Map到致命
错误Map到错误
要警告的警告Map
调试Map到调试
信息Map到信息
如果提供了其他内容,则默认为info。
我是提交还是评估?在这个示例中,我将其标记为evaluate。请记住,此注解是一个建议,它最终决定了客户机应用程序提交事务的方式,从而决定是否发送该事务进行排序。
因为这不会影响分类帐,但是实际运行的链码可以使用evaluate或submit。重要的是要考虑哪些链码示例将运行代码。
evaluate将发送给一个对等方,因此一个链码将启用日志记录。submit将发送给其他组织中可能的其他对等方。是否要在所有这些日志中启用其他日志记录?
最好使用evaluate,然后在得到所需的诊断信息后将级别返回到info。
为什么我要自己编写代码?有效的问题,有两个原因。
您可能希望将自己的日志记录级别更改Map到此处,以获得自己的智能合约代码。
对于其他事务函数,您可能希望对提交日志记录更改的人进行一些验证。您甚至可能需要更新分类帐中的特定键来记录更改。
日志去哪了?
它们转到链码进程的标准输出,通常由环境捕获,例如kubernetes。

展开查看全部
qrjkbowd

qrjkbowd2#

开发链码时,建议使用dev模式。你可以从下面的链接查看。
超级分类账/结构/对等devmode
此时,您可以通过更改 CORE_CHAINCODE_LOGLEVEL 启动链码时的选项。

  1. cd examples/chaincode/go/chaincode_example02
  2. go build
  3. CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_ADDRESS=127.0.0.1:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02

相关问题