Spring mvc 中log4j的配置和使用

来源:互联网 发布:淘宝装修banner 编辑:程序博客网 时间:2024/06/06 00:26
原文地址:http://rockelixir.iteye.com/blog/1902352

下面附带lig4j的详细配置信息,仅作为参考:

Log4j简介

Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

1、Loggers

Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

2、Appenders

禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。

常使用的类如下:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置模式:
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1

log4j.appender.appenderName.OptionN = valueN

3、Layouts

有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常使用的类如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

配置模式:

log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1

log4j.appender.appenderName.layout.OptionN = valueN

 

一.参数意义说明
输出级别的种类
ERROR、WARN、INFO、DEBUG
ERROR 为严重错误 主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
控制台选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
FileAppender 选项
Threshold=DEBUF:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
RollingFileAppender 选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

配置日志信息输出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
1.org.apache.log4j.ConsoleAppender(控制台)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日志信息格式中几个符号所代表的含义:
-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。


如果使用spring插件创建一个spring template project,它会默认带log4j,只要改下log4j的配置就可以使用了,如果自己创建的project,就要加载下log4f的包了,使用步骤如下
1.pom.xml加入log4j的依赖包

Java代码  收藏代码
  1. <!-- Logging -->    
  2. <dependency>    
  3.     <groupId>org.slf4j</groupId>    
  4.     <artifactId>slf4j-api</artifactId>    
  5.     <version>1.6.6</version>    
  6. </dependency>    
  7. <dependency>    
  8.     <groupId>org.slf4j</groupId>    
  9.     <artifactId>jcl-over-slf4j</artifactId>    
  10.     <version>1.6.6</version>    
  11.     <scope>runtime</scope>    
  12.     </dependency>    
  13. <dependency>    
  14.     <groupId>org.slf4j</groupId>    
  15.     <artifactId>slf4j-log4j12</artifactId>    
  16.     <version>1.6.6</version>    
  17.     <scope>runtime</scope>    
  18. </dependency>    


2.在src/main/resources下创建log4j.xml
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">  
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
  4.   <!-- [控制台STDOUT] -->  
  5.   <appender name="console" class="org.apache.log4j.ConsoleAppender">  
  6.      <param name="encoding" value="GBK" />  
  7.      <param name="target" value="System.out" />  
  8.      <layout class="org.apache.log4j.PatternLayout">  
  9.        <param name="ConversionPattern" value="%-5p %c{2} - %m%n" />  
  10.      </layout>  
  11.   </appender>  
  12.   
  13.   <!-- [公共Appender] -->  
  14.   <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">  
  15.      <param name="File" value="${webapp.root}/logs/common-default.log" />  
  16.      <param name="Append" value="true" />  
  17.      <param name="encoding" value="GBK" />  
  18.      <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
  19.      <layout class="org.apache.log4j.PatternLayout">  
  20.     <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
  21.      </layout>  
  22.    </appender>  
  23.   
  24.    <!-- [错误日志APPENDER] -->  
  25.    <appender name="ERROR-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">  
  26.      <param name="File" value="${webapp.root}/logs/common-error.log" />  
  27.      <param name="Append" value="true" />  
  28.      <param name="encoding" value="GBK" />  
  29.      <param name="threshold" value="error" />  
  30.      <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
  31.      <layout class="org.apache.log4j.PatternLayout">  
  32.         <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
  33.      </layout>  
  34.    </appender>  
  35.   
  36.    <!-- [组件日志APPENDER] -->  
  37.    <appender name="COMPONENT-APPENDER"  
  38. class="org.apache.log4j.DailyRollingFileAppender">  
  39.      <param name="File" value="${webapp.root}/logs/logistics-component.log" />  
  40.      <param name="Append" value="true" />  
  41.      <param name="encoding" value="GBK" />  
  42.      <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
  43.      <layout class="org.apache.log4j.PatternLayout">  
  44.     <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
  45.      </layout>  
  46.    </appender>  
  47.   
  48.    <!-- [组件日志] -->  
  49.    <logger name="LOGISTICS-COMPONENT">  
  50.       <level value="${loggingLevel}" />  
  51.       <appender-ref ref="COMPONENT-APPENDER" />  
  52.       <appender-ref ref="ERROR-APPENDER" />  
  53.    </logger>  
  54.   
  55.    <!-- Root Logger -->  
  56.    <root>  
  57.        <level value="${rootLevel}"></level>  
  58.        <appender-ref ref="DEFAULT-APPENDER" />  
  59.        <appender-ref ref="ERROR-APPENDER" />  
  60.    </root>  
  61. </log4j:configuration>  

