package
0.0.0-20240920062246-d0657495930a
Repository: https://github.com/yigmmk/leetcode.git
Documentation: pkg.go.dev

# README

log

一个好的Logger应该提供以下能力:

  • 支持把日志写入到多个输出流中,比如可以选择性的让测试、开发环境同时向控制台和日志文件输出日志,生产环境只输出到文件中。
  • 支持多级别的日志等级,比如常见的有:TRACE,DEBUG,INFO,WARN,ERROR 等。
  • 支持结构化输出,结构化输出现在常用的就是JSON形式的,这样可以统一日志平台,通过 logstash 之类的组件直接把日志聚合到日志平台上去。
  • 需要支持日志切割 -- log rotation, 按照日期、时间间隔或者文件大小对日志进行切割。
  • 在 Log Entry 中(就是每行记录)除了主动记录的信息外,还要包括如打印日志的函数、所在的文件、行号、记录时间等。

go原生log

缺点

  • 仅限基本的日志级别,只有一个Print选项。不支持INFO/DEBUG等多个级别。
  • 对于错误日志,它有Fatal和Panic
    • Fatal日志通过调用os.Exit(1)来结束程序
    • Panic日志在写入日志消息之后抛出一个panic
    • 但是它缺少一个ERROR日志级别,这个级别可以在不抛出panic或退出程序的情况下记录错误
  • 缺乏结构化日志格式的能力——只支持简单文本输出,不能把日志记录格式化成 JSON 格式。
  • 不提供日志切割的能力。

获取项目根目录绝对路径

几种实现方式:

  • os.Getwd()
  • os.Args[0]
  • runtime.Caller

os.GetWd

获取进程的当前工作目录,wd—working directory (工作目录),当进程执行目录不在项目目录下时获取的路径就和项目目录不同

os.Args[0]

os.Args这个列表里保存的是程序的启动参数,而参数0按照约定是程序的可执行文件名

使用go run时返回的是临时目录,其他情况都能正常

runtime.Caller

# Packages

No description provided by the author
No description provided by the author