我已经用java和nodejs编写了一个hyperledger结构智能合约。如何打开不同级别的日志记录?fabric智能合约类本身在信息级别进行日志记录,当合约部署并运行时,我如何更改它?编辑:包括node.js(用于javascript和typescript)以及java。
4xy9mtcn1#
解决方法是实现一个简单的“helper”事务。例如,您可以创建另一个类,如下所示。在java中:
@Contract(name = "ContractSupport")public class ContractSupport implements ContractInterface { /** * Required Default Constructor. */ public ContractSupport() { } /** * Sets the log level. * * The setLogLevel method has the required parsing to manage the levels. * * @param ctx Transactional Context * @param level string id */ @Transaction(intent = TYPE.EVALUATE) public void setLogLevel(final Context ctx, final String level) { Logging.setLogLevel(level); }}
@Contract(name = "ContractSupport")
public class ContractSupport implements ContractInterface {
/**
* Required Default Constructor.
*/
public ContractSupport() {
}
* Sets the log level.
*
* The setLogLevel method has the required parsing to manage the levels.
* @param ctx Transactional Context
* @param level string id
@Transaction(intent = TYPE.EVALUATE)
public void setLogLevel(final Context ctx, final String level) {
Logging.setLogLevel(level);
请注意,这具有 @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中)
@Contract()
@Default()
Logging.setLogLevel
java.util.logging
org.hyperledger
@Info({ title: 'ContractSupport', description: 'Utilties to support the contract' })export class ContractSupport extends Contract { @Transaction(false) public async setLogLevel(ctx: Context, loglevel: string): Promise<void> { const logger = ctx.logger.setLevel(loglevel); }}
@Info({ title: 'ContractSupport', description: 'Utilties to support the contract' })
export class ContractSupport extends Contract {
@Transaction(false)
public async setLogLevel(ctx: Context, loglevel: string): Promise<void> {
const logger = ctx.logger.setLevel(loglevel);
这是使用 @Info 用于指定合同标题和 Contract 已使用。记住要将这个contract类添加到index.js/index.ts中的导出列表中,否则它将不会被提取。这里的MapMap到温斯顿使用的级别临界Map到致命错误Map到错误要警告的警告Map调试Map到调试信息Map到信息如果提供了其他内容,则默认为info。我是提交还是评估?在这个示例中,我将其标记为evaluate。请记住,此注解是一个建议,它最终决定了客户机应用程序提交事务的方式,从而决定是否发送该事务进行排序。因为这不会影响分类帐,但是实际运行的链码可以使用evaluate或submit。重要的是要考虑哪些链码示例将运行代码。evaluate将发送给一个对等方,因此一个链码将启用日志记录。submit将发送给其他组织中可能的其他对等方。是否要在所有这些日志中启用其他日志记录?最好使用evaluate,然后在得到所需的诊断信息后将级别返回到info。为什么我要自己编写代码?有效的问题,有两个原因。您可能希望将自己的日志记录级别更改Map到此处,以获得自己的智能合约代码。对于其他事务函数,您可能希望对提交日志记录更改的人进行一些验证。您甚至可能需要更新分类帐中的特定键来记录更改。日志去哪了?它们转到链码进程的标准输出,通常由环境捕获,例如kubernetes。
@Info
Contract
qrjkbowd2#
开发链码时,建议使用dev模式。你可以从下面的链接查看。超级分类账/结构/对等devmode此时,您可以通过更改 CORE_CHAINCODE_LOGLEVEL 启动链码时的选项。
CORE_CHAINCODE_LOGLEVEL
cd examples/chaincode/go/chaincode_example02go buildCORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_ADDRESS=127.0.0.1:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02
cd examples/chaincode/go/chaincode_example02
go build
CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_ADDRESS=127.0.0.1:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02
2条答案
按热度按时间4xy9mtcn1#
解决方法是实现一个简单的“helper”事务。例如,您可以创建另一个类,如下所示。
在java中:
请注意,这具有
@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中)
这是使用
@Info
用于指定合同标题和Contract
已使用。记住要将这个contract类添加到index.js/index.ts中的导出列表中,否则它将不会被提取。这里的MapMap到温斯顿使用的级别
临界Map到致命
错误Map到错误
要警告的警告Map
调试Map到调试
信息Map到信息
如果提供了其他内容,则默认为info。
我是提交还是评估?在这个示例中,我将其标记为evaluate。请记住,此注解是一个建议,它最终决定了客户机应用程序提交事务的方式,从而决定是否发送该事务进行排序。
因为这不会影响分类帐,但是实际运行的链码可以使用evaluate或submit。重要的是要考虑哪些链码示例将运行代码。
evaluate将发送给一个对等方,因此一个链码将启用日志记录。submit将发送给其他组织中可能的其他对等方。是否要在所有这些日志中启用其他日志记录?
最好使用evaluate,然后在得到所需的诊断信息后将级别返回到info。
为什么我要自己编写代码?有效的问题,有两个原因。
您可能希望将自己的日志记录级别更改Map到此处,以获得自己的智能合约代码。
对于其他事务函数,您可能希望对提交日志记录更改的人进行一些验证。您甚至可能需要更新分类帐中的特定键来记录更改。
日志去哪了?
它们转到链码进程的标准输出,通常由环境捕获,例如kubernetes。
qrjkbowd2#
开发链码时,建议使用dev模式。你可以从下面的链接查看。
超级分类账/结构/对等devmode
此时,您可以通过更改
CORE_CHAINCODE_LOGLEVEL
启动链码时的选项。