Gone框架介绍31 - 使用`goner/zap`替代logrus默认实现,提升日志输出的效率

gone是可以高效开发Web服务的Golang依赖注入框架
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/

goner/zap 使用说明

注册到Gone

	//注册 `goner/zap` 相关的Goners
	_ = goner.ZapLoggerPriest(cemetery)

注意:应该将goner/zap注册的注册放到其他Goners注册之前,如果zap注册了,默认使用的logrus就不会再注册,反之如果logrus注册了,zap就不会再注册。

使用 sugar logger

type MyService struct {
    gone.Flag
    gone.Logger `gone:"*"`
}

func (s *MyService) print() {
    s.Info("hello gone")
}

gone.Logger 接口的实现使用的就是zap sugar,所以直接注入gone.Logger,就可以直接使用zap sugar了。

使用 zap logger

type MyService struct {
    gone.Flag
    gone_zap.Logger `gone:"*"`
}

func (s *MyService) print() {
    ctr.Info("print", zap.String("name", "gone"))
}

通过注入gone_zap.Logger,就可以直接使用zap logger了。

provider模式,给当前模块提供logger

  • sugar logger
type MyService struct {
    gone.Flag
    gone.Logger `gone:"zap,my-service"`
}
func (s *MyService) print() {
      s.Info("hello gone")
}

上面代码将创建一个新的名为 my-service 的 sugar logger。

  • zap logger
type MyService struct {
    gone.Flag
    gone_zap.Logger `gone:"zap,my-service"`
}

func (s *MyService) print() {
    ctr.Info("print", zap.String("name", "gone"))
}

上面代码将创建一个新的名为 my-service 的 zap logger。

配置项

goner/zap支持通过配置,改变默认行为;关于配置的读取和配置文件的格式参考 配置读取

配置项说明类型默认值
log.level日志级别,支持 debug、info、warn、error、panic、fatalstringinfo
log.enable-trace-id是否开启traceId,开启traceId后,日志会增加traceId字段booltrue
log.disable-stacktrace是否禁用堆栈信息,禁用堆栈信息后,日志不会增加堆栈信息boolfalse
log.stacktrace-level输出日志时同时打印堆栈信息的级别,支持 debug、info、warn、error、panic、fatalstringerror
log.report-caller是否打印调用方信息,包括文件名、代码行号和函数名booltrue
log.encoder日志格式,支持 console、jsonstringconsole
log.output日志输出位置,支持 stdout、stderr、file,如果配置了file,则日志会输出到file指定的位置;支持多个路径,使用,分隔stringstdout
log.error-output错误日志输出位置,支持 stdout、stderr、file,如果配置了file,则日志会输出到file指定的位置;支持多个路径,使用,分隔string<空>
log.rotation.output日志轮转输出位置,支持 stdout、stderr、file,如果配置了file,则日志会输出到file指定的位置;配置后开启日志轮转string<空>
log.rotation.error-output错误日志轮转输出位置,支持 stdout、stderr、file,如果配置了file,则日志会输出到file指定的位置;配置后开启错误日志轮转string<空>
log.rotation.max-size日志轮转,文件最大大小,单位MBint100
log.rotation.max-files日志轮转,文件最大数量int10
log.rotation.max-age日志轮转,文件最大保存天数int30
log.rotation.local-time日志文件轮转是否使用本地时间戳booltrue
log.rotation.compress日志轮转文件是否压缩boolfalse
### 关于Java中Person类的相关信息 在Java开发中,`Person` 类通常被用作一种常见的示例类来展示面向对象编程的核心概念,比如属性定义、构造函数、继承和封装等。虽然标准库中并没有预定义的 `Person` 类[^2],但在实际应用中可以根据需求自行设计此类。 #### 基本结构 以下是基于常见需求的一个简单 `Person` 类实现: ```java public class Person { // 属性字段 private String name; private int age; // 构造方法 public Person(String name, int age) { this.name = name; this.age = age; } // Getter 和 Setter 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 重写toString方法以便打印对象时显示有意义的内容 @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } ``` 上述代码展示了如何创建一个简单的 `Person` 类并为其提供基本的功能支持。通过这种方式可以轻松扩展其他特性,例如添加更多字段或者实现接口等功能[^4]。 #### 动态加载与反射机制的应用 当涉及到动态加载或利用反射技术操作 `Person` 对象时,则需注意 JVM 的类加载行为。只有当首次真正需要使用某个特定类型的实例时才会触发其对应的 `.class` 文件读取过程;在此之前即使存在对该类型名称的引用也不会立即引起加载动作发生。 另外值得注意的是,在某些复杂业务逻辑下可能还会涉及序列化/反序列化的处理方式,这同样依赖于目标平台对于所指定版本号的支持情况等因素影响最终效果表现形式各异[^1]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值