Golang 에서 log 사용 하기(1):Golang 표준 라 이브 러 리 에서 제공 하 는 Log
package main
import (
"log"
)
func main(){
log.Fatal("Come with fatal,exit with 1
")
}
컴 파일 이 실행 되면 프로그램 이 인쇄 된 것
Come with fatal,exit with 1
을 보고 종료 합 니 다.echo $?
으로 종료 코드 를 보면'1'입 니 다.일반 인터페이스
Golang's log 모듈 은 주로 3 가지 인 터 페 이 스 를 제공 합 니 다.각각'프린트,패 닉,파 탈'이다.물론 사용 하기 전에 로그 백 을 먼저 포함 합 니 다.
import(
"log"
)
사용 하기 편 하도록 Golang 은 Python 과 마찬가지 로 인 터 페 이 스 를 제공 할 때 간단 한 패키지 등급 의 사용 인 터 페 이 스 를 제공 합 니 다.Python 과 달리 출력 기본 위치 가 표준 오류
SetOutput
로 변경 할 수 있 습 니 다.각 종류의 인터페이스 에 대해 3 중 호출 방식 을 제 공 했 는데 그것 이 바로'Xxxx,Xxxxln,Xxxxf'이다.예 를 들 어 Print 에 대해 다음 과 같다.
log.Print
log.Printf
log.Println
fmt.Print
과 유사 하 다 는 것 을 나타 낸다.즉,출력 대상 이 특별한 표지 기 호 를 지정 하지 않 아 도 된다 는 것 이다.fmt.Printf
가 유사 하 다 는 것 을 나타 낸다.즉,C 시리즈 의 포맷 표지 로 출력 대상 의 유형 을 표시 할 수 있 고 구체 적 인 유형 은 fmt.Printf 의 문서fmt.Println
와 유사 하 다 는 뜻 입 니 다.log.Print 와 대체적으로 일치 합 니 다.출력 할 때 한 줄 더 출력 합 니 다package main
import (
"log"
)
func main(){
arr := []int {2,3}
log.Print("Print array ",arr,"
")
log.Println("Println array",arr)
log.Printf("Printf array with item [%d,%d]
",arr[0],arr[1])
}
다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
2014/05/02 12:27:19 Print array [2 3]
2014/05/02 12:27:19 Println array [2 3]
2014/05/02 12:27:19 Printf array with item [2,3]
출력 에 있 는 날짜 와 시간 은 기본 형식 입 니 다.간단 한 인 터 페 이 스 를 직접 호출 하면 형식 이 고정 되 어 있 습 니 다.
SetFlags
방법 으로 수정 할 수 있 습 니 다.또한 여기 서 출력 한 내용(log.Print 의 내용 전달)앞 과 시간의 뒤 가 비어 있 습 니 다.이것 도 기본 적 인 행동 입 니 다.우 리 는 접 두 사 를 추가 해서"Warnning"이나"Debug"로 그 를 표시 할 수 있 습 니 다.사용SetPrefix
을 통 해 이 접 두 사 를 설정 할 수 있 습 니 다.SetOutput
SetFlags
SetPrefix
이곳 은 관계 가 크 지 않 으 므 로 먼저 설명 하지 않 고 뒤에 남 겨 서 Logger 유형 중 하 나 를 함께 설명 한다.log.PrintXxx
인 터 페 이 스 를 보고log.FatalXxx
인 터 페 이 스 를 살 펴 보 자.우 리 는log.Fatal
을 예 로 들 어 그 기능 을 소개 한다.처음에 보 았 던 예 를 들 어 호출log.Fatal
인 터 페 이 스 를 호출 한 후에 로그 내용 을 표준 출력 에 인쇄 한 다음 에 시스템os.exit(1)
인 터 페 이 스 를 호출 하고 프로그램 을 종료 하여'1'상태 로 돌아 갑 니 다.비교적 복잡 한 것 은
log.PanicXxx
이 함수 의 설명 을 보면 로그 내용 을 표준 오류 로 옮 긴 후에 호출panic
함수(Golan 의 defer-recover-panic 체 제 를 잘 모 르 면 Golang Blog 에서 배 울 수 있 습 니 다)입 니 다.여기 서 자주 사용 하 는 예 를 들 자.package main
import (
"log"
"fmt"
)
func main(){
defer func(){
if e:= recover();e!= nil {
fmt.Println("Just comming recover")
fmt.Println("e from recover is :",e)
fmt.Println("After recover")
}
}()
arr := []int {2,3}
log.Panic("Print array ",arr,"
")
}
결 과 는:
2014/05/03 13:52:42 Print array [2 3]
Just comming recover
e from recover is : Print array [2 3]
After recover
결 과 를 통 해 알 수 있 듯 이 로 그 를 표준 출력 에 넣 고 defer 안의 recover 를 통 해 panic 의 내용 을 캡 처 하 는 것 입 니 다.
사용자 정의 Logger 형식
'Print,Panic,Fatal'을 정리 한 후에 우 리 는 유형 을 소개 하기 쉽다
log.Logger
.이 형식 은 대상 을 만 드 는 새로운 방법 을 제공 합 니 다.func New(out io.Writer, prefix string, flag int) *Logger
초기 화 조건 은 로그 에 기 록 된 위치 out,로그 의 접두사 내용 prefix,로그 의 내용 flag 입 니 다.위 에서 소개 한
SetOutput
SetFlags
SetPrefix
을 통 해 순서대로 설치 할 수 있다.Ldate = 1 << iota // the date: 2009/01/23 2009/01/23
Ltime // the time: 01:23:23 01:23:23
Lmicroseconds // microsecond resolution: 01:23:23.123123. 01:23:23.123123
Llongfile // full file name and line number: /a/b/c/d.go:23
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
LstdFlags = Ldate | Ltime //
로그 내용 의 시작 을 표시 합 니 다.로그 고 개 를 들 어 관련 내용 을 출력 합 니 다.위의 기본 형식 은 LstdFlags 에서 날짜 와 시간 을 출력 하 는 것 입 니 다.
이 방법 은 위 와 같은 동명 의 방법 도 정의 했다.
func (l *Logger) Print(v ...interface{})
func (l *Logger) Printf(format string, v ...interface{})
func (l *Logger) Println(v ...interface{})
func (l *Logger) Fatal(v ...interface{})
func (l *Logger) Fatalf(format string, v ...interface{})
func (l *Logger) Fatalln(v ...interface{})
func (l *Logger) Panic(v ...interface{})
func (l *Logger) Panicf(format string, v ...interface{})
func (l *Logger) Panicln(v ...interface{})
func (l *Logger) Flags() int
func (l *Logger) Prefix() string
func (l *Logger) SetFlags(flag int)
func (l *Logger) SetPrefix(prefix string)
이 중'Print,Panic,Fatal'계열 함 수 는 기 존 에 소 개 된 것 과 마찬가지 로 Flags 와 Prefix 는 각각 log.Logger 의 현재 로그 고 개 를 들 고 접 두 사 를 얻 을 수 있 습 니 다.SetFlags,SetPrefix 는 로그 의 머리 와 접 두 사 를 설정 할 수 있 습 니 다.
인 스 턴 스 사용
마지막 으로 로그 모듈 이 debug 로 그 를 파일 에 인쇄 하 는 실례 를 보 았 습 니 다.
package main
import (
"log"
"os"
)
func main(){
fileName := "xxx_debug.log"
logFile,err := os.Create(fileName)
defer logFile.Close()
if err != nil {
log.Fatalln("open file error !")
}
debugLog := log.New(logFile,"[Debug]",log.Llongfile)
debugLog.Println("A debug message here")
debugLog.SetPrefix("[Info]")
debugLog.Println("A Info Message here ")
debugLog.SetFlags(debugLog.Flags() | log.LstdFlags)
debugLog.Println("A different prefix")
}
실행 후 로그 파일 을 열 면 로그 내용 을 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.