一般的系统对程序的调试信息只进行了简单的粗放处理,将这些信息直接用System.out.println()语句输出到控制台中。由于在调度过程中程序员为了能够跟踪程序的运行情况往往将大量信息输出到控制台,而在调度成功后没有相应地将这些信息屏蔽掉,在程序部署运行后,往往一个简单的业务功能调用也会输出大容量的过程调度信息,一方面造成了大量IO的读写,占用硬盘空间,另一方面则因为日志量大,很难查找到运行期有用的日志信息。
程序异常,资源释放操作失败这些信息是发现程序问题,定位出错点的信息依据,得不到这些信息将导致程序错误被屏蔽,要想使问题浮出水面程序必须能够提供详细而简洁的日志信息。
log4J是为java语言量身定做的一个日志模块,用统一的接口写日志,通过配置文件信息控制日志信息的输出格式、目的及输出级别(指定输出级别后,只有比输出级别更高的日志会被输出)。可以在不更改程序输出日志的情况下方便日志输出的控制,为日志的操作提供了很大的灵活性。
2 log4J的基本操作
2.1写日志的API
log4J将日志分为5个级别,从低到高分别是DEBUG,INFO,WARN,ERROR,FATAL,相应地log4J为记录这5个级别提供了5个方法,它们分别是:
public void debug(Object obj)
public void info(Object obj)
public void warn(Object obj)
public void error(Object obj)
public void fatal(Object obj)
同时每个方法还对应一个带Throwable入参的重载函数,用于将异常一并记录到日志中:
public void debug(Object obj,Throwable ex)
public void info(Object obj,Throwable ex)
public void warn(Object obj,Throwable ex)
public void error(Object obj,Throwable ex)
public void fatal(Object obj,Throwable ex)
5个级别记录信息的重要性依次提升,下面就每个记录方法对应的应用场合举例如下:
2.1.1 写日志API的使用示例
在程序中如何恰当级别的日志记录API记录日志信息是非常重要的,一般的我们将信息以其重要性调用将其划分为5个级别,分别调用相应的API来记录,我们以一个查询数据库的代码段来说明各级别的划分:
Java代码
1. Connection conn = null;
2. String sqlStr = "select * from table1 where a=’"+a+"’";
3. // 测试变量是否正确,在调度时查看,以后不会用
4. logger.debug("sqlStr字串为:"+sqlStr);
5. // ...
6. try
7. {
8. conn = DBBean.getConnection();
9. Statement stat = conn.createStatement();
10. ResultSet rs = stat.executeQuery(sqlStr);
11. if(rs.next())
12. {
13. logger.info("有记录");
14. // 查看程序运行中的信息,反映程序及配置信息的情况
15. }
16. else
17. {
18. logger.warn("因配置要求至少要有一条记录,请核对配置信息。");
19. // 假设配置信息要求一条配置记录,当找不到记录时应该警告,
20. // 以并更改配置
21. }
22. }catch(SQLException e)
23. {
24. logger.error("数据查询时发生异常",e);
25. // 发生了查询异常,可能是sqlStr语句的语法错误造成的
26. }
27. finally
28. {
29. try
30. {
31. if(conn != null)
32. {
33. conn.close();
34. conn = null;
35. }
36. }
37. catch(SQLException e)
38. {
39. logger.warn("数据连接无法关闭,连接将无法释放",e);
40. // 数据连接无法关闭将导致资源泄漏,可能是系统原因产生的
41. // 如果持续产生这个问题,开发人员需要查明原因,
42. // 否则系统将因数据连接资源无法释放而崩溃
43. }
44. }
分享到:
相关推荐
使用log4net组件进行错误日志的记录。使用文本形式记录,直接可以放到项目中用,此代码有详细的注释,
本人是初次使用nodejs开发,在开发中用到日志log4j,整理一个demo对以后在开发时可以参考,也希望对刚学nodejs使用日志的初学者有帮助。
log4e插件,在java代码中用该工具可以方便的插入日志
日志格式和项目中用log4j打出来的不一致,不利于解析。 从tomcat官网(https://tomcat.apache.org/tomcat-7.0-doc/logging.html)上找了下,修改一些配置、替换扩展包即可使用log4j输出catalian.out。 在$CATALINA_...
项目开发中用到的日志框架,log4j配置详解
notepad++ 查看log的语言格式
因为在项目中需要记录Log,所以研究了一下Log4Net。我这里主要是教给大家winform如何在app.config中配置,可以让不同的Log信息存储在不同的路径下的文件中。同时附上了自己手写的一个C_LogWriter.cs输出类,配置好...
一个自己编写的读写日志的程序,支持多线程读写日志文件。
服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...
服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...
服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...
http://blog.csdn.net/manageer/article/details/51169742 本博客中用到
服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...
有时候不想打开android ...安装 LogViewer.apk 或者git clone下载后编译LogViewer工程注意: ✎ 是可以拖拽LogViewer.apk 下载地址发送消息的测试apk TestLogViewer.apk 下载地址在你的项目中用引用 compile 'com.a
ssm一个简单项目所需的xml配置文件,spring+springmvc+mybatis框架中用到...项目中还会用到两个资源属性文件jdbc.properties和log4j.properties.一个是关于jdbc的配置,提取出来方便以后的修改.另一个是日志文件的配置.
// 于是,我就想自己写个log,可以与项目的日志函数进行适配。那么,上面的问题可以得到比较好的 // // 解决(或者说是规避)。 // //附注:我不知道这样做有没有意义,也就是根据自己的经验,试着做了下。经验不足,...
变更日志ChangeLog 是一个 Rails 引擎,旨在方便从 git commit 消息中解析更改日志并在浏览器中显示。要求ChangeLog 与 Rails > 3.1 兼容ChangeLog 适用于activerecord和mongoid ##Usage ChangeLog 不考虑所有提交...
nginx的日志配置可以参见《nginx日志配置指令详解》一文。如果要想以json格式记录nginx日志以便logstash分析,该如何指定日志格式呢?可以按照下面的格式来实现。 定义nginx日志格式: 代码如下: log_format ...
logging库提供了两个可以...在实际应用中,我们通常根据时间进行滚动,因此,本文中主要介绍TimeRotaingFileHandler的使用方法(RotatingFileHandler一样)。代码示例如下: #!/usr/bin/env python #_*_coding:utf-8_
MySQL开启通用查询日志general log mysql打开general log之后,所有的查询语句都可以在general log文件中以可读的方式得到,但是这样general log文件会非常大,所以默认都是关闭的。有的时候为了查错等原因,还是...