HyperLedgerFabric日志系统改造(日志适配器)
时间:2022-07-25
本文章向大家介绍HyperLedgerFabric日志系统改造(日志适配器),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上篇文章从源码角度去修改代码从而实现日志持久化,本次将给基于x-appender这个项目实现fabric日志持久化改造,并且实现日志的分级输出持久化。
编译x-appender
GOOS=linux GOARCH=amd64 go build
修改镜像
基于fabric-peer原生镜像再添加x-appender二进制文件即可,并修改CMD,具体Dockerfile如下:
FROM hyperledger/fabric-peer:1.4.3
ADD x-appender /usr/bin/
CMD peer node start 2>&1|x-appender
使用镜像
镜像使用和官方稍有不同,如下几点:
- yaml文件中无需覆盖镜像的cmd
- 添加了了4个环境变量,用于控制x-appender的表现行为:
- XAPPENDER_LOG_NAME_FORMAT 日志文件名格式,如:%Y-%m-%d
- XAPPENDER_LOG_ROOT_PATH 日志持久化目录,如:/var/logs
- XAPPENDER_LOG_MAX_AGE 日志最大保存时间,单位为天,如:30
- XAPPENDER_LOG_ROTATION 日志切割时间,单位为小时,如:24
示例
peer.yaml,我已经将镜像上传至docker hub,如果你嫌麻烦,就无须制作镜像了。
services:
peer-00:
image: tianrandailoving/fabric-peer-x-appender:1.4.3
environment:
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# the following setting starts chaincode containers on the same
# bridge network as the peers
# https://docs.docker.com/compose/networking/
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
- FABRIC_LOGGING_SPEC=INFO
#- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- CORE_PEER_PROFILE_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
- XAPPENDER_LOG_NAME_FORMAT=%Y-%m-%d
- XAPPENDER_LOG_ROOT_PATH=/var/logs
- XAPPENDER_LOG_MAX_AGE=30
- XAPPENDER_LOG_ROTATION=24
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
- 使用Identity Server 4建立Authorization Server (4)
- 使用Identity Server 4建立Authorization Server (3)
- 使用Identity Server 4建立Authorization Server (2)
- 使用Identity Server 4建立Authorization Server (1)
- Java之异常处理
- 挖洞经验 | 看我如何利用SAML漏洞实现Uber内部聊天系统未授权登录
- 使用ichartjs生成图表
- 使用angular4和asp.net core 2 web api做个练习项目(四)
- list.add(),向List集合插入对象报空指针异常
- 使用angular4和asp.net core 2 web api做个练习项目(三)
- 即学即用系列一:纯函数
- Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
- React编程思想
- 前台分页,以及类别选择
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- synchronized底层是怎么实现的?
- RSA
- Syncd - 开源自动化部署工具
- pointer-events:none禁用鼠标事件
- TiCDC 首个 GA 版本发布,特性与场景全揭秘
- Linux远程ssh执行命令expect使用及几种方法
- 数据结构--线性表和链表的基础知识
- Salesforce LWC学习(二十五) Jest Test
- 自建npm包-搭建,打包,调试,发布
- 你对排序算法了解多少
- 【大数据架构】大数据数据仓库与数据中台架构
- JavaScript中的内置对象、面向对象与原型
- Java.lang.Illegalaccessexception 或 java.lang.NoSuchMethodError
- Python 爬虫进阶必备 | 关于某电商 token 参数加密逻辑分析
- Python 爬虫进阶必备 | 某直播数据分析平台加密参数 sign 分析