Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
作者:13
GitHub:https://github.com/ZHENFENG13
版权声明:本文为原创文章,未经允许不得转载。
前言
上一篇文章主要讲述了一下syso和Log间的一些区别与比较,重点是在项目的日志功能上,因此,承接前文《[Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log](http://www.cnblogs.com/han-1034683568/p/6637914.html)》,本文是一个较为直观的日志功能案例,java的日志框架很多,如Log4j、Log4j2、logback、SLF4J,篇幅有限,所以本篇只介绍一下Log4j,并将其整合到项目中,对于其他日志框架,想了解的可以对应的去学习一下。
Log4j简介
日志记录功能是一个项目中重要的组成部分,log4j是APache下的一个开源日志组件,为java开发者提供了很大的便利。
Log4j由三个重要的组件构成:
- Loggers,日志信息的优先级
日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度,设置为高级别的优先级时,低优先级的日志将不会输出,比如将日志级别设置为INFO,则DEBUG级别的目录不会被记录,为了防止日志输出泛滥,最好不要将日志级别设置太低,一般为INFO即可。
- Appenders,日志信息的输出目的地
日志信息的输出目的地指定了日志将打印到控制台还是文件中,参数如下:
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件,本文中的案例选择的策略)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,也是一个不错的选择)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- Layouts,日志信息的输出格式
输出格式的功能是控制日志信息的显示内容,参数如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式,本案例所选择的策略,需对日志格式进行设置)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j简单demo
下面是一个简单的案例,并与System.out.print进行比较,代码在github上,可以下载自己运行一下。
日志输出:
import org.apache.log4j.Logger;
public class LogTest {
static Logger log = Logger.getLogger(LogTest.class);//获取日志记录器
public static void main(String... arg0) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
log.info("log输出" + i);
}
long time = System.currentTimeMillis() - start;
log.info("所用时间" + time);
}
}
syso输出:
public class SysoTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
System.out.println("syso打印" + i);
}
long time = System.currentTimeMillis() - start;
System.out.println("所用时间" +time);
}
}
Log4j配置文件如下:
log4j.rootLogger=DEBUG, debug
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=./logs/ssm-maven/debug.log
此配置文件为log4j-test.properties,也会上传到仓库中,注意:在测试本例时,需将此文件名改为log4j.properties
运行后可得到如下结果,在项目logs目录下创建了debug.log文件夹并将输出写入到文件中。

log4j整合并设置分包的日志策略
上面只是一个简单的demo,重要的还是要将日志功能集成到项目中来。
配置文件及讲解如下:
#log4j.rootLogger = [level],appenderName,appenderName2,...
#level是日志记录的优先级,分为OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL
##Log4j建议只使用四个级别,优先级从低到高分别是DEBUG,INFO,WARN,ERROR
#通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关
#比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来
log4j.rootLogger=DEBUG, debug
#Log4j针对不同包指定level:
#一般在生产环境中应用系统,日志级别调整为INFO以避免过多的输出日志。
#但某些时候,需要跟踪具体问题,那么就得打开DEBUG日志。
#但是如果打开log4j.rootLogger,则需要的信息就会淹没在日志的海洋中。
#此时,需要单独指定某个或者某些Logger的日志级别为DEBUG,而rootLogger保持INFO不变。
#参考配置如下(指定com.ssm.maven.core.admin类的日志输出)
#分包设置,admin与service包中的日志输出分离
log4j.logger.com.ssm.maven.core.admin=INFO,admin
log4j.logger.com.ssm.maven.core.service=INFO,service
log4j.logger.org.springframework=OFF
log4j.logger.org.mybatis.spring=ON
log4j.logger.org.springframework.context.annotation=OFF
log4j.appender.admin=org.apache.log4j.DailyRollingFileAppender
log4j.appender.admin.layout=org.apache.log4j.PatternLayout
log4j.appender.admin.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.admin.datePattern='.'yyyy-MM-dd
log4j.appender.admin.Threshold = INFO
log4j.appender.admin.append=true
#admin包下的日志输出到admin.log文件中
log4j.appender.admin.File=${catalina.home}/logs/ssm-maven/admin.log
log4j.appender.service=org.apache.log4j.DailyRollingFileAppender
log4j.appender.service.layout=org.apache.log4j.PatternLayout
log4j.appender.service.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.service.datePattern='.'yyyy-MM-dd
log4j.appender.service.Threshold = INFO
log4j.appender.service.append=true
#admin包下的日志输出到service.log文件中
log4j.appender.service.File=${catalina.home}/logs/ssm-maven/service.log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=${catalina.home}/logs/ssm-maven/debug.log
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
部署到tomcat服务器,并访问相关页面后,可以到tomcat目录的logs目录下查看日志输出文件:

