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

王林
풀어 주다: 2024-02-10 20:50:08
앞으로
920명이 탐색했습니다.

如何使用配置文件优雅地配置 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!