Log4j是个好东西,软件运行过程中输出日志都靠他啦。不过因为日常的开发工作,都是直接使用也没有怎么仔细研究过,所以现在好好研究研究。其实Log4j还是很简单的,常用的东西不是很多,配置文件理清楚就明白了。

Log4j由三个重要的组件构成:日志信息的级别(level),日志信息的输出目的地(Appender),日志信息的输出格式(Layout)。

日志信息的级别从高到低为:

  • off 最高等级,用于关闭所有日志记录。
  • fatal 指出每个严重的错误事件将会导致应用程序的退出。
  • error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
  • warm 表明会出现潜在的错误情形。
  • info 一般和在粗粒度级别上,强调应用程序的运行全程。
  • debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
  • all 最低等级,用于打开所有日志记录。
分别用来指定这条日志信息的重要程度;
日志信息的输出目的地指定了日志将打印到控制台还是文件中;
日志信息的输出格式则控制了日志信息的显示内容,是以什么样的格式输出的。
下面就来看看log4j是如何配置以及简单使用的。

一、log4j的配置格式

1、首先配置配置根Logger,格式为:
log4j.rootLogger = [level] , appenderName1, appenderName2,blablabla...

这里的level就是上文说的日志信息的级别,常用的是ERROR、WARN、INFO、DEBUG,是不区分大小写的。后面紧跟的appenderName则是日志输出目的地的Appender,Appender的名字是可以随便起的,只要在下面的配置中做对应的配置就好。
2、接下来要配置各个Appender,格式为:
log4j.appender.appenderName=【Appender日志信息输出目的地】

其中log4j提供的Appender有以下几种:
  • org.apache.log4j.ConsoleAppender(控制台),
  • org.apache.log4j.FileAppender(文件),
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置相应的Appender就会输出到对应的地方。
log4j.appender.appenderName.File=日志文件保存目录(如果是输出到控制台,就不用配置这一项了)
log4j.appender.appenderName.Append=true true表示日志信息增加到指定文件中,false则将日志信息覆盖指定的文件内容,默认值是true
log4j.appender.appenderName.Threshold=DEBUG 只输出DEBUG级别以上的日志 设置日志输出级别
log4j.appender.appenderName.layout=【Layout日志布局格式】

其中log4j提供的布局格式有以下几种:
  • org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.appenderName.layout.ConversionPattern=日志输出格式

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
  • %m 输出代码中指定的消息
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  • %r 输出自应用启动到输出该log信息耗费的毫秒数
  • %c 输出所属的类目,通常就是所在类的全名
  • %t 输出产生该日志事件的线程名
  • %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
  • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
  • %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
所以可以根据自己的需求配置自由搭配的输出格式,如:%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
一个很简单的配置:
log4j.properties
### 设置 ###
log4j.rootLogger=debug,stdout,DDD,EEE
### 输出信息到控制台 ###
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=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=/Users/tinybye/Documents/log4j/debug.log ###
log4j.appender.DDD=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DDD.File=/Users/tinybye/Documents/log4j/debug.log
log4j.appender.DDD.Append=true
log4j.appender.DDD.Threshold=DEBUG
log4j.appender.DDD.layout=org.apache.log4j.PatternLayout
log4j.appender.DDD.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=/Users/tinybye/Documents/log4j/error.log ###
log4j.appender.EEE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.EEE.File=/Users/tinybye/Documents/log4j/error.log
log4j.appender.EEE.Append=true
log4j.appender.EEE.Threshold=ERROR
log4j.appender.EEE.layout=org.apache.log4j.PatternLayout
log4j.appender.EEE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

二、使用log4j输出日志

