티스토리 뷰
[Hyperledger Fabric v1.0] 4. OPREATION GUIDE(운영가이드): Logging Control(로깅 제어)
miiingo 2018. 1. 19. 14:47해당 글은 Hyperledger Fabric 페이지의 게시글을 번역 및 정리한 자료입니다.
원본 사이트 : http://hyperledger-fabric.readthedocs.io/en/release/logging-control.html
Logging Control(로깅 제어)
Overview(개요)
peer
응용 프로그램 및 shim
인터페이스에서 체인 코드 로깅은 github.com/op/go-logging
패키지에서 제공하는 기능을 사용하여 프로그래밍됩니다. 이 패키지는 아래와 같은 사항을 지원합니다.
- 메시지의 심각도를 기반으로 로깅 제어
- 메시지를 생성하는 소프트웨어 모듈을 기반으로 한 로깅 제어
- 메시지의 심각도를 기반으로 한 다양한 프리티-프린트 옵션
모든 로그는 현재 stderr
로 보내지고, 프리티-프린트는 현재 수정되었습니다. 그러나 심각도 별 로깅의 전역 및 모듈 수준 제어는 사용자와 개발자 모두에게 제공됩니다. 현재 각 심각도 수준에서 제공되는 정보 유형에 대한 공식화 된 규칙은 없지만 버그 보고서를 제출할 때 개발자는 전체 로그를 DEBUG 수준으로 보고 싶어할 수 있습니다.
프리티 프린트된 로그에서 로깅 수준은 색상과 4 문자 코드로 표시됩니다 (예 : ERROR에 ERRO, DEBU에 DEBUG 등). 로깅 컨텍스트에서 모듈은 임의의 이름 (문자열)입니다. 개발자가 관련 메시지 그룹에 제공합니다. 아래의 예에서, "peer", "rest"및 "main"로깅 모듈은 로그를 생성합니다.
16:47:09.634 [peer] GetLocalAddress -> INFO 033 Auto detected peer address: 9.3.158.178:7051 16:47:09.635 [rest] StartOpenchainRESTServer -> INFO 035 Initializing the REST service... 16:47:09.635 [main] serve -> INFO 036 Starting peer with id=name:"vp1" , network id=dev, address=9.3.158.178:7051, discovery.rootnode=, validator=true
런타임에 임의의 수의 로깅 모듈을 만들 수 있으므로 모듈의 "마스터 목록"이없고 로깅 제어 구조가 로깅 모듈이 실제로 존재하는지 또는 존재하는지 여부를 확인할 수 없습니다. 또한 로깅 모듈 시스템은 계층 구조 또는 와일드 카드를 이해하지 못합니다. 코드에 "foo / bar"와 같은 모듈 이름이 표시 될 수 있지만 로깅 시스템에는 플랫 문자열 만 표시됩니다. "foo / bar"는 어떤 식 으로든 "foo"와 관련되거나 "foo / *"는 foo의 모든 "하위 모듈"을 나타낼 수 있다는 것을 이해하지 못합니다.
peer(피어)
피어 명령의 로깅 수준은 --logging-level 플래그를 사용하여 각 호출에 대해 명령 줄에서 제어 할 수 있습니다. 예를 들면,
peer node start --logging-level=debug
각 개별 피어 부속 명령의 기본 로깅 레벨은 core.yaml 파일에서 설정할 수도 있습니다. 예를 들어, 키 logging.node는 노드 서브 컴 맨드의 기본 레벨을 설정합니다. 이 파일의 주석은 환경 변수를 사용하여 다양한 수준에서 로깅 수준을 재정의하는 방법을 설명합니다.
로깅 심각도 수준은 다음에서 선택된 대 / 소문자를 구분하지 않는 문자열을 사용하여 지정됩니다.
CRITICAL | ERROR | WARNING | NOTICE | INFO | DEBUG
피어의 전체 로깅 수준 사양은 다음과 같습니다.
[<module>[,<module>...]=]<level>[:[<module>[,<module>...]=]<level>...]
로깅 수준 자체가 전체 기본값으로 간주됩니다. 그렇지 않으면 모듈의 개별 또는 그룹에 대한 재정의는 다음을 사용하여 지정할 수 있습니다.
<module>[,<module>...]=<level>
통사론. 사양의 예 (--logging-level, 환경 변수 및 core.yaml 설정 모두에 유효) :
info - Set default to INFO warning:main,db=debug:chaincode=info - Default WARNING; Override for main,db,chaincode chaincode=info:main=debug:db=debug:warning - Same as above
Go chaincodes(고 체인코드)
체인 코드 어플리케이션 내에서 로그하는 표준 메커니즘은 피어를 통해 각 체인 코드 인스턴스에 노출 된 로깅 전송과 통합하는 것입니다. chaincode shim
패키지는 체인 코드가 로그를 형식화하고 shim
로그와 일관되게 인터리브되는 로깅 객체를 만들고 관리 할 수있게 해주는 API를 제공합니다.
독자적으로 실행되는 프로그램으로서 사용자가 제공하는 체인 코드는 기술적으로 stdout / stderr에 출력을 생성 할 수도 있습니다. 자연적으로 "devmode"에 유용하지만 일반적으로 프로덕션 네트워크에서는 이러한 채널이 손상되어 악성 코드의 악용을 방지합니다. 그러나 CORE_VM_DOCKER_ATTACHSTDOUT = true 구성 옵션을 통해 피어 (peer)가 관리하는 컨테이너 (예 : "netmode")의 경우에도이 출력을 피어 단위로 활성화 할 수 있습니다.
활성화되면 각 체인 코드는 container-id에 의해 자체 로깅 채널을 받게됩니다. stdout 또는 stderr에 기록 된 출력은 각 행마다 피어의 로그와 통합됩니다. 프로덕션 환경에서이를 활성화하는 것은 권장되지 않습니다.
API
NewLogger(name string) *ChaincodeLogger
- 체인 코드에서 사용할 로깅 개체 만들기
(c *ChaincodeLogger) SetLevel(level LoggingLevel)
- 로거의 로깅 수준 설정
(c *ChaincodeLogger) IsEnabledFor(level LoggingLevel) bool
- 지정된 레벨로 로그가 생성되는 경우는 true를 리턴
LogLevel(levelString string) (LoggingLevel, error)
- 문자열을 LoggingLevel
로 변환
LoggingLevel
은 열거 형의 멤버입니다.
LogDebug, LogInfo, LogNotice, LogWarning, LogError, LogCritical
대 / 소문자를 구별하지 않는 버전의 문자열을 전달하여 직접 사용할 수 있습니다.
DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL
다양한 심각도 레벨에서의 형식화 된 로깅은 함수에 의해 제공됩니다.
(c *ChaincodeLogger) Debug(args ...interface{}) (c *ChaincodeLogger) Info(args ...interface{}) (c *ChaincodeLogger) Notice(args ...interface{}) (c *ChaincodeLogger) Warning(args ...interface{}) (c *ChaincodeLogger) Error(args ...interface{}) (c *ChaincodeLogger) Critical(args ...interface{}) (c *ChaincodeLogger) Debugf(format string, args ...interface{}) (c *ChaincodeLogger) Infof(format string, args ...interface{}) (c *ChaincodeLogger) Noticef(format string, args ...interface{}) (c *ChaincodeLogger) Warningf(format string, args ...interface{}) (c *ChaincodeLogger) Errorf(format string, args ...interface{}) (c *ChaincodeLogger) Criticalf(format string, args ...interface{})
f
형식의 로깅 API는 로그의 형식을 정확하게 제어합니다. non-f
형식의 API는 현재 인수의 인쇄 표현 사이에 공백을 삽입하고 임의로 사용할 형식을 선택합니다.
현재 구현에서 shim
및 ChaincodeLogger
에 의해 생성 된 로그에는 타임 스탬프가 지정되고 로거 이름 및 심각도 수준으로 표시되어 stderr
에 기록됩니다. 로깅 레벨 컨트롤은 현재 ChaincodeLogger
가 생성 될 때 제공된 이름을 기반으로합니다. 모호함을 피하기 위해 모든 ChaincodeLogger
에는 "shim"이외의 고유 한 이름을 지정해야합니다. 로거 이름은 로거에 의해 작성된 모든 로그 메시지에 나타납니다. shim
은 "심"으로 기록됩니다.
Go 언어 체인 코드는 SetLoggingLevel
API를 통해 체인 코드shim
인터페이스의 로깅 수준을 제어 할 수도 있습니다.
SetLoggingLevel(LoggingLevel level)
- 심의 로깅 수준 제어
shim의 기본 로깅 수준은 LogDebug
입니다.
다음은 체인 코드가 LogInfo
레벨에서 로깅하는 개인 로깅 오브젝트를 작성하는 방법과 환경 변수를 기반으로 shim
이 제공하는 로깅의 양을 제어하는 간단한 예제입니다.
var logger = shim.NewLogger("myChaincode")
func main() {
logger.SetLevel(shim.LogInfo)
logLevel, _ := shim.LogLevel(os.Getenv("SHIM_LOGGING_LEVEL"))
shim.SetLoggingLevel(logLevel)
...
}
'Blockchain > Hyperledger Fabric' 카테고리의 다른 글
- Total
- Today
- Yesterday
- Blockchain
- Hyperledger Fabric
- Hyperledger Fabric v1.2
- 빅데이터 교육
- 하이퍼레저 패브릭
- 기초 of 기초 데이터 개념
- 블록체인
- 코딩테스트
- 빅데이터 기초
- DOCs
- codility
- 하이퍼레저 인디
- 빅데이터 강의
- ambrosus
- 블록 체인
- 빅데이터
- 코테
- ubuntu
- 어서와 데이터는 처음이지
- javascript
- 코딜리티
- 직딩잇템
- Private Data
- Hyperledger Indy
- 하이퍼레저 페브릭
- 문제풀이
- docker
- Hyperledger Fabric v1.1
- 알고리즘
- 암브로셔스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |