Code Monkey home page Code Monkey logo

cb-log's Introduction

cb-log

GitHub go.mod Go version GoDoc    Release Version License

cb-log is a logger library for the Cloud-Barista Multi-Cloud Framework.

[NOTE]
cb-log is currently under development.
So, we do not recommend using the current release in production.
Please note that the functionalities of cb-log are not stable and secure yet.
If you have any difficulties in using cb-log, please let us know.
(Open an issue or Join the cloud-barista Slack)

[목 차]

  1. 실행 환경
  2. 설치 방법
  3. 설정 방법
  4. 활용 예시

[실행 환경]

  • 배포환경: Ubuntu 18.04, Docker 19.03, Go 1.15
  • 개발환경: Ubuntu 20.04, Ubuntu 18.04, Debian 10.6, macOS Catalina 10.15, Android 8.1
    • latest Docker, latest Go

[설치 방법]

  • Go 설치
    $ sudo apt update
    $ sudo apt install -y make gcc
    $ sudo snap install go --classic
    
  • cb-log 설치 방법
    • 모듈 다운로드 방법(Go Module mode, default)
      • cb-log 응용 개발
        • 응용 예시: $ wget https://raw.githubusercontent.com/cloud-barista/cb-log/master/test/test.go
      • 모듈 초기화: $ go mod init test.go
      • 모듈 다운로드: $ go mod tidy
      • 다운로드 위치 예시: /home/ubuntu/go/pkg/mod/github.com/cloud-barista/[email protected]
    • 소스 다운로드 방법(Old GOPATH mode):
      • 소스 다운로드: $ go get -u -v github.com/cloud-barista/cb-log
      • 다운로드 위치 예시: /home/ubuntu/go/src/github.com/cloud-barista/cb-log

[설정 방법]

  • 설정 정보

    Configurations Descriptions Default
    loopcheck 설정값 변경시 자동 반영 여부 설정.
    설정값: true, false
    false
    loglevel 로그 레벨 설정.
    설정값: trace, debug, info, warn, error, fatal, panic
    info
    logfile 로그 파일 출력 여부 설정.
    설정값: true, false
    true
    logfileinfo: ----- 이하 logfile true 일때 유효 -----
    filename 로그를 저장할 파일 path 및 이름.
    설정값: {path}logfilename
    ./log/cblogs.log
    maxsize 개별 로그 파일 크기.
    설정값: integer #megabytes
    10
    maxbackups 로그 파일 개수.
    설정값: integer #number
    50
    maxage 로그 파일 유지 기간.
    설정값: integer #days
    31
  • 설정 파일 예시

    • $ wget -r -nH --cut-dirs=3 https://raw.githubusercontent.com/cloud-barista/cb-log/master/conf/log_conf.yaml
    • $ vi ./conf/log_conf.yaml
      #### Config for CB-Log Lib. ####
      
      cblog:
        ## true | false
        loopcheck: false # This temp method for development is busy wait. cf) cblogger.go:levelSetupLoop().
      
        ## trace | debug | info | warn/warning | error | fatal | panic
        loglevel: error # If loopcheck is true, You can set this online.
      
        ## true | false
        logfile: true
      
      ## Config for File Output ##
      logfileinfo:
        filename: ./log/cblogs.log
        maxsize: 10 # megabytes
        maxbackups: 50
        maxage: 31 # days
  • 설정 적용 방법

    • 서버 재가동: loopcheck=false 설정시
    • 자동 반영: loopcheck=true 설정시
  • 설정파일 위치 지정 방법

    • 환경변수 사용 방법:
      • 환경변수 CBLOG_ROOT 설정: (ex) export CBLOG_ROOT=$HOME/go/src/github.com/cloud-barista/cb-log
      • 설정파일 위치: $CBLOG_ROOT/conf/log_conf.yaml
    • 설정파일 지정 방법:
      • 설정파일 생성: (ex) /etc/my_conf.yaml

      • 코드 내 설정파일 위치 설정: GetLoggerWithConfigPath() 이용

        import (
          "github.com/cloud-barista/cb-log"
          "github.com/sirupsen/logrus"
        )
        
        var cblogger *logrus.Logger
        
        func init() {
          // cblog is a global variable.
          cblogger = cblog.GetLoggerWithConfigPath("MY_PROJ", "/etc/my_conf.yaml")
        }

