>백엔드 개발 >Golang >로그 회전을 지원하면서 구성 파일을 사용하여 Logger를 우아하게 구성하는 방법

로그 회전을 지원하면서 구성 파일을 사용하여 Logger를 우아하게 구성하는 방법

王林
王林앞으로
2024-02-10 20:50:08970검색

如何使用配置文件优雅地配置 Logger,同时支持日志轮转

PHP 편집자 Zimo가 구성 파일을 사용하여 Logger를 우아하게 구성하고 로그 회전을 구현하는 방법을 공유합니다. Logger는 문제 해결 및 로그 추적을 용이하게 하기 위해 애플리케이션의 실행 상태를 기록하는 데 도움이 되는 일반적으로 사용되는 로깅 도구입니다. Logger를 사용하면 구성 파일을 통해 로그 형식, 출력 대상, 로그 수준 등을 유연하게 정의할 수 있으며 로그 순환 규칙을 구성하여 로그를 자동으로 관리하고 저장할 수도 있습니다. 합리적인 구성을 통해 보다 유연하고 효율적인 로깅 및 관리를 달성할 수 있습니다. 이 기사에서는 구성 파일을 사용하여 Logger를 우아하게 구성하고 로그 회전을 지원하는 방법을 자세히 소개합니다.

문제 내용

문제 설명

  • 특징:test1()是官方文档推荐的日志轮转和切割库ngopkg.in/natefinch/lumberjack.v2.
  • 기능: test2()는 yaml을 사용하여 공식 문서의 기본 구성에 따라 구성을 읽는 로거입니다.

주요 기능을 실행한 후,

콘솔의 출력:

2023-05-15t08:49:16.555+0800 |信息|记录器构建成功:来自 yaml 的配置 | {“app”:“jpz”}

로그 파일에 출력 foo.log:

{"level":"info","ts":1684111756.5545945,"msg":"记录器构建成功:lumberjack.logger"}

이 두 로그는 확실히 다릅니다.

현재 요구 사항:

  1. 둘 다 구성 파일을 사용하여 config_log_zap.yaml让所有配置生效,并让lumberjack 로그 회전 및 분할을 완료하는 것을 지원합니다.

  2. 구성 파일을 통해 필요한 내용을 빠르게 적용할 수 있도록 콘솔과 로그 파일의 출력이 동일해야 합니다. 개발 과정에서 과거 출력 메시지를 추적하고 기록해야 하기 때문에 콘솔과 로그 파일이 필요합니다.

    콘솔의 출력:

    2023-05-15t08:49:16.555+0800 |信息|记录器构建成功:来自 yaml 的配置 | {“app”:“jpz”}

    로그 파일에 출력 foo.log:

    2023-05-15t08:49:16.555+0800 |信息|记录器构建成功:来自 yaml 的配置 | {“app”:“jpz”}

  3. 위의 두 가지 요구 사항을 충족하기 위해 test1()test1()test2() 合并为一个函数 test0()를 하나의 함수 test0()으로 결합하는 방법은 무엇입니까?

좀 도와주세요. 저는 이 일을 오랫동안 해왔습니다.

main.go

으아아아

config_log_zap.yaml

package main

import (
    "gopkg.in/yaml.v3"
    "os"

    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "gopkg.in/natefinch/lumberjack.v2"
)

func test1() {
    // lumberjack.logger is already safe for concurrent use, so we don't need to
    // lock it.
    w := zapcore.addsync(&lumberjack.logger{
        filename:   "./foo.log",
        maxsize:    500, // megabytes
        maxbackups: 3,
        maxage:     28, // days
    })
    core := zapcore.newcore(
        zapcore.newjsonencoder(zap.newproductionencoderconfig()),
        w,
        zap.infolevel,
    )
    logger := zap.new(core)
    logger.info("logger construction succeeded:lumberjack.logger")
}

func test2() {
    var cfg zap.config
    yamlfile, _ := os.readfile("./config_log_zap.yaml")
    if err := yaml.unmarshal(yamlfile, &cfg); err != nil {
        panic(err)
    }

    logger := zap.must(cfg.build())
    defer logger.sync()

    logger.info("logger construction succeeded:config from yaml")
}

func main() {
    test1()
    test2()
}

해결 방법

zap.registersink을 사용하여 lumberjack 로거를 새 싱크로 등록하세요.

으아아아

그리고 다음과 같이 outputpaths 설정하도록 구성 파일을 수정합니다.

으아아아

위 내용은 로그 회전을 지원하면서 구성 파일을 사용하여 Logger를 우아하게 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제