作者:马如林
来源 : http://blog.csdn.net/longronglin/article/details/52350593
日志是程序员必须掌握的基础技能之一,如果您写的软件没有日志,可以说你没有成为一个真正意义上的程序员。
为什么要记日志?
- 监控代码
- 变量变化情况,系统运行过程。
- 产线环境,不太好调试。
- 分布式环境下,调试更困难,日志就是非常好的帮手。
- 统计分析
- 日后审计
- 实际中有4%的代码是日志!
Java日志框架主要有log4j,logback,及其他不常用的官方日志及apachelogging等。
Log4j和LogBack的原作者为同一作者CekiGülcü。主流使用的一般是log4j的居多点,所以本文主要也讲解log4j为主。
配置文件log4j.properites文件,一般放倒classpath目录下即可,无需自启。
log4j.rootLogger=debug, stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.loglog4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%nlog4j.rootLogger=debug, stdout,R
log4j.rootLogger=[Level], Appender1, Appender2log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
其他类似,基本是三大主件的配置:
Logger
日志类型和日志级别(TRACE < DEBUG < INFO < WARN < ERROR < FATAL)
Appenders
输出到哪里,可以有多个目的地( Console,File,GUI 组件,remote socket servers,JMS,NT Event Loggers,remote Unix Syslog daemons。也可以异步)
Appenders的一般Console(ConsoleAppender)用来调试,File有每天更新(DailyRollingFileAppender)和最大多大文件(RollingFileAppender)滚动的设置,也有邮件的告警设置。基本理解上面的即可。
Layouts
%r [%t] %-5p %c - %m%n
176 [main] INFO org.foo.Bar - Located nearest gasstation.
Maven引用
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
</dependency>
个人认为必须了解和掌握的日志特性:
1. 列表内容
2. 日志级别
3. 继承
4. JMX管理
5. Appenders的Additivity
其他的需要了解
- Filter
- NDC
- MDC
日志调优
示例:
logger.debug(“Entry number: ” + i + “ is ” + String.valueOf(entry[i]));
if(logger.isDebugEnabled() {
logger.debug(“Entry number: ” + i + “ is ” + String.valueOf(entry[i]));
}
判断只是记录日志的1%时间,所以一般情况下是值得的。
但是一般使用SLF4J就自动集成该功能。
在了解Log4j之后,也必须了解一下SLF4j,大家一般是使用这个进行整合内部不同日志的具体实现的。
Maven使用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
常用记录日志的地方:
• 方法入口
• 方法出口
• 异常
• 自己需要跟踪的信息
• 距离日志最近的地方记录日志
• 先记录日志,后抛异常,可以把异常往上抛
• 去除冗余日志
日志库的使用情况:
日志一般会使用即可。掌握本课程基本够用,剩下来就看你自己了。
著名的solr使用日志的情况
一般大企业,会收集日志,使用ELK等技术查看日志,或sink到Hadoop进行数据分析和挖掘,甚至使用storm进行实时统计。
更多内容可以参考视频:
CSDN学 院: http://edu.csdn.net/course/detail/2890
网易云课堂: http://study.163.com/course/introduction/1003149011.htm