Spring MVC代码实例系列-05:Spring MVC配置Log4j以及 log4j.properties 属性详解介绍

超级通道 :Spring MVC代码实例系列-绪论

本章主要讲解如何在Spring MVC中配置Log4j,并对log4j.properties 的属性进行介绍。

1.Spring MVC配置Log4j

1.1.pom.xml

    <log4j.version>1.2.17</log4j.version>

    <!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

1.2.log4j.properties

src\main\resources\log4j.properties

log4j.rootLogger=all, stdout, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:/Users/hanchao/IdeaProjects/hispringmvc/hi-spring-mvc.log
log4j.appender.file.MaxFileSize=5KB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.S} %-5p %c{1}:%L - %m%n

1.3.App.java

package pers.hanchao.hespringmvc.log4j;

import org.apache.log4j.Logger;

/**
 * <p>Log4j实例</p>
 * @author hanchao 2018/1/19 21:42
 **/
public class App {
    private static final Logger LOGGER = Logger.getLogger(App.class);

    public static void main(String[] args) {
        LOGGER.fatal("致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。");
        LOGGER.error("错误级别日志: 指出虽然发生错误事件,但仍然不影响系统的继续运行的信息。");
        LOGGER.warn("警告级别日志: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。");
        LOGGER.info("消息级别日志: 用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。");
        LOGGER.debug("调试级别日志: 开发人员可以将任意信息在此打印,比如局部变量的值等等,主要是为了了解程序运行状态,便于调试。");
        LOGGER.trace("跟踪级别日志: 一般不使用。");
    }
}

1.4.result

2018-01-19 21:43:32 FATAL App:13 - 致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。
2018-01-19 21:43:32 ERROR App:14 - 错误级别日志: 指出虽然发生错误事件,但仍然不影响系统的继续运行的信息。
2018-01-19 21:43:32 WARN  App:15 - 警告级别日志: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
2018-01-19 21:43:32 INFO  App:16 - 消息级别日志: 用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
2018-01-19 21:43:32 DEBUG App:17 - 调试级别日志: 开发人员可以将任意信息在此打印,比如局部变量的值等等,主要是为了了解程序运行状态,便于调试。
2018-01-19 21:43:32 TRACE App:18 - 跟踪级别日志: 一般不使用。

如果将src\main\resources\log4j.properties的第一行修改诚如下

log4j.rootLogger=info, stdout, file

则运行结果为:

2018-01-19 21:45:16 FATAL App:13 - 致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。
2018-01-19 21:45:16 ERROR App:14 - 错误级别日志: 指出虽然发生错误事件,但仍然不影响系统的继续运行的信息。
2018-01-19 21:45:16 WARN  App:15 - 警告级别日志: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
2018-01-19 21:45:16 INFO  App:16 - 消息级别日志: 用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。

2.log4j.properties详解

2.1.日志级别

  • 日志级别:all < debug < info < warning < error < fatal
  • 当前开启某一级别日志时,大于它的日志也将被开启
  • 常用的日志级别有 debug(开发环境) info(生产环境)

2.2.日志载体配置

  • 日志载体共有五种类型,分别是控制台、文件、以大小划分的日志文件、以时间划分的日志文件以及输出流。
  • 本例中定义了两种日志载体,分别为 stdout-控制台 和 file-以大小划分的日志文件
  • 日志载体的名称并不限定,例如,我将log4j.rootLogger=info, stdout, file修改为log4j.rootLogger=info, console, bigfile,也能实现同样的效果,只不过后面的配置也要做相应的调整。
  • 日志输出媒介数量至少有一种,可以有多种。

2.3.日志载体

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender

以上代码的作用是:将stdout设置为控制台日志载体,file设置为以大小划分的日志文件。
全部可用的日志载体类型有:
1. org.apache.log4j.WriterAppender : 输出流
2. org.apache.log4j.ConsoleAppender : 控制台
3. org.apache.log4j.FileAppender : 文件
4 org.apache.log4j.DailyRollingFileAppender : 以时间划分的日志文件
5. org.apache.log4j.RollingFileAppender : 以大小划分的日志文件

这些Appender都是AppenderSkeleton的子类,这些Appender的类图如下:
这里写图片描述

2.4.输出布局

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

以上代码的作用是:设置stdout的日志输出布局为
1. org.apache.log4j.SimpleLayout : 包含日志信息的级别和信息字符串
2. org.apache.log4j.TTCCLayout : 包含日志产生的方法、类路径等信息
3. org.apache.log4j.HTMLLayout : 以HTML代码模式布局
4. org.apache.log4j.PatternLayout : 自定义模式布局

