简介
日志的重要性不多说了,使用方法就是把log4j的jar包扔到项目里,然后在资源文件夹中添加一个log4j.properties的配置文件即可,下面直接说属性文件的配置,(刚入门,只学会了这一种配置方式)xml形式的配置省略了哈
maven依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
配置
没接触log4j之前,我自己想象中的日志配置应该包含这些内容,1.日志存在哪儿,2.日志内容记录了什么。带着这样的疑问开始了入坑之旅 。其实我的猜测中少了一项,日志级别。专业点的说法log4j配置文件中主要包含了一下三点:
- 日志等级
- 日志的输出方式
- 日志的布局样式
1.日志等级
log4j.rootLogger
日志等级决定了项目中,日志信息的最低等级,【ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF】
配置时我们只使用其中的四个即可,【DEBUG INFO WARN ERROR】
当然了,一个配置文件可以多个附加方式输出跟在等级后面用 逗号 隔开
例:
log4j.rootLogger=INFO,A1,A2,B1
2.日志输出方式
log4j.appender.附加器名
然后配置 附加器,告诉附加器怎么输出,输出到哪,log4j提供了5种方式(我只测试了4种)如下:
# 输出到控制台 org.apache.log4j.ConsoleAppender
# 输出到文件 org.apache.log4j.FileAppender
# 输出到文件按日期 org.apache.log4j.DailyRollingFileAppender
# 输出到文件按大小 org.apache.log4j.RollingFileAppender
# 输出到流 org.apache.log4j.WriterAppender
例:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
配置了附加器的输出方式后配置其他的子属性
输出到控制台
ConsoleAppender
属性:
Threshold 最低日志等级,一定是大于根级别的,低于这个等级的日志不回在这里输出。
ImmediateFlush 是否立即刷新日志,框架默认都是true。
Target 目标方式,有两个值 System.out 和 System.err,默认是System.out
例:
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.ImmediateFlush=true
log4j.appender.A1.Target=System.err
输出到文件
FileAppender
属性:
Threshold 当前模块日志的最低等级
ImmediateFlush 是否立即刷新日志,默认为true
File 文件存放路径
Append 是否追加日志,默认为true
例:
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.ImmediateFlush=true
log4j.appender.A2.File=/logs/file.log
log4j.appender.A2.Append=true
输出到文件按日期
DailyRollingFileAppender
DailyRollingFileAppender继承了FileAppender,有一个自己的扩展属性
属性:
DatePattern 日期格式,写法格式参照SimpleDateFormat类,个人认为是在File属性后面加的后缀格式
例:
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.Threshold=INFO
log4j.appender.A3.ImmediateFlush=true
log4j.appender.A3.File=/logs/date.log
log4j.appender.A3.Append=true
log4j.appender.A3.DatePattern='.'yyyy-MM-dd_HH"
输出到文件按大小
RollingFileAppender
RollingFileAppender也继承自FileAppender,扩展了两个属性
属性:
MaxFileSize 最大文件大小,当日志文件记录到指定的大小时生成一个新的文件,单位可以是 KB MB,默认为10MB
MaxBackupIndex 最大备份数,最多保存日志文件的数量
例:
log4j.appender.A4=org.apache.log4j.RollingFileAppender
log4j.appender.A4.Threshold=INFO
log4j.appender.A4.ImmediateFlush=true
log4j.appender.A4.File=/logs/size.log
log4j.appender.A4.Append=true
log4j.appender.A4.MaxFileSize=100KB
log4j.appender.A4.MaxBackupIndex=3
输出到数据流
我不会[手动捂脸]
据说这种方式可以以流的形式发送到比如邮箱,短信等地方,功能很强大,
3.日志输出格式
log4j.appender.附加器.layout=布局方式
log4j.appender.附加器.layout.属性=格式
log4j提供了4种布局方式
- org.apache.log4j.SimpleLayout 简单布局
- org.apache.log4j.PatternLayout 自定义布局
- org.apache.log4j.HTMLLayout HTML表格布局
- org.apache.log4j.TTCCLayout 时间、线程、类别和嵌套布局
简单布局
太简单了,没有属性,我不知道它存在的意义是什么
例:
log4j.appender.A2.layout=org.apache.log4j.SimpleLayout
有兴趣的自己尝试一[捂脸]
自定义布局
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
这个在项目中经常使用
子属性:
ConversionPattern 自定义的格式
例:
log4j.appender.A4.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
说下各变量名代表的含义
%d 时间,后面可跟花括号自定义格式,参考SimpleDateFormat类。{yyyy-MM-dd HH:mm:ss,SS}
%p 日志级别,INFO ERROR等
%r 从应用启动到打印这条日志所消耗的时间,单位毫秒
%c 当前日志类的名称
%t 当前日志的线程
%l 当前日志的类名.方法名 和行号
%x 当前线程相关联的NDC(嵌套诊断环境)
%% 输出一个百分号
%F 当前类的文件名
%L 行号
%m 日志信息
%n 换行,根据操作系统不同输出 \n \r\n
HTML表格布局
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
属性:
LocationInfo 是否输出java类和行号信息,默认为false
Title 网页的标题
例:
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
log4j.appender.A2.layout.Title=info.log.html
TTCC布局
log4j.appender.A2.layout=org.apache.log4j.TTCCLayout
属性:
ThreadPrinting 是否输出线程信息,默认为true
CategoryPrefixing 是否输出类别信息,默认为true
ContextPrinting 是否输出上下文信息,默认为true
例:
log4j.appender.A2.layout=org.apache.log4j.TTCCLayout
log4j.appender.A2.layout.ThreadPrinting=true
log4j.appender.A2.layout.CategoryPrefixing=true
log4j.appender.A2.layout.ContextPrinting=true
结果是这样的
[main] INFO test1.HelloWorld - 这是一条日志
我的配置文件
最后附上我的配置文件
log4j.properties
# 日志等级 ERROR WARN INFO DEBUG
log4j.rootLogger=DEBUG,A1,A2,A3,A4
# 设a1为控制台,a2为文件,a3为日期,a4为大小
# 日志输出路径
# 输出到控制台 org.apache.log4j.ConsoleAppender
# 输出到文件 org.apache.log4j.FileAppender
# 输出到文件按日期 org.apache.log4j.DailyRollingFileAppender
# 输出到文件按大小 org.apache.log4j.RollingFileAppender
# 输出到流 org.apache.log4j.WriterAppender
# 控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.ImmediateFlush=true
log4j.appender.A1.Target=System.err
# 输出文件
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.ImmediateFlush=true
log4j.appender.A2.File=/logs/file.log
log4j.appender.A2.Append=true
# 输出到文件按日期
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.Threshold=INFO
log4j.appender.A3.ImmediateFlush=true
log4j.appender.A3.File=/logs/date.log.html
log4j.appender.A3.Append=true
log4j.appender.A3.DatePattern='.'yyyy-MM-dd_HH
# 输出到文件按大小
log4j.appender.A4=org.apache.log4j.RollingFileAppender
log4j.appender.A4.Threshold=INFO
log4j.appender.A4.ImmediateFlush=true
log4j.appender.A4.File=/logs/size.log
log4j.appender.A4.Append=true
log4j.appender.A4.MaxFileSize=100KB
log4j.appender.A4.MaxBackupIndex=3
# 日志输出格式
# 以HTML表格布局 org.apache.log4j.HTMLLayout
# 灵活的布局 org.apache.log4j.PatternLayout
# 简单的布局 org.apache.log4j.SimpleLayout
# 包含时间、线程、类别信息 org.apache.log4j.TTCCLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SS} %p %c\:%L - %m%n
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SS} %p %c\:%L - %m%n
log4j.appender.A3.layout=org.apache.log4j.HTMLLayout
log4j.appender.A3.layout.Title=infoLog
log4j.appender.A4.layout=org.apache.log4j.TTCCLayout
log4j.appender.A4.layout.ThreadPrinting=true
log4j.appender.A4.layout.CategoryPrefixing=true
log4j.appender.A4.layout.ContextPrinting=true
end
来源:CSDN
作者:Lumeir
链接:https://blog.csdn.net/Lumeir/article/details/103531326