`
rensanning
  • 浏览: 3517215 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37552
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604563
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678450
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87471
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399993
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69115
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90611
社区版块
存档分类
最新评论

怎么写出干净有用的日志

 
阅读更多
这个话题并不新鲜,Google一下“Logging Best Practices”会发现很多相关的资料。日志Log在开发中是非常重要的程序的一部分,如何写出Clean、Readable、Helpful、Descriptive的日志是程序员的基本功!

对于普通开发人员来说,如果程序遇到问题,第一个想到的肯定是看日志Log,可以通过查看日志Log发现出了什么错,便于开发,调试程序,试想如果程序crash了,没有日志Log,发生了什么将一无所知。

很多人忽略日志的重要性,日志可以记录程序的运行状况,出现问题时以便分析。日志不仅是给程序员自己看的,对于系统管理员来说也可以通过写脚本来分析日志,提取对系统运维有用的东西。系统运维相关工具的依据就是日志Log,所以自动监视系统、系统运维人员、系统管理员、开发人员等等,都需要日志Log。

(1)日志种类
根据程序的类型不同,日志种类又很多,比如:
  • 操作系统的Log(Windows的Event Log)
  • 各个应用程序的Log
  • Web服务器的访问日志(Apache的access_log、Nginx的access.log)
  • Web应用的日志
等等
很多应用在出现致命错误的时候,其实都会把相应的日志文件上传到服务器去以便分析。

(2)日志工具
基于Java的应用,可选的Logger有很多,而且很多开源框架使用的也不同。
比如Guava使用JUL、Spring和Apache的框架都是用Apache Commons Logging、
不要使用原始的System.out.println("Hello world!");

(3)基础知识
  • 输出Log时避免自己出错
  • 过多的日志会拖慢系统
  • 日志至少应该包含描述和数据
  • 重要的日志应该添加特殊的可搜索字符
  • 不要输出密码、个人信息、信用卡信息等敏感数据
  • 输出重要方法的参数和返回值
  • 输出重要方法的开始和结束(异常时是否输出结束日志?)
  • 如果和外部系统链接,需要输出INPUT和OUTPUT
  • 合理输出异常信息(不要主动输出异常,合理通过框架、共通代码输出;避免异常被输出多次)
  • 考虑数据的输出格式,最好输出多种格式利用人看或者工具分析
  • 合理输出二进制文件信息(name、size)

(4)输出形式
1) 键值对
引用
key1=value1, key2=value2, key3=value3 . . .

2) JSON
引用
{ "sender" : "michael" "recipient": { "name" : "michael", "name" : "andrea", "name" : "itay" } subject:"I heart logs" }

对于一个Bean对象来说,需要注意他的输出形式,比如对象的Serialization、或者覆写toString()、commons-lang的ToStringBuilder、Arrays#deepToString、Beanutils#collect等等,都可以提高可读性。

(5)日志级别
可能你知道INFO、WARN、ERROR、DEBUG、TRACE,但是90%的开发人员在输出日志的时候就没考虑过日志的级别,只是简单的使用统一级别。
系统上线后会被调整的最优化的级别,而且不同的人会看不同的日志。

(6)配置日志Log
输出格式pattern:
引用
<pattern>%d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}] %m%n</pattern>

Apache
引用
192.168.56.6 - - [24/Sep/2012:11:11:11 +0900] "GET /info.php HTTP/1.0" 200 9 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.7) Gecko/20120829 Firefox/10.0.7"

Ngnix
引用
192.168.21.198 - - [06/Mar/2015:18:19:06 +0900] "GET /index.php HTTP/1.1" 200 87243 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36"


设置级别:

Rotate日志文件:
日志文件会占用大量的磁盘空间,所以必须rotate日志文件

(7)常见错误
  • 设置错误的日志级别
  • Catch异常后再Throw
  • 日志输出到stderr 或 stdout (System.out.println / e.printStackTrace)
  • 复杂的日志代码
引用
Diagnostic Contexts
Contextual logging (e.g. thread name, userId)
Available on log4j, logback, and log4j2
Two different types: Nested & Mapped

NDC
Nested Diagnostic Contexts are stacks
NDC.push(“x”);
NDC.pop();
Useful for debugging looping or recursive structures

MDC
Mapped Diagnostic Context
key-value pairs
MDC.put(“userId”, user.getId())
Usually what you’ll use
Show up in Graylog using the Graylog Appender





参考:
Java日志终极指南
Good Logging Practices
10 Tips for Proper Application Logging
Benchmarking Java Logging Frameworks
Java Logging API
Ultimate Guide for Logging
Log4j Best Practices
  • 大小: 50.7 KB
  • 大小: 21.5 KB
分享到:
评论

相关推荐

    unix系统日志系统记录的日志

    最好每天,至少每周一次,取决于你的审查政策。/var/adm/utmp:系统记录的日志,跟踪仍然登录的用户,但有时shell被停止或未清除干净,会有问题 理解其他日志文件的内容有助于安全管理员认清系统中正在发生的事情。

    系统日志导出.zip

    需要导出windows日志的朋友,不必再费劲吧啦的一通操作,才能导出系统日志了。可以通过脚本,执行以下就都出来了,干净利索。(脚本支持导出当前时间回溯一天的日志)

    git-commit-guide:Git提交消息指南-保持日志干净,一致和有用!

    通过遵循本指南,您和/或您的团队将创建更一致,更一致有用的变更日志。 阅读,了解解释其创建原因/方式的一些详细信息。提交消息格式提交的格式应由以下内容组成: 一条行(带有 ,可选和 ) 可选的多行(始终在...

    工业互联网安全测试技术:工控日志清除.docx

    工控日志清除 实验原理 工控机使用一段时间后会产生各种垃圾文件,如日志文件(.log)、临时帮助文件(.gid)、磁盘...(3)等这些文件都删除完了之后,再清空一下回收站,就可以将C盘中的所有.log日志文件删除干净了。

    卸载干净vs2015

    完整卸载干净vs2015,比自带的好用,一键卸载干净,简单实用

    干净卸载程序工具

    能干净、完整的卸载不需要的组件,它比 Windows 自带的卸载程序快 500% -1000%,并且准备一定的侦测 SPY 软件的能力。好了,你不喜欢 Windows 自带的卸带工具?那么从现在开始,每周运行一次 Your Uninstaller!,...

    干净的maven架构

    干净的maven项目

    清理卸载不干净注册表软件

    本人写的关于清理注册表的软件,特别针对于那些卸载不干净的程序。

    写干净的代码,C语言书写规范

    写干净的代码,.C语言书写规范 1.1符号命名规则 1.1.1符号名包括模块名、常量名、标号名、子程序名等

    智能陈桥五笔 V5.805 干净优化版

    智能陈桥5.804干净优化版 使用说明:  1.本版本在保持原版输入法主要功能的同时,作了以下干净优化:屏蔽安装和使用中的连网事件,以解决原版安装时下载插件、设置IE默认页面和使用时播放广告等问题;去除原版安装...

    oracle 卸载干净方法

    经常安装完oracle 运行段时间出问题,卸载重装出问题,怎么卸载干净重装方法。

    百度干净云2.0 单文件版

    百度干净云2.0 单文件版百度干净云2.0 单文件版百度干净云2.0 单文件版

    数据库卸载不干净问题

    数据库卸载不干净问题 资源源于不但搜索,自由源于不但努力

    干净卸载Oracle

    由于Oracle安装之后,很难卸载干净导致以后安装时都会出问题,按此文档可以干净卸载Oracle

    干净强大的视频播放器 mplayer

    这个是一款非常干净而且功能强大的小体积视频播放器,硬盘版的,什么广告啊影视库啊都没有,纯粹一个播放器。我自己用麦咖啡已经完整查杀过没有病毒。

    SQL日志清理工具

    SQL数据库使有久了,会产生越来越多的日志记录,几百M到几G不等,占用硬盘大量的空间 用这个工具 可以把日志清理干净,很好用

    VS2015卸载。非常干净.7z

    VS2015卸载。非常干净VS2015卸载。非常干净VS2015卸载。非常干净

    minimalists_bullet_journal:使用说明和模板以最小的努力创建干净有用的项目日志

    说明和模板,以最少的工作量即可创建干净且有用的项目日志。 模板索引 目的 关联 每周计划 每周工作计划 项目符号表 带有日期标记的项目符号表 重复任务的跟踪器 习惯追踪器 快速手册作为简短提醒 去做 两页...

    idea超干净的黑色主题

    idea超干净的黑色主题

    zencart包包模板 LV模板 干净界面

    zencart包包模板 LV模板 干净界面

Global site tag (gtag.js) - Google Analytics