log4j.xml中定义了4个appender,就是log输出的位置,一个是控制台,三个是文件,但有一个文件common-error.log是专用于收集特殊错误的文件,可以定义多个分别为不同的场景使用,log4j的相关定义如下:
(1). 输出方式appender一般有5种: 
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)  
org.apache.log4j.ConsoleAppender (控制台)   
org.apache.log4j.FileAppender (文件)  
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)  
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)  
(2). 日记记录的优先级priority,优先级由高到低分为 
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。  
Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。  
(3). 格式说明layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):  
%c        输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)  
%d       输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}  
%l        输出日志事件发生位置,包括类目名、发生线程,在代码中的行数  
%n       换行符  
%m      输出代码指定信息,如info(“message”),输出message  
%p       输出优先级,即 FATAL ,ERROR 等  
%r        输出从启动到显示该log信息所耗费的毫秒数  
%t        输出产生该日志事件的线程名

3. web.xml中配置log4j
<!-- 配置加载log4j.xml文件路径 -->
<context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>classpath:config/log4j.xml</param-value>
</context-param>

<!-- 配置log4j.xml变量 -->
<context-param>
  <param-name>rootLevel</param-name>
  <param-value>DEBUG</param-value>
</context-param>

<context-param>
  <param-name>loggingLevel</param-name>
  <param-value>INFO</param-value>
</context-param>

<!-- 配置log4j.xml监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

4. 类使用log4j
(1)包引入
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
(2)日志常量定义
/** 组件日志 */
private static final Logger        logger = LoggerFactory                                            .getLogger(LoggerNames.LOGISTICS_COMPONENT);
(3)日志打印
logger.info("日志打印");

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星a8手机黑屏打不开怎么办 华为手机恢复出厂后黑屏怎么办 华为荣耀4c白屏怎么办 华为荣耀6手机信号不好怎么办 华为荣耀8手机音量小怎么办 无法激活触控id怎么办 魅蓝2卡顿怎么办 小米max2玩王者荣耀卡怎么办 小米4玩王者荣耀卡怎么办 华为荣耀7i卡顿怎么办 华为荣耀7卡的怎么办 荣耀8手机有孤独怎么办 红米note4玩游戏卡怎么办 红米note4x玩游戏卡怎么办 华为4c死屏怎么办 华为4c充电很慢怎么办? 华为4c突然死机了怎么办 华为畅玩4c内存不足怎么办 荣耀4c一直亮屏怎么办 华为手机返回键失灵怎么办 荣耀6p死机了怎么办 荣耀6主板烧坏了怎么办 虚拟运营商倒闭了号怎么办 买到二次放号怎么办 新运动鞋鞋穿着有点紧怎么办 一件代发被买家退货后怎么办? 洗了翻毛的鞋子怎么办 猫眼竹芋泡根了怎么办 双线花叶子卷了怎么办 华为云收藏满了怎么办 小米6云空间满了怎么办 华为云存储已满怎么办 苹果云备份空间不足怎么办 oppor9指纹与密码忘记怎么办 oppo显示密码格式不对怎么办 oppo云服务密码忘了怎么办 小米云内存满了怎么办 id储存空间满了怎么办 苹果手机邮箱服务器连接失败怎么办 苹果查看id闪退怎么办 域名卖出去后涉及赌博怎么办