首先要导入log4j的依赖包,新建一个测试类Log4jText.java。然后将配置文件log4j.properties放在和测试类相同的路径的resource文件夹下。如图所示:
Log4jText类代码如下:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;/*** Created by tinybye on 2017/3/14.*/
public class Log4jText {private static Logger logger = Logger.getLogger(Log4jText.class);public static void main(String[] args) {//获取log4j配置文件PropertyConfigurator.configure(ClassLoader.getSystemResource("resource/log4j.properties"));logger.error("ERROR!!!!!");//输出error级别的日志logger.debug("DEBUG~");//输出debug级别的日志}
}

==========分割线==========

其实这里的代码有些问题,logger应该是定义成为final的。原因有两个:

1.出于资源利用的考虑,Logger的构造方法参数是Class,决定了Logger是根据类的结构来进行区分日志,所以一个类只要一个Logger就可以了,故static
2.final表示一种编程习惯,表示该类的Logger只是记录该类的信息,否则日志会无法提供可以令人信服的记录。

参考地址:https://blog.csdn.net/phil_jing/article/details/52789655
——2018.4.8

==========分割线==========

运行后控制台输出日志如图所示:
输出日志:
在配置的路径下生成两个log日志文件,不同级别的日志信息输出到了对应的log日志文件中。
呐,就是一些很简单的东西,日常的使用中这些肯定是足够了的。如果想更多的了解log4j的内容,可以看看下面的参考文章。
参考文章:
http://www.codeceo.com/article/log4j-usage.html
http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html
http://blog.csdn.net/azheng270/article/details/2173430/

=========这里是分割线2017.08.26=========

三、整合Spring mvc

这几天在丰富自己的一个小项目,想着要把log4j集成到Spring mvc中,所以在这里简单的记述一下。
配置很简单,只要在web.xml文件中进行配置就好,配置如下:
    <!--log4j配置文件地址--><context-param><param-name>log4jConfigLocation</param-name><param-value>WEB-INF/classes/resource/config/log4j.properties</param-value></context-param><!--log4j监听--><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

Log4j配置使用的简单教程相关推荐

  1. linux 配置trac界面显示为中文,安装back|track 5 r3并配置中文界面简单教程

    最近更新:29th 4月, 2013 最近对bt比较感兴趣,看到不少朋友说,bt早都出10了11了我说我怎么就不知道. 官方网站打开一看,果然还是BT5,不过已经r3了. 听说现在BT5的支持已经很好 ...

  2. log4j 配置文件示例_Log4j2示例教程–配置,级别,附加程序

    log4j 配置文件示例 Welcome to the Apache Log4j2 Example Tutorial. If you ask an expert developer about the ...

  3. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  4. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  5. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 项目配置 ( Startup ) - ASP ...

  6. springMVC——SSM整合(IDEA 搭建简单 ssm 框架最详细最简单教程)

    为开发一个测试程序,特搭建一个简单的ssm框架,因为网上看到很多都是比较老旧的教程,很多包都不能用了,eclipes搭建并且其中还附带了很多的其他东西,所以特此记录一下mac中idea搭建过程. 以下 ...

  7. idea 从svn导入多个项目_IDEA导入项目简单教程

    该教程用于IDEA初学者导入eclipse项目,或者导入其他已经写好的Java源程序的简单教程. 我们用IDEA打开一个已经写好的项目源文件时,如果没有配置好,就会出现:JDK配置失误报错.程序无法启 ...

  8. 安装python程序后要进行什么设置-安装好Pycharm后如何配置Python解释器简易教程...

    这两天有许多Python小白加入学习群,并且问了许多关于Pycharm基本使用的问题,今天小编就以配置Python解释器的问题给大家简单絮叨一下. 1.一般来说,当我们启动Pycharm,如果Pych ...

  9. Git和Github简单教程

    网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章主要的目标是用较少的时间学习Git和Gi ...

  10. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

最新文章

  1. Redis为什么这么快?一文深入了解Redis内存模型!
  2. 从 Blast2GO 本地化聊一聊 Linux 下 MySQL 的源码安装
  3. python 画出决策边界_决策边界可视化,让你的分类合理有序
  4. 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论
  5. 【记录】ubuntu18.04 终端下No module named numpy No module name cv2
  6. Win7 64位下PowerDesigner连接64位Oracle11g数据库
  7. AcWing 831. KMP字符串(模板)
  8. MySql增加字段、删除字段、修改字段名称、修改字段类型
  9. 并查集+基础知识点详解
  10. 在存储器的层次结构里,谁最快,谁最贵,谁最大?
  11. SRL——无人机区域定位系统
  12. Android、iOS、和Web如何做灰度发布?
  13. SunOS与Solaris系统的对应关系
  14. Python学习笔记之爬虫
  15. 《Java就业培训教程》_张孝祥_书内源码_06
  16. 升级版DC/DC转换器有什么优点?
  17. 去掉小数点后多余的0
  18. Android中的保活机制
  19. Python切图九宫格
  20. 测试基础知识考试题目(答案)

热门文章

  1. Unity解析XML文件
  2. 华为防火墙ssl xxx配置
  3. levelDB源码阅读-skiplist跳表 上
  4. 如何在计算机安装WPS,windowsxp系统电脑怎样安装wps插件
  5. 紧固件基础知识之规格篇和功能篇
  6. jvm执行java大致采用过程_java练习题
  7. PDF如何编辑,怎么修改PDF中的文字
  8. 关于联想系列电脑windows10系统自定义锁屏壁纸被自动篡改的问题
  9. 模型汇总-14 多任务学习-Multitask Learning概述
  10. 使用Flask部署机器学习模型