Spring回顾之四 —— 使用Log4j,添加日志功能

9 篇文章 0 订阅
2 篇文章 0 订阅
[size=medium] 在上几篇文章我们完成了项目创建,展示了对SpringMVC和MyBatis框架的集成,这里准备借添加日志模块的机会,回顾下Log4j相关的东西。[/size]

[b][size=large]第一步:回顾Log4j[/size][/b]
[size=medium] 谈到我们在Java程序中经常用的日志,Log4j应该是耳熟能详了。这里先提下slf4j,英文全名是Simple Logging Facade for Java,直面意思是:Java的简单日志门面。slf4j-api.jar,从这个名称的字面意思可以看出,就是为日志工具提供嵌入程序的接口;而slf4j-log4j12.jar可以理解成就是日志底层接口的实现,类似于中间件,一边对应底层的接口,一边可以根据偏好接入不同的日志系统。log4j.jar就是我们说的日志系统了,当然java有很多开源的日志系统,感兴趣的可以查一查,这里只说Log4j。[/size]

[b][size=large]第二步:引入依赖[/size][/b]
[size=medium] 打开pom文件,在dependencies里添加下面这部分代码[/size]

<!-- ============== log begin ============== -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- ============== log end ============== -->

[size=medium] 然后更新项目,同时会引入如下三个有依赖关系的jar包[/size]
[img]http://dl2.iteye.com/upload/attachment/0123/8419/13c7b0e8-1e4b-3b4f-b064-eefbfed4250e.jpg[/img]

[size=medium] 每个jar包的大致用途,上边已经讲了,接下来看看如何使用Log4j。[/size]

[b][size=large]第三步:如何使用Log4j[/size][/b]
[size=medium] Log4j本身支持两种文件的配置方式,一种是XML文件,一种是properties文件,这里我们只说properties的方式,先创建一个log4j.properties的文件,写入配置信息[/size]

### set log levels ###
log4j.rootLogger = INFO, console, debugFile, errorFile

### 输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
##这个不指定默认是System.out,指定输出控制台
log4j.appender.console.Target = System.out
##输出INFO级别以上的日志
log4j.appender.console.Threshold = INFO
##布局模式,自己灵活指定
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n

### 保存日志内容到具体文件 ###
##输出到每天一个独立文件
log4j.appender.debugFile = org.apache.log4j.DailyRollingFileAppender
##输出DEBUG级别以上的日志
log4j.appender.debugFile.Threshold = DEBUG
##异常日志文件路径,文件名称方案
log4j.appender.debugFile.File = D:/logs/log.log
log4j.appender.debugFile.DatePattern = '.'yyyy-MM-dd-HH
##设定信息是增加而不是覆盖
log4j.appender.debugFile.Append=true
#信息输出格式
log4j.appender.debugFile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugFile.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n

### 保存异常信息到具体文件 ###
##输出到每天一个独立文件
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender
##只输出ERROR级别以上的日志内容
log4j.appender.errorFile.Threshold = ERROR
##异常日志文件路径,文件名称方案
log4j.appender.errorFile.File = D:/logs/error.log
log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd-HH
##设定信息是增加而不是覆盖
log4j.appender.errorFile.Append=true
#信息输出格式
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n

[size=medium] 对于上边的代码,这里讲下Log4j简单的使用重点[/size]
[b][size=medium]1.配置根Logger[/size][/b]
og4j.rootLogger = [ level ] , console, debugFile, errorFile

[size=medium] level指的是日志记录的优先级,分为ALL、DEBUG、INFO、WARN、ERROR等或者自定义的级别,这个决定日志信息展示的信息颗粒密度和重要等级,如果后边没有做具体设置,这个将起到作用。console, debugFile等是设定日志信息输出策略的名字。[/size]
[b][size=medium]2.配置日志信息输出目的[/size][/b]
log4j.appender.console = org.apache.log4j.ConsoleAppender

