[Java小记] 记一下Log的各个级别及其用法

1. Log级别

参考下列表格

Log级别说明用法
error错误:系统运行错误,无法自行恢复,并且会影响到如下游系统或系统的使用者。一般需要人为干预才能恢复正常运行。凌晨2点法则(2AM Rule):当发生这个错误时,你觉得有必要在2点熟睡之际叫醒的时候,log级别设为error。
warn警告:系统运行异常,能自行恢复,继续运行。有可能异常会影响到使用者。但一般不需要立刻进行人为对应。这个警告需要被监控者审查,并判断其是否会影响到使用者。如果是,需要人为修正错误带来的影响例如:I/O异常导致文件写入失败,重试后成功。 一般来说文件写入成功率可以人为是99.99%,但有一定的概率因小概率异常导致写入失败的时候需要设为Warn通知监控者(Monitor)排查这个异常出现的原因
info信息:记录系统运行的情况。帮助我们了解该时间系统内哪些代码在运行中。例如:系统的生命周期(Start up/Shut down),Session的生命周期(Login/Logout),某种数据的写入(Database call),远程API调用等。
debugDebug:除开info之外的任何有助于追踪系统运行情况的信息,一般用于开发和QA环境高层级API被调用的次数可以认为明显小于低层级API,比如一个批处理程序,处理1000w数据的时候,ProcessData(Data)这个低层次API会被调用1000w次。而ProcessData里也调用了其他3个private方法,如果我们在生产环境log全部的method start,end。会导致产生大量无用的Log。这些方法的进入和退出的log我们只希望在开发和QA环境下测试控制流的时候看到。
trace详细信息(more detailed information)这个非常不常用,一般debug已经会产生大量的log。而trace是连开发环境下少量数据的时候都不太愿意使用的。比如把一个对象的所有信息log出来等。假设你的程序是一个batch把文件里数据给导入到数据库,读入的时候log每一行数据,数据变换(mapping)的时候在log每一个变换后的数据。这个时候用trace。生产环境下一般只会log部分数据来定位处理的是那一条数据。

2. 总结

许多人认为只要把程序写好即可。诚然这没有错,但是如果想要写高质量高可维护的软件的时候,Log是必不可少的。有Log能帮助我们对程序运行的方式进行一次再现,而不是去找到使用者问他做了什么操作产生了错误。对于我们排查程序错误有着不可替代的作用。设计好的Log能让我们排查错误事半功倍。而设计不好的Log则能让你的接班者(后任开发/运维/异常排查人员/半年后的自己(误))想杀人。

在敏感的金融领域,任何系统异常都可能会导致大量的金钱损失。为了避免或者使损失降到最低,一般都会对Error/Warn级别的Log进行监控,一旦发生,就会有人去检查。正确使用Log级别,对提高系统的稳定性有着莫大的好处。

Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值