网站首页 > java教程 正文
日志对于一个系统来说非常重要,查找异常信息、分析系统运行情况等都需要用到日志。
调试
在Java项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。如果你大量使用System.out或者System.err,我承认这是一种最方便最有效的方法,我在刚接触这门语言的时候也时常这么做,只是这种方式显得不够专业。
定位错误
不要以为项目能正确跑起来就可以高枕无忧,项目在运行一段时候后,可能由于数据问题,网络问题,内存问题等出现异常。这是日志可以帮助开发或者运维人员快速定位错误位置,定制解决方案。
数据分析
大数据的兴起,使得大量的日志分析成为可能,ELK也让日志分析门槛降低了很多。日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,用户画像对于公司下一步的战略方向有一定指引作用。
日志规约
1、【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
2、【强制】日志文件推荐至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。
3、【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式: appName_logType_logName.log。logType:日志类型,推荐分类有 stats/desc/monitor/visit 等;logName:日志描述。这种命名的好处: 通过文件名就可知道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。
正例 : mppserver 应用中单独监控时区转换异常,如: mppserver_monitor_timeZoneConvert.log
说明 : 推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于
通过日志对系统进行及时监控。
4、【强制】对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
说明 : logger.debug("Processing trade with id: " + id + " symbol: " + symbol);如果日志级别是 warn,上述日志不会打印,但是会执行字符串拼接操作,如果 symbol 是对象,会执行 toString() 方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。
5、【强制】避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。
6、【强制】异常信息应该包括两类信息: 案发现场信息和异常堆栈信息。如果不处理,那么通过关键字 throws 往上抛出。
正例 : logger.error(各类参数或者对象 toString + "_" + e.getMessage(), e);
7、【推荐】谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘
撑爆,并记得及时删除这些观察日志。
说明 : 大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考: 这些日志真的有人看吗? 看到这条日志你能做什么? 能不能给问题排查带来好处?
8、【参考】可以使用 warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适从。注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。如非必要,请不要在此场景打出 error 级别。
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/197.html
猜你喜欢
- 2024-11-27 深入浅“粗”SpringBoot日志框架
- 2024-11-27 SpringBoot接入轻量级分布式日志框架(GrayLog)
- 2024-11-27 阿里强制使用SLF4J日志框架的缘由
- 2024-11-27 杂谈 : 日志门户 slf4j 如何集成日志框架的
- 2024-11-27 tomcat各个日志文件的区别
- 2024-11-27 Mybatis 添加日志功能
- 2024-11-27 精通springcloud:分布式日志记录和跟踪
- 2024-11-27 阿里巴巴Java开发规范(4):日志规约
- 2024-11-27 「springboot」Slf4j日志框架的体系结构
- 2024-11-27 你用了这么久的Log4j2日志框架,真的对它有自己的理解吗?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)