文档章节

Spring 配置log4j和简单介绍Log4J的使用

黑帽子
 黑帽子
发布于 2013/07/12 11:37
字数 1767
阅读 22015
收藏 21
点赞 3
评论 2

Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事 件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

     如此强大的优越性,实际上手并不难,尤其在spring框架下,使用log4j更是容易,下面介绍一下spring下的log4j应用。

    当然先要下载相应的jar包(log4j.jar)

首先是web.xml的配置,在web.xml中加入如下配置

   <context-param>    
      <param-name>     log4jConfigLocation</param-name>    
      <param-value>/WEB-INF/props/log4j.properties</param-value>    
   </context-param>    
   <context-param>    
      <param-name>     log4jRefreshInterval</param-name>    
      <param-value>6000</param-value>    
   </context-param>


    <listener>
      <listener-class>
         org.springframework.web.util.Log4jConfigListener
      </listener-class>
   </listener>


说明: 在上文的配置里,在上文的配置里,Log4jConfigListener会去WEB- INF/props/log4j.propeties 读取配置文件;开一条watchdog线程每60秒扫描一下配置文件的变化(这样在web服务启动后再去修改配置文件也不用重新启动web服务了);并把 web目录的路径压入一个叫webapp.root的系统变量(webapp.root将在log4j.properties文件中使用)。

接下来是log4j.properties配置文件了,把它放在WEB-INF/props下,具体配置如下:

#log4j.rootLogger = [ level ] , appenderName, appenderName, ...
log4j.rootLogger = INFO, console, R
#level=INFO,all can be output
#console is set to be a ConsoleAppender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#console have four patterns
#org.apache.log4j.HTMLLayout
#org.apache.log4j.PatternLayout
#org.apache.log4j.SimpleLayout
#org.apache.log4j.TTCCLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#define the output type
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#file is set to output to a extra file
log4j.appender.R = org.apache.log4j.RollingFileAppender
#the absolute route of the log4j file
log4j.appender.R.File = /log.txt
#the size
log4j.appender.R.MaxFileSize = 500KB
#back up a file
log4j.appender.R.MaxBackupIndex = 1
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

上面的配置文件说明log信息将以两种方式输出(文件和控制台),表示应用的根目录下(例如本应用名称为ABC,则log.txt的位置为tomact\webapp\ABC下)

最后在程序中想要输出log的地方加入log4j的支持

(1)引入   import org.apache.log4j.Logger

(2)声明一个logger

private static Logger logger = Logger.getLogger(ClassName.class);

(3)在程序中的相应位置加入输出信息

logger.info("用户登录:"+user.getAccount());

ok,完成了,当有登录时会在控制台和文件中同时输出log信息如下

2007-01-10 16:02:54 [com.my.web.UserAction]-[INFO] 用户登录:yangsq

ps:


作为一个流行的日志记录工具,Log4j是java开源项目中最闪亮的环节之一。究其原因,有以下几点: 

a)Log4j受大多数web应用服务器的拥护:以我目前所知,tomcat,weblogic,websphere,jboss都支持log4j。 

b)快速,功能强大:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。在速度上,从log4j一开始出现,注重运行的速度就一直放在首位,并且坚持不懈地进行着改进和完善。 

c)使用简单、方便:只需要导入一个简单的log4j-1.2.x.jar,然后在程序类的开头写上下面一句private final static Logger log =Logger.getLogger(ClassName.class); 

这样你就得到了一个日志对象log,可以轻松往特定目标写日志了。 

为什么需要Log4j?---项目的调试是log4j产生的内在驱动力 

原始的方法是:把信息输出到屏幕(console),利用JDK提供的System.out.println。但是,这样做的坏处是显而易见的: 

a)信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println显得很原始。 

b)如果要改变输出的内容和格式,需要重新编译源程序。 

c)更严重的是,如果程序中有很多的println,会严重的影响程序的性能。 

Log4j使用的几个关键点? 

根记录器(rootLogger),输出端(appenders)和布局(layouts) 

a)定义根记录器的格式为 

log4j.rootLogger = [ level ], appendName1, appendName2, …appendNameN。同一个记录器可有多个输出端。 

PS:level的级别(此级别可以自定义,系统默认提供了以下级别) 

◆debug//调试信息 

◆info//一般信息 

◆warn//警告信息 

◆error//错误信息 

◆fatal//致命错误信息 

上面列出的就是所谓log4j的输出级别,log4j建议只使用4个级别,它们从上到下分别为ERROR、WARN、INFO、DEBUG,假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。 

b)定义一个appender的输出目的地的格式为 

