网站首页 > java教程 正文
打印日志是日常开发工作及程序上线运行过程中常用的定位问题的一种手段,Java中常用的日志框架有以下几种:Log4j、Logback、SLF4J、JUL、Log4j2、Log4j3、LogIt、Apache Commons Logging。在这里不聊具体的日志框架,只说一些常见的技巧与问题。
首先,日志是有级别的,例如error、warn、info、debug等等,打印日志时要有选择的打印,不能一股脑的选择某一种级别。例如,异常时打印error日志,定位问题时打印一些info日志。其次,日志保存的时间也要做限制,既不能太长,也不能太短。时间太长,意味着日志文件可能很大,会占用大量磁盘空间。时间太短的话,则不利于定位问题。再者,打印日志时,要使用占位符。使用占位符的好处是,节省内存,提升性能。反之,如果是使用字符串拼接的话,会不断生成新的String对象,占用内存,影响性能。最后,打印异常日志时,一定要打印堆栈信息。堆栈信息会显示具体代码行数,便于快速定位问题。
下面简单聊聊,常见的一些问题。首先,最常见的就是打印日志时不使用占位符,这个最常见。其次就是打印异常时不打印堆栈信息。还有就是打印的日志无法定位问题。关于占位符的问题,这里上面有提过,这里就不细说了。先说下不打印堆栈的问题,有些人喜欢打印e.getMessage(),这种方式不能说完全没用,但是作用不大。例如NullPointerException,打印的内容就是null,对定位问题帮助真的不是很大。再说下打印的日志无法定位问题的情况,在生产环境中出现问题的情况并不多,很多情况往往是数据问题。如果只是简单打印堆栈信息的话,能够快速的定位的具体代码,但是不能知道是什么样数据导致的问题,所以打印日志时除了堆栈信息外,一定要打印一些关键信息,例如数据的主键或关键字段等。
还有就是开发过程中一定要自测一下打印的日志是否符合自己的预期,比如有的人打印异常日志时写这样的代码:
log.error("xxx出现异常:"+e);
这样的日志并不会打印堆栈信息。再比如,阿里巴巴Java开发手册中日志规则有这么一条:
个人觉得这里的正例不是很好,感觉e.getMessage()很多余,首先没有使用占位符,其次打印异常信息时,本身就会打印e.getMessage()的内容,起码Logback框架是这样。
以上仅是个人对日志打印的一些看法,仅供参考。如果不对,欢迎大家指正。
- 上一篇: java如何打印带颜色的日志到控制台
- 下一篇: Java 打印格式标志(java打印类型)
猜你喜欢
- 2024-10-31 阿里经典面试-java三线程轮流打印A、B、C的ReentrantLock实现
- 2024-10-31 学习廖雪峰的JAVA教程---反射(名叫Class的类、动态加载)
- 2024-10-31 Java案例-求和与打印九九乘法表(用java打印九九乘法口诀)
- 2024-10-31 Java面试题:怎么让两个线程交替打印1和2(生产者消费者问题)
- 2024-10-31 第九章:Java输入输出流和文件操作
- 2024-10-31 Java 自定义注解+AOP 实现日志打印
- 2024-10-31 Java基础学习:java输出整数类型(java分别输出整数和小数)
- 2024-10-31 不懂这些,你敢说自己知道Java标准输入输出流?
- 2024-10-31 Java高阶面试:如何实现三个线程交替循环打印
- 2024-10-31 字节流的输入输出,JAVA基础知识笔记
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)