学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!
另外,实例和内容有些是参照网络其他博文,如有侵权可联系删掉。
参考地址: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守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
参考:https://www.cnblogs.com/godtrue/p/6442273.html
Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。
Log4j中将要输出的Log信息定义了几种级别,当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。
例如,如果使用了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。
建议使用以下四种:DEBUG、INFO、WARN、ERROR
可以特定输出很多其他框架的日志,这里列举一个
log4j.logger.org.springframework=DEBUG
有一点要注意,xml文件优先级要比properties文件优先级高。所以,如果两种日志方式同时存在,只有xml方式有用
log4j 2则已经弃用了properties这种方式,采用的是.xml,.json或者.jsn这种方式来做
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
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 = [email protected]
log4j.appender.logMail.To = [email protected]
#log4j.appender.logMail.Cc = [email protected]
#log4j.appender.logMail.Bcc = [email protected]
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')