[size=medium] 这个参数是用来配置日志信息输出在哪里,常用的有这几个[/size]
org.apache.log4j.ConsoleAppender(控制台显示)
org.apache.log4j.FileAppender(单一文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

[size=medium] 当然也可以通过邮件、连接数据库等方式进行输出,也可以进行自己定义,具体可以查下相关资料。[/size]
[b][size=medium]3.配置日志信息的布局[/size][/b]
log4j.appender.console.layout = org.apache.log4j.PatternLayout

[size=medium] 这个参数是用来设置采取什么布局样式,常用的有以下几种[/size]
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以自己指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

[size=medium] 我们一般都是采用PatternLayout的格式来自己定义日志信息格式。[/size]
[b][size=medium]4.输出格式设置[/size][/b]
log4j.appender.console.layout.ConversionPattern = [framework][%d{ABSOLUTE}-%l][%p]:%m %n

[size=medium] 这个类似于C语言的格式化打印的脚本信息,常用的几个如下[/size]
%m   输出代码中指定的消息(这个就是我们在代码中定义要打出的那部分)
%n 输出一个回车换行符(Windows平台为“\r\n”,Unix平台为“\n”)
%p 输出优先级(即DEBUG,INFO,WARN,ERROR,FATAL)
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%d 输出日志时间点的日期或时间(默认格式为ISO8601,也可以指定格式,如:%d{yyy MMM dd HH:mm:ss , SSS},或者直接%d{ABSOLUTE})
%l 输出日志事件的发生位置,包括类目名以及在代码中的行数。(如:test.demo.controller.TestSpringController.getUser(TestSpringController.java:40))

[size=medium] 类似不同的还有很多,就不一一列述。[/size]
[size=medium] 此外,还有要注意的是Appender选项的Threshold设定,是用来配置当前策略日志消息的输出最低层次的,还有一些选项,可以过后查查相关资料。[/size]
[size=medium] 日志的配置信息搞定了之后,我们接下来就在程序里添加几行代码,如下[/size]

package test.demo.controller;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import test.demo.dao.UserDAO;
import test.demo.data.User;

@Controller
public class TestSpringController {

private static final Logger logger = LoggerFactory.getLogger(TestSpringController.class);

@Resource
private UserDAO userDao;

@ResponseBody
@RequestMapping(value="/getUser/{userId}", method=RequestMethod.GET)
public String getUser(@PathVariable Integer userId) {
User user = userDao.getUserById(userId);
logger.info("这个用户的名字是:{},年龄是{}" , user.getName(), user.getAge());
logger.error("这个只是个测试:{}" , user.getName());
return user.getName() + " , Hello Controller!";
}

}

[size=medium] 我们为了突出效果,此处只留了我们所需的代码,OK,清理构建,打包部署,然后看看运行结果怎么样。[/size]

[b][size=large]第四步:运行结果[/size][/b]
[size=medium] 服务器启动之后,我们可以看到,日志系统开始工作了,部分截图如下[/size]
[img]http://dl2.iteye.com/upload/attachment/0123/8421/0669bc1b-60bb-3e9f-906a-34bda0c06d3f.jpg[/img]

[size=medium] 接着我们在浏览器输入:http://localhost:8080/demo/getUser/1、http://localhost:8080/demo/getUser/2,回车然后就可以在控制台看到以下内容[/size]
[framework][17:04:28,801-com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:785)][INFO]:{dataSource-1} inited 
[framework][17:04:28,972-test.demo.controller.TestSpringController.getUser(TestSpringController.java:27)][INFO]:这个用户的名字是:tom,年龄是2
[framework][17:04:28,972-test.demo.controller.TestSpringController.getUser(TestSpringController.java:28)][ERROR]:这个只是个测试:tom
[framework][17:04:44,446-test.demo.controller.TestSpringController.getUser(TestSpringController.java:27)][INFO]:这个用户的名字是:jerry,年龄是1
[framework][17:04:44,446-test.demo.controller.TestSpringController.getUser(TestSpringController.java:28)][ERROR]:这个只是个测试:jerry

[size=medium] 然后去D盘下的logs文件夹下,可看到这两个日志文件已经生成[/size]
[img]http://dl2.iteye.com/upload/attachment/0123/8423/d9dc1bcf-a1bb-3c45-8c8c-a178407e296a.jpg[/img]

[size=medium] 好了,到此为止,我们已经成功的在系统中添加了日志功能。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值