2.4.1.SimpleLayout的运行结果
FATAL - 致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。
2.4.2.TTCCLayout的运行结果
[main] FATAL pers.hanchao.hespringmvc.log4j.App - 致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。
2.4.3.HTMLLayout的运行结果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Log4J Log Messages</title>
<style type="text/css">
<!--
body, table {font-family: arial,sans-serif; font-size: x-small;}
th {background: #336699; color: #FFFFFF; text-align: left;}
-->
</style>
</head>
<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
<hr size="1" noshade>
Log session start time Fri Jan 19 22:14:58 CST 2018<br>
<br>
<table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466" width="100%">
<tr>
<th>Time</th>
<th>Thread</th>
<th>Level</th>
<th>Category</th>
<th>Message</th>
</tr>

<tr>
<td>0</td>
<td title="main thread">main</td>
<td title="Level"><font color="#993300"><strong>FATAL</strong></font></td>
<td title="pers.hanchao.hespringmvc.log4j.App category">pers.hanchao.hespringmvc.log4j.App</td>
<td title="Message">致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。</td>
</tr>
2.4.4.PatternLayout的运行结果
2018-01-19 22:19:22 FATAL App:13 - 致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。

此布局需要注意在log4j.properties中添加ConversionPattern,如下:

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

ConversionPattern的常用参数如下:

  • %c 类的全名,如pers.hanchao.hespringmvc.log4j.App
  • %d 时间,如2018-01-19 22:23:29,899;可以通过{}指定格式,如%d{yyyy-MM-dd},输出为2018-01-19
  • %l 类路径(精确到行),如pers.hanchao.hespringmvc.log4j.App.main(App.java:13)
  • %m 即日志信息本身,如*致命级别日志: 指出每个严重的错误事件将会导致应用程序的退出。*
  • %n 回车换行
  • %p 打印当前日志的日志级别,如:LOGGER.fatal("致命错误");的日志级别为FATAL
  • %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  • %t 输出产生该日志事件的线程名,如main

2.5.AppenderSkeleton抽象日志媒介-配置项

  • layout : 布局,前面讲过
  • threshold : 指定日志消息的输出最低层次。如threshold = ERROR,日志输出的最低层次是ERROR

2.5.WriterAppender输出媒介-配置项

配置项:

  • encoding : 输出的编码格式,默认按照系统的默认编码格式输出
  • immediateFlush : 是否需要立刻记录,默认为true,表示每产生一条日志都立刻输出到日志媒介上。

2.6.ConsoleAppender控制台-配置项

继承关系:

public class ConsoleAppender extends WriterAppender {//...}

配置项:

  • target : 输出方式,可选System.outSystem.err,默认为System.out

2.7.FileAppender日志文件-配置项

继承关系:

public class FileAppender extends WriterAppender {//...}

配置项:

  • fileAppend : 是否追加
  • fileName : 日志文件全路径

2.8.RollingFileAppender以大小划分的日志文件-配置项

继承关系:

public class RollingFileAppender extends FileAppender {//...}

配置项:
- maxFileSize : 最大文件大小,默认为10485760L。允许通过使用KB,MB,或者GB来方便的指定文件的大小。
- maxBackupIndex : 设置备份文件能够存在的最大索引号。Log4J会把已经达到最大值的日志文件后缀名修改为1,2,3,4等,并重开log.log,用来作为最新日志记录文件。本例中maxBackupIndex = 10,则最多存在11个日志文件分别是*.log/*.log.1/*.log.2.../*.log.10

2.9.DailyRollingFileAppender以时间划分的日志文件-配置项

继承关系:

public class DailyRollingFileAppender extends FileAppender {//...}

配置项:
- datePattern : 多次时间产生一个新的日志文件。例如,默认为datePattern = '.'yyyy-MM-dd,即一天一个日志文件。

DatePattern的其他配置:

  • datePattern = '.'yyyy-MM monthly 每月产生一个日志文件
  • datePattern = '.'yyyy-ww weekly 每周产生一个日志文件
  • datePattern = '.'yyyy-MM-dd daily 每天产生一个日志文件
  • datePattern = '.'yyyy-MM-dd-a half-daily 每半天产生一个日志文件
  • datePattern = '.'yyyy-MM-dd-HH hourly 每小时产生一个日志文件
  • datePattern = '.'yyyy-MM-dd-HH-mm minutely 每分钟产生一个日志文件

2.10.各Appender的继承关系及配置项

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值