[활용 예시]

  • 기본 사용 예시: GetLogger(), SetLevel(), GetLevel(), WithFields()
    • 대상 소스: https://github.com/cloud-barista/cb-log/blob/master/test/test.go
    • 실행 및 결과:
      $ export CBLOG_ROOT=$HOME/go/src/github.com/cloud-barista/cb-log
      $ cd $CBLOG_ROOT/test
      $ go run test.go   # setup cb-log with $CBLOG_ROOT/conf/log_conf.yaml
      
      ####LogLevel: info
      [CB-SPIDER].[INFO]: 2021-02-14 11:16:49 test.go:24, main.main() - Log Info message
      [CB-SPIDER].[WARNING]: 2021-02-14 11:16:49 test.go:25, main.main() - Log Waring message
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:26, main.main() - Log Error message
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:27, main.main() - Log Error message:internal error message
      
      ####LogLevel: warning
      [CB-SPIDER].[WARNING]: 2021-02-14 11:16:49 test.go:32, main.main() - Log Waring message
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:33, main.main() - Log Error message
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:34, main.main() - Log Error message:internal error message
      
      ####LogLevel: error
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:40, main.main() - Log Error message
      [CB-SPIDER].[ERROR]: 2021-02-14 11:16:49 test.go:41, main.main() - Log Error message:internal error message
      
      ####LogLevel: debug
      [CB-SPIDER].[DEBUG]: 2021-02-14 11:16:49 test.go:46, main.main() - WithField 테스트 	[TestField=test]
      [CB-SPIDER].[DEBUG]: 2021-02-14 11:16:49 test.go:48, main.main() - WithFields 테스트 	[Field2=value2,Field3=value3,Field1=value1]
      [CB-SPIDER].[DEBUG]: 2021-02-14 11:16:49 test.go:50, main.main() - WithError 테스트 	[error=테스트 오류]
      
      
  • 활용 예시: DBMS 응용 로그 예시
    • 설정파일 환경변수 지정 방법

      • 환경변수 설정: export CBLOG_ROOT=$HOME/go/src/github.com/cloud-barista/cb-log

      • 대상 소스: https://github.com/cloud-barista/cb-log/blob/master/test/sample.go

      • 실행 및 결과

        $ export CBLOG_ROOT=$HOME/go/src/github.com/cloud-barista/cb-log   
        $ cd $CBLOG_ROOT/test  
        $ go run sample.go   # setup cb-log with $CBLOG_ROOT/conf/log_conf.yaml
        
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:25, main.main() - start.........
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:45, main.createUser1() - start creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:59, main.createUser1() - finish creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:64, main.createUser2() - start creating user.
        [CB-SPIDER].[ERROR]: 2019-08-16 23:22:51 sample.go:69, main.createUser2() - DBMS Session is closed!!
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:78, main.createUser2() - finish creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:51 sample.go:37, main.main() - end.........
        
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:25, main.main() - start.........
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:45, main.createUser1() - start creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:59, main.createUser1() - finish creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:64, main.createUser2() - start creating user.
        [CB-SPIDER].[ERROR]: 2019-08-16 23:22:53 sample.go:69, main.createUser2() - DBMS Session is closed!!
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:78, main.createUser2() - finish creating user.
        [CB-SPIDER].[INFO]: 2019-08-16 23:22:53 sample.go:37, main.main() - end.........
        
      • Log Level 변경 및 실행 결과: debug => error

        $ cd $CBLOG_ROOT/test
        $ vi $CBLOG_ROOT/conf/log_conf.yaml  ## debug => error
        $ go run sample.go   # setup cb-log with a user defined configuration file in code
        [CB-SPIDER].[ERROR]: 2019-08-16 23:22:57 sample.go:69, main.createUser2() - DBMS Session is closed!!
        [CB-SPIDER].[ERROR]: 2019-08-16 23:22:59 sample.go:69, main.createUser2() - DBMS Session is closed!!
        
    • 설정파일 지정 방법: GetLoggerWithConfigPath()

      • 대상 소스: https://github.com/cloud-barista/cb-log/blob/master/test/sample-with-config-path.go

      • 실행 및 결과

        $ cd ./test
        $ go run sample-with-config-path.go   # setup cb-log with a user defined configuration file in code
        
        [CB-SPIDER ..\conf\log_conf.yaml]
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:27, main.main() - start.........
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:48, main.createUser3() - start creating user.
        [CB-SPIDER].[DEBUG]: 2020-12-23 17:46:09 sample-with-config-path.go:58, main.createUser3() - msg for debugging msg!!
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:63, main.createUser3() - finish creating user.
        [CB-SPIDER].[DEBUG]: 2020-12-23 17:46:09 sample-with-config-path.go:30, main.main() - msg for debugging msg!!
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:68, main.createUser4() - start creating user.
        [CB-SPIDER].[ERROR]: 2020-12-23 17:46:09 sample-with-config-path.go:73, main.createUser4() - DBMS Session is closed!!
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:82, main.createUser4() - finish creating user.
        [CB-SPIDER].[INFO]: 2020-12-23 17:46:09 sample-with-config-path.go:40, main.main() - end.........
        
      • Log Level 변경 및 실행 결과: debug => error

        $ cd ./test
        $ vi ../conf/log_conf.yaml  ## debug => error
        $ go run sample-with-config-path.go   # setup cb-log with a user defined configuration file in code
        [CB-SPIDER].[ERROR]: 2020-12-23 18:08:12 sample-with-config-path.go:73, main.createUser4() - DBMS Session is closed!!
        [CB-SPIDER].[ERROR]: 2020-12-23 18:08:14 sample-with-config-path.go:73, main.createUser4() - DBMS Session is closed!!
        

