Log4j 总结

学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!

另外,实例和内容有些是参照网络其他博文,如有侵权可联系删掉。

参考地址:https://blog.csdn.net/u011781521/article/details/55002553


目录

一、概念

二、为什么要使用Log4j

三、组成组件

四、日志级别

五、必须的包

六、配置文件

6.1 日志输出目的地

6.2 指定特定包的输出特定的级别

6.3 日志输出格式

6.4 打印参数

6.5 配置文件xml格式

6.6 配置文件property格式

七、使用

7.1 新建项目并导入jar包

7.2 src同级创建并设置log4j.properties

7.3 创建测试类

八、常用配置文件


一、概念

Log4j是什么?Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

二、为什么要使用Log4j

参考:https://www.cnblogs.com/godtrue/p/6442273.html

三、组成组件

Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。

  • Logger:        控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制
  • Appenders :   指定了日志将打印到控制台还是文件中
  • Layout :          控制日志信息的显示格式

四、日志级别

Log4j中将要输出的Log信息定义了几种级别,当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。

例如,如果使用了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。

  • off         最高等级,用于关闭所有日志记录。
  • fatal      指出每个严重的错误事件将会导致应用程序的退出。
  • error     指出虽然发生错误事件,但仍然不影响系统的继续运行。
  • warm    表明会出现潜在的错误情形。
  • info       一般和在粗粒度级别上,强调应用程序的运行全程。
  • debug   一般用于细粒度级别上,对调试应用程序非常有帮助。
  • all         最低等级,用于打开所有日志记录。

建议使用以下四种:DEBUG、INFO、WARN、ERROR

五、必须的包

  • log4j-1.2-api-2.11.1.jar

六、配置文件

6.1 日志输出目的地

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

6.2 指定特定包的输出特定的级别

可以特定输出很多其他框架的日志,这里列举一个

  • log4j.logger.org.springframework=DEBUG

6.3 日志输出格式

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

6.4 打印参数

  • %m 输出代码中指定的消息 
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
  • %r 输出自应用启动到输出该log信息耗费的毫秒数 
  • %c 输出所属的类目,通常就是所在类的全名 
  • %t 输出产生该日志事件的线程名 
  • %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
  • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式 
    • 如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},输出类似:2012年01月05日 22:10:28,921 
  • %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 
    • 如:Testlog.main(TestLog.java:10) 
  • %F 输出日志消息产生时所在的文件名称 
  • %L 输出代码中的行号 
  • %x 输出和当前线程相关联的NDC(嵌套诊断环境),像java servlets多客户多线程的应用中 
  • %% 输出一个"%"字符 

6.5 配置文件xml格式

有一点要注意,xml文件优先级要比properties文件优先级高。所以,如果两种日志方式同时存在,只有xml方式有用

log4j 2则已经弃用了properties这种方式,采用的是.xml,.json或者.jsn这种方式来做

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <!-- 日志输出到控制台 -->
  <appender name="C" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="INFO" />  
    <!-- 日志输出格式 -->
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n" />
    </layout>
  </appender>


  <!-- 输出日志到文件 -->
  <appender name="F" class="org.apache.log4j.FileAppender">
    <!-- 输出文件全路径名 -->
    <param name="File" value="/data/applogs/own/fileAppender.log" />
    <!--是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件 -->
    <param name="Append" value="false" />
    <!--过滤器设置输出的级别 -->
    <param name="Threshold" value="INFO" />
    <!-- 编码格式 -->
    <param name="Encoding" value="UTF-8" />
    <!-- 日志输出格式 -->
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n" />
    </layout>
  </appender>

  <!-- 选择上边定义的输出器 -->
  <logger name="logTest" additivity="false">
    <!-- 
    1. 指定logger的设置,additivity是否遵循缺省的继承机制 
    2. 当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制 
    3. 代码中使用Logger.getLogger("logTest")获得此输出器,且不会使用根输出器 
    -->
    <level value="INFO" />
    <appender-ref ref="C" />
    <appender-ref ref="F" />
  </logger>

  <!-- 根logger的设置,若代码中未找到指定的logger,则会根据继承机制,使用根logger -->
  <root>
    <appender-ref ref="C" />
    <appender-ref ref="F" />
  </root>

</log4j:configuration>

6.6 配置文件property格式

log4j.properties和上边的xml是等价的,就是格式不一样

# 定义rootLogger,格式是level,输出器名称1,输出器名称2,输出器名称3
# 可同时指定多个输出目的 
log4j.rootLogger = INFO,C,F 