查看日志文件,可以得到日志已经分包输出的结果。
结语
其实无论是System.out或者Log,我们都是希望快速的定位问题,至于更多的使用System.out而不是Log的原因,其实也多是因为觉得System.out更方便,或者不会用Log亦或者是觉得Log不够灵活,而通过本文中的案例,加上你自己的动手实践,应该可以让你对于Log4j技能从不会到会了,也能让你对于Log4j的灵活性有些认识了。
我的GitHub地址:https://github.com/ZHENFENG13/ssm-demo
其中ssm-maven是本次代码更新的目录。
ssm-maven项目的演示地址
Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合的更多相关文章
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇
优化篇 Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log Spring+SpringMVC+MyBatis+easyUI整合优化篇 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(十二)阶段总结
不知不觉,已经到了基础篇的收尾阶段了,看着前面的十几篇文章,真的有点不敢相信,自己竟然真的坚持了下来,虽然过程中也有过懒散和焦虑,不过结果还是自己所希望的,克服了很多的问题,将自己的作品展现出来,也发 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试>讲了不为和不能两个状态,针对不为,只能自己调整心态了,而对于不能,本文会结合一 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试
日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 整合Redis 本来以为类似的Redis教程和整合代码应该会很多,因 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(一)设计一套好的RESTful API
写在前面的话 看了一下博客目录,距离上次更新这个系列的博文已经有两个多月,并不是因为不想继续写博客,由于中间这段时间更新了几篇其他系列的文章就暂时停止了,如今已经讲述的差不多,也就继续抽时间更新< ...
随机推荐
- Arduino入门学习
一直听到许多做物联网.智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:) 废话少说,总结一下,便于以后可能会用得到.我主要 ...
- devexpress表格gridcontrol实现列统计,总计,平均,求和等。
1.在许多项目中,经常要实现对某些列的统计.devexpress控件gridcontrol实现这些功能只需要设置某些属性,就可以达到要求了.以下例举了一个统计班级总数,人数总计,分数总计的案例.效果图 ...
- JavaScript 基本类型值-Undefined、Null、Boolean
▓▓▓▓▓▓ 大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. ▓▓▓▓▓▓ Undefined ...
- Angular.js!(附:聊聊非原生框架项目)
最近,为了项目接触了一个很火的前端框架Angular.js,下面就Angular做一个简介吧(大牛请绕步,只针对没有接触过angular的人). Angular.js是一款精简的前端框架,如果要追溯它 ...
- 做了个新的UWP类库 Sharp2D
C#开发UWP的时候如果要实现高斯模糊效果的话,最好的选择似乎是微软的Win2D 但是Win2D太过庞大了,仅仅是庞大其实也没啥问题,毕竟net core就很庞大,但Win2d是一个Winmd组件 w ...
- TypeScript 优秀开源项目大合集
TypeScript出来有段时间了,也冒出了很多用TypeScript开发的优秀开源项目,搜寻了一些基于TypeScript项目,分享给大家: https://github.com/brookshi/ ...
- 极光推送助推视频App,打造最活跃手机新媒体平台
移动应用能够帮助吸引更多的新用户,增加用户互动和对话.但你得让用户想起你,如何在一部手机上数十个App中脱颖而出,是考验App运营的关键之处.为了打造一个成功的App,开发者需要着眼长远,不应局限于其 ...
- jquery考试纠错笔记.
1. 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div& ...
- Codevs2776 寻找代表元
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号 ...
- frameset标签设计页面
重要事项:不能将 <frameset></frameset> 标签放在<body></body> 标签里.且 HTML5 已经不支持 frameset ...