log4j入门采坑

我只是一个虾纸丫 提交于 2019-12-16 06:19:12

简介

日志的重要性不多说了,使用方法就是把log4j的jar包扔到项目里,然后在资源文件夹中添加一个log4j.properties的配置文件即可,下面直接说属性文件的配置,(刚入门,只学会了这一种配置方式)xml形式的配置省略了哈

log4j下载地址

maven依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

配置

​ 没接触log4j之前,我自己想象中的日志配置应该包含这些内容,1.日志存在哪儿,2.日志内容记录了什么。带着这样的疑问开始了入坑之旅 。其实我的猜测中少了一项,日志级别。专业点的说法log4j配置文件中主要包含了一下三点:

  1. 日志等级
  2. 日志的输出方式
  3. 日志的布局样式

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种布局方式

  1. org.apache.log4j.SimpleLayout 简单布局
  2. org.apache.log4j.PatternLayout 自定义布局
  3. org.apache.log4j.HTMLLayout HTML表格布局
  4. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!