log4j.appender.appenderName = fully.qualified.name.of.appender.class。log4j提供了以下几种常用的输出目的地: 

◆org.apache.log4j.ConsoleAppender,将日志信息输出到控制台 

◆org.apache.log4j.FileAppender,将日志信息输出到一个文件 

◆org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件 

◆org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为 example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为 example.log.2,同时产生一个example.log文件。依此类推,直到example.log. MaxBackupIndex, MaxBackupIndex的值可在配置文件中定义。 

◆org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。 

◆org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。 

c)输出格式(布局)layout 

Log4j提供了一下几种布局: 

◆org.apache.log4j.HTMLLayout,以HTML表格形式布局 

◆org.apache.log4j.PatternLayout,可以灵活地指定布局模式 

◆org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串 

定义一个PatternLayout布局的语句为: 

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

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n 

PS:ConversionPattern参数的格式含义 

%c 输出日志信息所属的类的全名 

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 

%f 输出日志信息所属的类的类名 

%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 

%m 输出代码中指定的信息,如log(message)中的message 

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 

%r 输出自应用启动到输出该日志信息所耗费的毫秒数 

%t 输出产生该日志事件的线程名 

log4j的配置文件:log4j.properties 

一个log4j.properties文件示例 

log4j.rootLogger=INFO, stdout, logfile

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

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

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=/webserver/specialTraining3/wangzj.log

log4j.appender.logfile.MaxFileSize=51200KB

log4j.appender.logfile.MaxBackupIndex=3

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

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n 


© 著作权归作者所有

共有 人打赏支持
黑帽子
粉丝 16
博文 53
码字总数 25680
作品 0
珠海
高级程序员
加载中

评论(2)

f
ftyellow
学习了,谢谢
L
LouisHunt
受教了。谢谢。
Spring MVC-集成(Integration)-集成LOG4J示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm 说明:示例基于Spring MVC 4.1.6。 以下示例说明如何使用Spring Web MVC框架来触发LOG4J。首先,让我们使用...

easonjim ⋅ 2017/09/10 ⋅ 0

Java混乱的日志体系(logback)(转)

作为一名 Java 程序员,日常开发工作中肯定会接触日志系统,但是众多的框架,包括 Log4j、Log4j2、Logback、Slf4j、Apache Common logging 等等,引用的 maven 依赖众多,到底可以去掉哪些,...

easonjim ⋅ 2017/12/27 ⋅ 0

java 日志框架——log4j

Log4J是JAVA下的一款日志组件 下载: http://logging.apache.org/log4j/2.x/download.html 下面的示例我使用最新版本2.7无法正常运行,最新版本使用方法可能不同。本文示例使用log4j-1.2.15测...

xundh ⋅ 05/09 ⋅ 0

MyBatis3错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决

在使用Maven新建QuitStart类型项目时,引入了MyBatis3.2.0版本的JAR包之后,出现如下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority Cause......

easonjim ⋅ 2017/06/19 ⋅ 0

使用代码形式配置Log4J日志框架

一、使用代码形式配置Log4J日志框架 一般情况下,我们都是使用配置文件形式来配置Log4J日志框架,比如使用“log4j.properties”文件。但有些时候,我们只是想简单快速使用Log4J日志框架,配置...

郭恩洲_OSC博客 ⋅ 05/28 ⋅ 0

Log4j 2.0在开发中的高级使用详解

log4j与slf4j、logback比较 而log4j slf4j logback就是目前主流的日志框架。但后两者效率高是第一个。推荐使用:slf4j 或者 logback(spring-boot默认日志实现) log4j是apache实现的一个开源日...

spinachgit ⋅ 04/22 ⋅ 0

SpringBoot笔记(六)日志

SpringBoot默认使用作为日志记录。 同时也对包的和做了默认配置 默认配置 Spring Boot默认使用Logback来记录日志,并用INFO级别输出到控制台 默认输出元素: 时间日期:精确到毫秒 日志级别:...

世外大帝 ⋅ 04/25 ⋅ 0

Spring Boot中Starter是什么

比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依赖。 经过研究,Start...

easonjim ⋅ 2017/09/30 ⋅ 0

自定义log4j2配置文件地址

默认情况下,只要把log4j配置文件放在 CLASSPATH 环境变量所指定的目录, JAVA 启动时会制动加载。实际项目中经常需要把配置文件与打包分离,方便修改,所以需要自定义配置文件加载地址。 Sp...

如风达 ⋅ 04/20 ⋅ 0

Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)

说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档。 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块...

easonjim ⋅ 2017/11/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 31分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 51分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部