日志信息分类
1.等级由低到高:debug<info<warn<Error<Fatal;
2.区别:
debug 级别最低,可以随意的使用于任何觉得有利于在调试时更详细的了解系统运行状态的东东;
info 重要,输出信息:用来反馈系统的当前状态给最终用户的;
后三个,警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态。
warn, 可修复,系统可继续运行下去;
Error, 可修复性,但无法确定系统会正常的工作下去;
Fatal, 相当严重,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话后果严重。
3.使用
什么时候使用 info, warn , error ?
info 用于打印程序应该出现的正常状态信息, 便于追踪定位;
warn 表明系统出现轻微的不合理但不影响运行和使用;
error 表明出现了系统错误和异常,无法正常完成目标操作。
4.格式
总结起来, 错误日志格式可以为:
log.error(“[接口名或操作名] [Some Error Msg] happens. [params] [Probably Because]. [Probably need to do].”);
log.error(String.format(“[接口名或操作名] [Some Error Msg] happens. [%s]. [Probably Because]. [Probably need to do].”, params));
或
log.error(“[Some Error Msg] happens to 错误参数或内容 when [in some condition]. [Probably Because]. [Probably need to do].”);
log.error(String.format(“[Some Error Msg] happens to %s when [in some condition]. [Probably Because]. [Probably need to do].”, parameters));
[Probably Reason]. [Probably need to do]. 在某些情况下可以省略; 在一些重要接口和场景下最好能说明一下。
每一条错误日志都是独立的,尽可能完整、具体、直接说明何种场景下发生了什么错误,由什么原因导致,要采用什么措施或步骤。
5.意义
错误日志是排查问题的重要手段之一。 当我们编程实现一项功能时, 通常会考虑可能发生的各种错误及相应原因:
要排查出相应的原因, 就需要一些关键描述来定位原因。这就会形成三元组:错误现象 -> 错误关键描述 -> 最终的错误原因。
需要针对每一种错误尽可能提供相应的错误关键描述,从而定位到相应的错误原因。也就是说,编程的时候,要仔细思考, 哪些描述是非常有利于定位错误原因的, 尽可能将这些描述添加到错误日志中。
二、相关日志目录
1、内核引导日志目录
/var/log/dmesg
ssh登陆记录信息,包括失败的记录信息。
/var/log/secure
记录邮件相关信息
/var/log/maillog
记录crontab相关信息
/var/log/cron
记录ftp相关的日志信息
/var/log/xferlog
系统大部分日志,包括login、check password、failed log等
/var/log/messages
三、一些命令
lastlog查看/var/log/lastlog文件的信息
①、查看最近root的登陆情况
Lastlog -u root
who、users、finger命令查看/var/run/utmp文件,记录每个用户登陆系统的时间
Last命令查看/var/log/wtmp文件,记录每个用户登入与登出时间
————————————————
/proc/sys/kernel/printk文件定义了4个数字, 查看日志级别:
cat /proc/sys/kernel/printk
4 4 1 7
①控制台日志级别:优先级高于该值的消息将被打印至控制台。
②缺省的消息日志级别:将用该值来打印没有优先级的消息。
③最低的控制台日志级别:控制台日志级别可能被设置的最小值。
④缺省的控制台:控制台日志级别的缺省值。
日志缓冲区的每一行文本开头具有级别标记, 级别值越小则优先级越高.
系统定义了8个消息级别, 级别号从0到7分别为:
致命级(KERN_EMESG),
警戒级(KERN_ALERT),
临界级(KERN_CRIT),
错误级(KERN_ERR),
告警级(KERN_WARN),
注意级(KERN_NOTICE),
通知级(KERN_INFO),
调试级(KERN_DEBUG).
修改日志级别:
echo 0 4 1 7 > /proc/sys/kernel/printk
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
ALL 最低等级的,用于打开所有日志记录。
TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
OFF 最高等级的,用于关闭所有日志记录。
如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。
————————————————
当系统崩溃修复时,会产生大量系统日志,不便于关键信息获取,通过修改系统日志打印界别,可突出所需级别的日志信息,便于查找。
查询串口日志级别
在 OS 执行cat /proc/sys/kernel/printk命令,返回信息中“3”表示串口日志级别:
linux-70u8:~ # cat /proc/sys/kernel/printk
3 4 1 7
修改串口日志级别
说明:
该方法只对当次运行有效,OS重启后串口日志级别恢复为配置文件定义的级别。
在 OS 执行echo N > /proc/sys/kernel/printk命令,N 表示要设置的串口日志级别,相关说明如表11-3所示。
linux-70u8:~ # echo 7 > /proc/sys/kernel/printk
linux-70u8:~ # cat /proc/sys/kernel/printk
7 4 1 7
表11-3 串口日志级别说明
级别
对应内核日志级别
说明
0
KERN_EMERG
紧急消息。系统崩溃之前提示,表示系统已不可用。
1
KERN_ALERT
报告消息。表示必须立即采取措施。
2
KERN_CRIT
临界消息。通常涉及严重的硬件或软件操作失败。
3
KERN_ERR
错误消息。串口日志的默认级别。驱动程序常用 KERN_ERR 来报告硬件的错误。
4
KERN_WARNING
警告消息。对可能出现问题的情况进行警告。
5
KERN_NOTICE
正常但又重要的消息。用于提醒,常用于与安全相关的消息。
6
KERN_INFO
提示消息。如驱动程序启动时,打印硬件消息。
7
KERN_DEBUG
调试消息。设置此级别会打印所有日志消息。