이 소프트웨어 개발 디버깅 단계 또는 소프트웨어 로그 다음 줄의 위상이 항상 매우 중요한 부분이었다이든, 우리는 프로그램에 로깅의 좋은 습관을 배양해야한다.
로그
내장 된 언어를 이동 log
패키지는 간단한 로그 서비스를 구현합니다. 이 문서에서는 표준 라이브러리 설명 log
기본 사용.
사용 로거
로그 패키지 포맷 출력하는 방법을 제공 로거 타입을 정의한다. 이 패키지는 또한 함수를 호출하여, 사전에 정의 된 "표준"로거를 제공합니다 Print系列
(| | PRINTF에 println 인쇄) Fatal系列
(치명적인 | Fatalf | Fatalln을) 및 Panic系列
(공황 | Panicf | Panicln)는 자신보다 로거를 생성, 사용 사용하기 쉬운 객체.
예를 들어, 우리는 다음과 같은 코드를 직접와 동일 할 수있다 log
그들이 터미널 인터페이스에 인쇄 로그 정보를 기본값으로, 패키지 위에서 언급 한 방법을 호출 :
package main
import (
"log"
)
func main() {
log.Println("这是一条很普通的日志。")
v := "很普通的"
log.Printf("这是一条%s日志。\n", v)
log.Fatalln("这是一条会触发fatal的日志。")
log.Panicln("这是一条会触发panic的日志。")
}
컴파일 다음 상기 코드 출력이 수행 될 것이다 :
2017/06/19 14:04:17 这是一条很普通的日志。
2017/06/19 14:04:17 这是一条很普通的日志。
2017/06/19 14:04:17 这是一条会触发fatal的日志。
로거는 각각의 로그 정보, 표준 오류로 시스템 기본 출력의 날짜와 시간을 인쇄합니다. 기능의 치명적인 일련의 로그 정보 (1)를 작성 후 os.Exit를 호출합니다. 공황 시리즈 기능은 로그 정보를 기입 한 후 당황 할 것이다.
구성 로거
표준 로거 구성
기본적으로 로거는 로그에 시간 정보를 제공하지만, 많은 경우에 우리는 등 로그의 로그 파일 이름과 줄 번호로, 더 많은 정보를 얻을합니다. log
표준 라이브러리는 우리를 위해 이러한 사용자 정의 메소드 세트를 제공합니다.
log
표준 라이브러리 Flags
함수는 로거 표준 출력 구성을 반환하고 SetFlags
함수는 표준 출력 구성 로거를 설정할 수 있습니다.
func Flags() int
func SetFlags(flag int)
플래그 옵션
log
표준 라이브러리는 정의 된 상수의 일련의 다음과 같은 옵션 플래그를 제공합니다.
const (
// 控制输出日志信息的细节,不能控制输出的顺序和格式。
// 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 时间:01:23:23
Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位)
Llongfile // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile // 文件名+行号:d.go:23(会覆盖掉Llongfile)
LUTC // 使用UTC时间
LstdFlags = Ldate | Ltime // 标准logger的初始值
)
다음과 같이 출력 옵션입니다 먼저 표준 로거에 대해 폭넓게 로그인하기 전에 우리를 보자 :
func main() {
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("这是一条很普通的日志。")
}
다음과 같이 실행 컴파일 출력은 :
2017/06/19 14:05:17.494943 .../log_demo/main.go:11: 这是一条很普通的日志。
로그 접두사를 구성
log
표준 라이브러리는 접두사에 대한 정보를 기록하는 두 가지 방법을 제공합니다 :
func Prefix() string
func SetPrefix(prefix string)
상기 Prefix
기능은 표준 출력 로거 프리픽스 보는 데 사용되는 SetPrefix
함수를 출력 프리픽스를 설정하기 위해 사용된다.
func main() {
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("这是一条很普通的日志。")
log.SetPrefix("[小王子]")
log.Println("这是一条很普通的日志。")
}
다음 위의 코드를 출력한다 :
[小王子]2017/06/19 14:05:57.940542 .../log_demo/main.go:13: 这是一条很普通的日志。
그래야 우리가 쉽게 검색 및 처리에 대한 로그 정보를 한 후, 코드에서 우리의 지정된 접두사 로그 정보를 추가 할 수 있습니다.
구성 로그 출력 위치
func SetOutput(w io.Writer)
SetOutput
표준 로거 기능은 기본 표준 오류 출력, 출력 대상을 설정합니다.
예를 들어, 다음 코드는 같은 디렉토리에 로그인 할 출력됩니다 xx.log
파일.
func main() {
logFile, err := os.OpenFile("./xx.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.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println("这是一条很普通的日志。")
log.SetPrefix("[小王子]")
log.Println("这是一条很普通的日志。")
}
당신은 표준 로거를 사용하려는 경우, 우리는 일반적으로 위의 구성 운영 쓸 것이다 init
기능.
func init() {
logFile, err := os.OpenFile("./xx.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.Llongfile | log.Lmicroseconds | log.Ldate)
}
로거 만들기
log
- 표준 라이브러리는 또한 새로운 로거 객체 생성자를 만들 수 있습니다 New
우리 자신의 로거 예제의 생성을 지원합니다. New
다음과 같이 서명 기능은 다음과 같습니다
func New(out io.Writer, prefix string, flag int) *Logger
로거 객체를 만들려면 새로. 상기 파라미터 설정 로그 정보가 대상에 기록됩니다. 파라미터 프리픽스 생산 각 로그의 앞에 추가된다. 매개 변수는 사용자 지정 로그 특성 (시간, 파일 등) 플래그.
예를 들면 :
func main() {
logger := log.New(os.Stdout, "<New>", log.Lshortfile|log.Ldate|log.Ltime)
logger.Println("这是自定义的logger记录的日志。")
}
이 코드는 다음과 같은 결과를 획득하기 위해, 상기 수행 후 컴파일 :
<New>2017/06/19 14:06:51 main.go:34: 这是自定义的logger记录的日志。
개요
같은 로그 레코드 케이스의 서로 다른 수준을 충족 할 수없는 등의 제한 내장 로그 라이브러리 함수를, 이동, 우리는 실제 프로젝트에서 필요에 따라 같은 타사 로깅 라이브러리를 사용하기로 결정했습니다 Logrus , ZAP 등등합니다.