golang 가방의 일상(2)-log 가방

일반 사용

log 패키지는 Logger 유형을 정의했고 이 유형은 포맷된 출력 방법을 제공했다.log 패키지에는 표준 logger 대상 std이 미리 정의되어 있어 우리는 함수를 직접 호출하여 로그를 출력할 수 있다. 기본값은 표준 오류 출력(Stderr)으로 터미널 인터페이스에 출력된다.물론 logger 대상을 사용자 정의로 만들 수도 있다. std이 호출한 모든 함수를 내부에서 같은 이름의 logger 유형을 제어하는 방법이다.함수는 다음과 같습니다.
  • Print()Printf()Println()
  • Fatal(), Fatalf(), Fatalln(): fatal을 트리거하고 로그 정보를 기록한 후 os.Exit(1)을 호출하고 프로그램을 종료하며 defer
  • 을 호출하지 않습니다.
  • Panic, Panicf, Panicln: panic
  • 트리거
    예:
    log.Print("Print
    "
    ) v := "Printf" log.Printf("%s
    "
    , v) log.Println("Println") log.Fatalln(" fatal") log.Panicln(" panic")

    출력:
    2020/08/09 13:41:18 Print
    2020/08/09 13:41:18 Printf
    2020/08/09 13:41:18 Println
    2020/08/09 13:41:18  fatal
    
    log 패키지에 미리 정의된 logger 객체는 기본적으로 각 로그 정보의 날짜, 시간을 인쇄합니다.예에서 Fatalln() 함수를 호출한 후 로그 정보를 출력한 다음 프로그램이 종료됩니다.

    logger 설정


    기본 날짜와 시간에 만족하지 못하면 logger을 설정해서 더 많은 정보를 얻을 필요가 있습니다.log 패키지에서 SetFlags() 함수로 std의 출력 설정을 설정하고 Flags() 함수로 std의 출력 설정을 되돌려줍니다.사용자 정의 logger 대상이라면 동명 방법도 사용할 수 있으며 호출 함수는 본질적으로 내부에서 std으로 동명 방법을 호출한다.
    func Flags() int
    func SetFlags(flag int)
    
    log 패키지는 매개변수 flag에 대해 일련의 상수를 정의합니다.
    const (
    	Ldate         = 1 << iota     // the date in the local time zone: 2009/01/23
    	Ltime                         // the time in the local time zone: 01:23:23
    	Lmicroseconds                 // microsecond resolution: 01:23:23.123123.  assumes Ltime.
    	Llongfile                     //   and line number: /a/b/c/d.go:23
    	Lshortfile                    //   and line number: d.go:23.  Llongfile
    	LUTC                          // if Ldate or Ltime is set, use UTC rather than the local time zone
    	Lmsgprefix                    // move the "prefix" from the beginning of the line to before the message
    	LstdFlags     = Ldate | Ltime // initial values for the standard logger
    )
    
    LstdFlags은 표준 logger 대상 std 구성의 초기값이며, 다음은 std의 선언문입니다.
    var std = New(os.Stderr, "", LstdFlags)
    

    예:
    log.SetFlags(log.Lshortfile | log.Lmicroseconds | log.Ldate)
    log.Println(" ")
    

    출력:
    2020/08/09 14:24:52.532449 main.go:17:  
    

    출력 구성을 보려면 다음과 같이 하십시오.
    fmt.Println(log.Flags()) // 13
    

    출력 13은 Llongfile의 값이 8Lmicroseconds의 값이 41Ldate의 값이 1이거나 연산한 후에 13을 얻었기 때문이다.

    로그 접두어 구성


    출력된 로그에 지정한 접두사를 추가하면 이후의 정보 검색에 도움이 됩니다.log 패키지에서 SetPrefix() 함수로 std의 출력 접두사를 설정할 수 있고, Prefix() 함수로 std의 출력 접두사를 볼 수 있다.사용자 정의 logger 대상이라면 동명 방법도 사용할 수 있으며 호출 함수는 본질적으로 내부에서 std으로 동명 방법을 호출한다.
    예:
    log.SetPrefix("[ ]")
    log.Println(" 。")
    fmt.Println(log.Prefix())
    

    출력:
    [ ]2020/08/09 14:44:05.437154 main.go:20:[ ]
    

    로그 출력 위치 구성

    logger 패키지에서 log 함수로 SetOutput()의 출력 목적지를 설정할 수 있으며 기본값은 표준 오류 출력(std)이다.사용자 정의 Stderr 대상이라면 동명 방법도 사용할 수 있으며 호출 함수는 본질적으로 내부에서 logger으로 동명 방법을 호출한다.
    예:
    logFile, err := os.OpenFile("t1.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
    	fmt.Println("open log file failed, err:", err)
    	return
    }
    log.SetOutput(logFile)
    log.SetFlags(log.Lshortfile | log.Lmicroseconds | log.Ldate)
    log.SetPrefix("[ ]")
    log.Println(" 。")
    

    로그를 같은 디렉터리에 있는 std 파일로 출력합니다.파일의 출력:
    [ ]2020/08/09 15:12:25.340135 main.go:31:
    t1.log을 사용하면 설정 동작을 std 함수에 쓸 수 있습니다.

    logger 객체 사용자 정의

    init() 패키지는 log 대상의 구조 함수 logger을 제공하는데 형식은 다음과 같다.
    func New(out io.Writer, prefix string, flag int) *Logger
    

    매개 변수는 목적지, 접두사, 로그 정보를 출력하는 순서입니다.
    예:
    logger := log.New(os.Stderr, "", log.Lshortfile|log.Ldate|log.Ltime)
    logger.Println(" logger 。")
    

    출력:
    <New>2020/08/09 15:25:17 main.go:33:  logger 。
    

    제3자 로그 라이브러리 logrus 제3자 로그 라이브러리zap 참조

    좋은 웹페이지 즐겨찾기