Log4j日志记录(Java)

作者:马如林
来源 : 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.PatternLayout

log4j.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.log

log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-4r[%t] %5p %c %x -%m - %X{userName}%n

log4j.rootLogger=debug, stdout,R
log4j.rootLogger=[Level], Appender1, Appender2

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender

log4j.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

发布了59 篇原创文章 · 获赞 20 · 访问量 13万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章