log4j 简易教程

1. jar 包配置

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

2. 编写配置文件

可以有两种格式的配置文件,这里以 properties 文件为例

log4j 包含三个组件,分别是 Logger(记录器)、Appender(输出目的地)、Layout(日志布局)。可分别简单理解为"日志类别"、“日志要输出的地方"和"日志以何种形式输出”。

2.1 配置Logger记录器

log4j.rootLogger = [ level ] , appenderName, appenderName, …

log4j 级别:

  • ALL : 各级包括自定义级别 ;

  • TRACE : 指定细粒度比 DEBUG 更低的信息事件 ;

  • DEBUG : 调试级别 ;

  • INFO : 表明消息在粗粒度级别上突出强调应用程序是非常有帮助的 , 也就是输出一些提示信息 ;

  • WARN : 输出潜在的有可能出错的情形 , 也就是输出警告信息 ;

  • ERROR : 指出发生的不影响系统继续运行的错误信息 ;

  • FATAL : 指出严重的错误 , 这些错误将会导致系统终止运行 ;

  • OFF : 为最高级别 , 用于关闭所有日志信息的输出 ;

    扫描二维码关注公众号,回复: 12481083 查看本文章

核心规则 : log4j 只会输出级别大于或者等于指定级别的信息

log4j 建议使用四个级别,优先级从高到低分别是 ERRORWARNINFODEBUG

通过在这里定义的级别,你可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName 就是指日志输出的目的。你可以灵活地定义日志输出,也可以同时指定多个输出目的地。

log4j 配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。

2.2 配置Appender

2.2.1 配置 appender 的 class

log4j.appender.appenderName = fully.qualified.name.of.appender.class

appenderName 就是配置 rootLogger 时写的 appenderName

appender.class 提供以下几种

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置)

2.2.2 配置该 appender 的各种属性

 log4j.appender.appenderName.option = value

一般来说配置如下几个就行了

# 设置
log4j.rootLogger=debug,console,file

# 输出信息到控制抬
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

# 输出到文件
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/ice.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG 
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
  • Target

    默认值为 System.out , 输出到控制台 , 还可以取值 System.err , 当做错误信息输出 , 输出的信息全部为红色 ;

  • Threshold

    rootLogger 里配置 debug , 然后某个文件专门存储 error 以及更高级别的错误信息 , 那么就在这个配置这个文件的时候指定 Threshold 属性为 error

  • ImmediateFlush

    默认值是true , 意味着所有的消息都会被立即输出 , false则是不输出

  • File

    指定日志输出到指定位置 , 用的是相对于项目根目录的相对路径

  • File.Append

    默认值是true , 即将消息追加到指定文件中 , 如果取值为false , 则会覆盖之前的日志内容

  • MaxFileSize

    后缀可以是KB , MB , GB , 当日志文件的大小到达指定大小后 , 将会自动滚动 , 即将原来的内容移到 fileName.1 文件中 , 用记事本打开该文件即可看到原来的内容 , 改属性只能在 appender=org.apache.log4j.RollingFileAppender 时使用

  • MaxBackupIndex

    指定可以产生滚动文件的最大数量 , 与 RollingFileAppenderMaxFileSize 属性一起使用 , 当 MaxBackupIndex=n 的时候 , 最大日志存在数量为 n+1 , 即 log.txt , log.txt.1 , … , log.txt.n , 当在服务器上运行的时候 , 如果对日志数量没有限制 , 那么随之时间的推移 , 日志文件会越来越多 , 占用的内存也将越来越多 , 直到占满整个盘

  • DatePattern

    该属性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 时使用 , DailyRollingFileAppender 默认的频度是每天产生一个日志记录文件 , 可以在DatePattern属性值中指定其他的频度 , 常用的几个频度如下 :

    • ’.'yyyy-MM : 每月产生一个日志记录文件
    • ’.'yyyy-ww : 每周产生一个日志记录文件
    • ’.'yyyy-MM-dd : 每天产生一个日志记录文件
    • ’.'yyyy-MM-dd-a : 每半天产生一个日志记录文件
    • ’.'yyyy-MM-dd-HH : 每小时产生一个日志记录文件
    • ’.'yyyy-MM-dd-HH-mm : 每分钟产生一个日志记录文件

    该属性指定值之后 , 将会按照指定的频度来生成日志记录文件 , 假设指定生成一个名为 log.txt 的文件 , 频度指定为每分钟产生一个日志记录文件 , 当达到指定频度后 , 会将log.txt文件中记录的之前的日志记录 , 重新写入一个名为 log.txt.yyyy-MM-dd-HH-mm的文件中 , 而此时 log.txt 文件中存放的是新生成的日志信息 , 该过程循环往复

  • layout

    log4j中提供的layout有以下几种 :

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

2.2.3 ConversionPattern 格式说明

假设当前 java 文件名为 Test , 所在包名为log4j

  • %p:日志优先级,如 DEBUG、INFO 等

  • %c:显示当前 logger 空间全称 , 例如 log4j.Test
    %c{层数}:最内层的java文件为第一层 , 例如 : %c{1} , 显示为Test , 当层数大于实际存在的最大层数时 , 显示最大实际存在层数

  • %10c:若名字空间长度小于10 , 则在左边将欠缺的长度用空格补齐 , 该种情况为默认的右对齐方式

    %-10c:若名字空间长度小于10 , 则在右边将欠缺的长度用空格补齐 , 该种情况为默认的左对齐方式

  • %.3c: 从空间名最右边开始显示指定的长度 , 超出该长度的部分将被截取

  • %10.15c : 若空间名长度小于10 , 则左边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取

    %-10.15c : 若空间名长度小于10 , 则右边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取

  • %d : 显示日志记录时间 , 默认时间格式为 ISO8601 定义的日期格式

    %d{yyyy-MM-dd HH:mm:ss} : 按照指定的时间格式显示日期

  • %F : 显示调用logger的源文件名 , 例如 : Test.java

  • %l : 输出日志事件的发生位置 , 包括类目名 , 发生的线程 , 以及在代码中的行数 , 例如 : log4j.log4jTest.main(log4jTest.java:40)

  • %m : 显示输出消息

  • %n:换行

  • %M : 显示调用 logger 的方法名

  • %r : 显示从程序启动时到记录该条日志时已经经过的时间 , 单位毫秒

  • %t: 显示产生该日志条目的线程名

  • %x : 按NDC(Nested Diagnostic Context , 线程堆栈) : 顺序输出日志

    %X: 按MDC(Mapped Diagnostic Context , 线程映射表)输出日志 , 通常用于多个客户端连接同一个服务器 , 方便服务器区分是哪个客户端访问留下来的日志

  • %% : 显示一个百分号

2.2.4 LevelRangeFilter(分级过滤器)

如果想要实现不同级别的日志分别输出到不同的位置 , 可以在properties配置文件中加入如下语句进行限制 , 例如

log4j.appender.appenderName.Threshold=debug
log4j.appender.appenderName.filter.filterName=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.appenderName.filter.filterName.LevelMin=debug
log4j.appender.appenderName.filter.filterName.LevelMax=debug

将最低输出级别 LevelMin 和最高输出级别 LevelMax 都设置为 debug , 那么就只能输出 debug 级别的日志信息了

猜你喜欢

转载自blog.csdn.net/dreaming_coder/article/details/112008096
今日推荐