cb-log's People

Contributors

ccambo avatar chloe-codes1 avatar engineer-pjin avatar hermitkim1 avatar jihoon-seo avatar powerkimhub avatar seokho-son avatar yoonjioh avatar yunkon-kim avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

cb-log's Issues

cb-log 소스 코드 기반 실행 이슈

cb-log 를 소스 코드 기반에서 실행하기 위해 git clone 을 하고, test 파일을 돌려보던 중 아래와 같은 에러메세지가 나왔습니다.

go run sample.go 2020/10/13 22:42:13 error: open /src/github.com/cloud-barista/cb-log/conf/log_conf.yaml: no such file or directory exit status 1

sample.go 파일안의
import ( “fmt” “time” “github.com/sirupsen/logrus” “github.com/cloud-barista/cb-log” )

이 부분이 문제가 되는 것 같은데요,
소스 코드단에서 실행할 때도 go get github.com/cloud-barista/cb-log 를 실행해야 하는 것인가요?

소스 코드 단에서 cb-spider 를 띄워놓고 cb-log 를 띄워놓고 연결할 수 있는 구조인 지도 궁금합니다.
또한 이런 질문들을 issues 에 해도 되는 것일까요? 만일 적합하지 않다면 삭제하도록 하겠습니다.

[v0.6.1] Overwrite logger Name and ...

@yunkon-kim

[before v0.61]

  • GetLogger(loggerName)을 통해서 최초 호출시 Logger 생성 및 이후 호출시 동일한 Logger를 제공
  • GetLogger() 최초 호출시 입력한 logger name으로 설정되며 이후 수정 불가능
  • 참고: Logger Name과 Log 출력 예시: logger name이 CLOUD-BARISTA인 경우
    [CLOUD-BARISTA].[INFO]: 2022-08-24 00:31:53 nutsdb-driver.go:36, ......... 줄임
    
  • 참고: 현재, 단일 logger를 제공하므로, cb-log를 포함한 실행 프로세스 당 1개의 logger만 운영 가능

[since v0.6.1]

  • GetLogger(loggerName) 호출시 기존 Logger가 존재하면,
  • 마지막 입력한 loggerName으로 기존 Logger의 이름을 변경할 수 있도록 개선

