简介
在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。
在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有引起足够的重视。
开发人员应在一开始就养成良好的日志撰写习惯,并且应在实际的开发工作中为写日志预留足够的时间。
一般程序日志出自下面几个方面的需求:
一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。
确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。
既然撰写日志是有需求,而且也能在未来帮助我们提高工作效率的事情,长远来看是非常有利的一件事情。
因此我们应该在自己开发的程序中符合规范的撰写日志,在写日志时要注意以下的问题。
另外,把日志分类输出到不同的文件也有利于我们排除干扰,迅速找到我们需要的信息。而且,最好在打印日志时输出英文,防止中文不支持而打印出乱码的情况。
例如:尽量避免在在大的循环中打印意义不大的日志内容。输出日志之前最好能判断日志的级别(例如:debug 前先调用 isDebugEnabled() 作出判断)。
怎么都想不明白程序有什么问题,最后才发现居然是日志文件占满了磁盘空间。在实际的应用中出现上 G 的日志文件也往往不少见,要在这样规模的日志文件中找出对解决问题有用的信息也是一大挑战。
例如常见的系统具有如下的日志级别:
上述的日志文件中定义了 6 种日志级别,不同级别的含义在下文详述,需要了解到在一个程序开发的过程中需要维护不同的分别为 FATAL,ERROR,EARN,INFO, DEBUG,TRACE。
其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。
如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。
下面是一个工作中的日志文件的一部分内容:
可以从该文件中看出一般日志文件中应该含有的信息。
日志级别和含义
Log4j 是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输出目的地是控制台、文件、GUI 组件甚至是套接口服务器;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
Log4j 由三个重要的组成构成:
Log4j 中将要输出的 Log 信息定义了 6 种级别,依次为 TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。
当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,非常方便快捷。
日志级别就像开关一样,来决定哪些日志方法被调用,哪些不被调用。在 log4j 中,日志级别的关系如下所示:
设置了对应的级别之后,日志框架就只调用大于等于这个级别的方法。Log4j 建议只使用如下的四个界别:
日志规范示例
模仿,抄写是比较好的学习方式,借鉴前人撰写日志的良好风格以形成自己的风格是不错的方式。下面是一些不错的日志记录。
该语句出现于格式化输出时的格式字符串中。形式为:
其中,0x 为普通字符,输出的时候会原样输出为 0x。
%08x 为整型以 16 进制方式输出的格式字符串,会把后续对应参数的整型数字,以 16 进制输出。08 的含义为,输出的 16 进制值占 8 位,不足部分左侧补 0。
于是,如果执行:
会输出 0x00001234。
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、收藏,您的支持是我坚持写作最大的动力。