# 设置控制台输出
log4j.appender.C = org.apache.log4j.ConsoleAppender  
# 默认值System.out,输出到控制台(err为红色,out为黑色) 
log4j.appender.stdout.Target = System.out  
# 定义日志级别
log4j.appender.C.Threshold = INFO   
# 定义输出类型
log4j.appender.C.layout = org.apache.log4j.PatternLayout
# 定义输出格式
log4j.appender.C.layout.ConversionPattern = [%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n

# 设置输出到文件
log4j.appender.F = org.apache.log4j.FileAppender
# 指定路径
log4j.appender.F.File = /data/applogs/own/fileAppender.log
# 定义是否追加
log4j.appender.F.Append = true  
# 日志编码
log4j.appender.F.Encoding = UTF-8
# 定义日志级别,输出这个级别及其以上的
log4j.appender.F.Threshold = DEBUG   
# 定义输出类型
log4j.appender.F.layout = org.apache.log4j.PatternLayout
# 定义输出格式
log4j.appender.F.layout.ConversionPattern = [%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n

七、使用

7.1 新建项目并导入jar包

7.2 src同级创建并设置log4j.properties

7.3 创建测试类

package com.mucfc;

import org.apache.log4j.Logger;

public class Test {
	private static Logger logger = Logger.getLogger(Test.class);

	public static void main(String[] args) {
		System.out.println("This is println message.");
		// 记录debug级别的信息
		logger.debug("This is debug message.");
		// 记录info级别的信息
		logger.info("This is info message.");
		// 记录error级别的信息
		logger.error("This is error message.");
	}

}

八、常用配置文件

# 定义输出器
# OFF(不打印日志)
# ALL(打印所有文件) 
# systemOut:输出到控制台
# logFile:输出到文件
# logDailyFile:按DatePattern输出到文件,一天一个文件
# logRollingFile:设定文件大小输出到文件,达到设定大小换一个文件
# logMail:日志输入到邮箱发送
# logDB:日志写到数据库表

log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB 
 
#输出到控制台 
log4j.appender.systemOut = org.apache.log4j.ConsoleAppender 
log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout 
log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.systemOut.Threshold = DEBUG 
log4j.appender.systemOut.ImmediateFlush = TRUE 
log4j.appender.systemOut.Target = System.out 
 
#输出到文件 
log4j.appender.logFile = org.apache.log4j.FileAppender 
log4j.appender.logFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logFile.Threshold = DEBUG 
log4j.appender.logFile.ImmediateFlush = TRUE 
log4j.appender.logFile.Append = TRUE 
log4j.appender.logFile.File = ../Struts2/WebRoot/log/File/log4j_Struts.log 
log4j.appender.logFile.Encoding = UTF-8 
 
#按DatePattern输出到文件 
log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logDailyFile.Threshold = DEBUG 
log4j.appender.logDailyFile.ImmediateFlush = TRUE 
log4j.appender.logDailyFile.Append = TRUE 
log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts 
log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' 
# '.'yyyy-ww:每周
# '.'yyyy-MM:每月 
# '.'yyyy-ww:每周 
# '.'yyyy-MM-dd:每天 
# '.'yyyy-MM-dd-a:每天两次 
# '.'yyyy-MM-dd-HH:每小时 
# '.'yyyy-MM-dd-HH-mm:每分钟
log4j.appender.logDailyFile.Encoding = UTF-8 
 
#设定文件大小输出到文件 
log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender 
log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
log4j.appender.logRollingFile.Threshold = DEBUG 
log4j.appender.logRollingFile.ImmediateFlush = TRUE 
log4j.appender.logRollingFile.Append = TRUE 
log4j.appender.logRollingFile.File = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.log 
log4j.appender.logRollingFile.MaxFileSize = 1MB 
log4j.appender.logRollingFile.MaxBackupIndex = 10 
log4j.appender.logRollingFile.Encoding = UTF-8 
 
#用Email发送日志 
log4j.appender.logMail = org.apache.log4j.net.SMTPAppender 
log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout 
log4j.appender.logMail.layout.LocationInfo = TRUE 
log4j.appender.logMail.layout.Title = Struts2 Mail LogFile 
log4j.appender.logMail.Threshold = DEBUG 
log4j.appender.logMail.SMTPDebug = FALSE 
log4j.appender.logMail.SMTPHost = SMTP.163.com 
log4j.appender.logMail.From = xly3000@163.com 
log4j.appender.logMail.To = xly3000@gmail.com 
#log4j.appender.logMail.Cc = xly3000@gmail.com 
#log4j.appender.logMail.Bcc = xly3000@gmail.com 
log4j.appender.logMail.SMTPUsername = xly3000 
log4j.appender.logMail.SMTPPassword = 1234567 
log4j.appender.logMail.Subject = Log4j Log Messages 
#log4j.appender.logMail.BufferSize = 1024 
#log4j.appender.logMail.SMTPAuth = TRUE 
 
#将日志登录到MySQL数据库 
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout 
log4j.appender.logDB.Driver = com.mysql.jdbc.Driver 
log4j.appender.logDB.URL = jdbc:mysql://127.0.0.1:3306/xly 
log4j.appender.logDB.User = root 
log4j.appender.logDB.Password = 123456 
log4j.appender.logDB.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值