[v0.6.1 이슈 현황]

  • Logger Header가 의도치 않게 계속 바뀜
  • Hiscall이나 기존 사용 중인 프레임워크 중 Logger Header를 활용 중이라면, (활용 중인지는 미확인)
  • 인지하지 못하는 문제를 발생시킬 수 있음
  • Spider 예시
    • 기존 버전(cb-log v0.5.0) 활용시

      [CLOUD-BARISTA].[INFO]: 2022-08-24 00:31:53 nutsdb-driver.go:36, github.com/cloud-barista/cb-store/store-drivers/nutsdb-driver.initialize() - ######## dbfile: /tmp/log-test/cb-spider/meta_db/dat
      
      ... 중략 ...
      
      [CLOUD-BARISTA].[INFO]: 2022-08-24 00:32:40 nutsdb-driver.go:160, github.com/cloud-barista/cb-store/store-drivers/nutsdb-driver.(*NUTSDBDriver).GetList() - Key:/resource-info-spaces/iids/aws-ohio-config/vm/vm-01
      [CLOUD-BARISTA].[ERROR]: 2022-08-24 00:32:40 IIDManager.go:201, github.com/cloud-barista/cb-spider/cloud-control-manager/iid-manager.(*IIDRWLOCK).GetIID() - [aws-ohio-config:vm:vm-01] does not exist!
      [CLOUD-BARISTA].[ERROR]: 2022-08-24 00:32:40 CCMCommon.go:5790, github.com/cloud-barista/cb-spider/api-runtime/common-runtime.GetCSPResourceName() - [aws-ohio-config:vm:vm-01] does not exist!
      
    • 새버전(cb-log v0.6.1) 활용시

    • CLOUD-BARISTA => CB-SPIDER => CB-GRPC

      [CLOUD-BARISTA].[INFO]: 2022-08-24 00:33:14 nutsdb-driver.go:36, github.com/cloud-barista/cb-store/store-drivers/nutsdb-driver.initialize() - ######## dbfile: /tmp/mini/cb-spider/meta_db/dat
      
      ... 중략 ...
      
      [CB-SPIDER].[INFO]: 2022-08-24 00:33:17 nutsdb-driver.go:36, github.com/cloud-barista/cb-store/store-drivers/nutsdb-driver.initialize() - ######## dbfile: /tmp/mini/cb-spider/meta_db/dat
      [CB-SPIDER].[INFO]: 2022-08-24 00:33:20 CBSpiderRuntime.go:431, github.com/cloud-barista/cb-spider/api-runtime/rest-runtime.ApiServer() - **** Rest Auth Disabled ****
      
      ... 중략 ...
      
      [CB-GRPC].[ERROR]: 2022-08-24 00:33:29 CCMCommon.go:5832, github.com/cloud-barista/cb-spider/api-runtime/common-runtime.GetCSPResourceName() - [aws-ohio:vm:vm-01] does not exist!
      

[관련 제안]

  • Multiple Logger를 제공하면, 좋겠지만...
  • Logger Name 변경을 다음 링크와 같은 활용 목적이라면,
  • WithFields() 활용으로 해결이 가능할지 확인 부탁 드립니다.
    • 활용 예시
      cb-log# grep WithField test/test.go
      

[Suggestion] Add logging level (trace, fatal, panic)

[제안]

  • 기존 "Logging level"에 "trace", "fatal", "panic" level 추가

[효과]

  • 로깅 레벨을 세분화하여 보다 편리한 프로그램 실행 또는 디버깅이 가능함
  • 예)
    • 프로그램 실행 시 Info level을 적용
    • 수행 과정의 문제 발생 시 Debug level 적용하여 디버깅함
    • 변수 값, 변수/함수 참조, 요청에 대한 응답 값 등의 확인이 필요한 경우 Trace level 적용하여 디버깅함

그 밖의 예제는 여기를 참고 바랍니다.

[TO-BE]

기존 "debug", "info", "warn", "error"의 변경 없이 "trace", "fatal", "panic"을 추가하는 것이기 때문에 기존 cb-log 사용자에게 영향을 주지 않을 것 입니다.

func checkLevel(lvl string) error {
	switch strings.ToLower(lvl) {
	case "trace":
		return nil
	case "debug":
		return nil
	case "info":
		return nil
	case "warn", "warning":
		return nil
	case "error":
		return nil
	case "fatal":
		return nil
	case "panic":
		return nil
	}
	return fmt.Errorf("not a valid cblog Level: %q", lvl)
}

[AS-IS]

func checkLevel(lvl string) error {
	switch strings.ToLower(lvl) {
	case "error":
		return nil
	case "warn", "warning":
		return nil
	case "info":
		return nil
	case "debug":
		return nil
	}
	return fmt.Errorf("not a valid cblog Level: %q", lvl)
}

Feature branch to improve logger

🌱 안내 말씀 드립니다.

당분간 Feature 브랜치(feature-to-improve-logger)에서 개발 및 테스트를 진행할 예정 입니다.
각 Framework에 영향을 주지 않기 위함 입니다 ^^

분산 배치되는 여러 서비스의 로그를 수집하는 과정에서 Logger Name 개선이 필요하였고,
여러 가지 정황상 Feature 브랜치를 활용해 보는 것으로 결정 되었습니다.

참고 - feature 브랜치를 Framework에 반영하는 방법

go get -u github.com/cloud-barista/cb-log@HASH_YOU_WANT

(e.g., go get github.com/cloud-barista/cb-log@3d15206)

Add processes and guide for projects using go mod

In a project using go mod, cb-log library pkg is automatically generated on $GOPATH/pkg/mod/cloud-barista/[email protected].

For this, An appropriate method is needed. (not setting up $GOPATH/src/github.com/cloud-barista/cb-log as an environment variable.)

My suggestion:

  • A developer creates log_conf.yaml on his/her projects.
  • cb-log can read that on setup. (Additional processes will be added.)

Finally, a guide about this will be added.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.