问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

log4j怎么在springmvc中使用

发布网友 发布时间:2022-04-23 19:43

我来回答

2个回答

热心网友 时间:2022-04-14 13:51

先来聊聊 log4j



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的依赖包


<!-- Logging -->    
<dependency>    
    <groupId>org.slf4j</groupId>    
    <artifactId>slf4j-api</artifactId>    
    <version>1.6.6</version>    
</dependency>    
<dependency>    
    <groupId>org.slf4j</groupId>    
    <artifactId>jcl-over-slf4j</artifactId>    
    <version>1.6.6</version>    
    <scope>runtime</scope>    
    </dependency>    
<dependency>    
    <groupId>org.slf4j</groupId>    
    <artifactId>slf4j-log4j12</artifactId>    
    <version>1.6.6</version>    
    <scope>runtime</scope>    
</dependency>



2.在src/main/resources下创建log4j.xml


<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">  
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
  <!-- [控制台STDOUT] -->  
  <appender name="console" class="org.apache.log4j.ConsoleAppender">  
     <param name="encoding" value="GBK" />  
     <param name="target" value="System.out" />  
     <layout class="org.apache.log4j.PatternLayout">  
       <param name="ConversionPattern" value="%-5p %c{2} - %m%n" />  
     </layout>  
  </appender>  
  
  <!-- [公共Appender] -->  
  <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">  
     <param name="File" value="${webapp.root}/logs/common-default.log" />  
     <param name="Append" value="true" />  
     <param name="encoding" value="GBK" />  
     <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
     <layout class="org.apache.log4j.PatternLayout">  
    <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
     </layout>  
   </appender>  
  
   <!-- [错误日志APPENDER] -->  
   <appender name="ERROR-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">  
     <param name="File" value="${webapp.root}/logs/common-error.log" />  
     <param name="Append" value="true" />  
     <param name="encoding" value="GBK" />  
     <param name="threshold" value="error" />  
     <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
     <layout class="org.apache.log4j.PatternLayout">  
        <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
     </layout>  
   </appender>  
  
   <!-- [组件日志APPENDER] -->  
   <appender name="COMPONENT-APPENDER"  
class="org.apache.log4j.DailyRollingFileAppender">  
     <param name="File" value="${webapp.root}/logs/logistics-component.log" />  
     <param name="Append" value="true" />  
     <param name="encoding" value="GBK" />  
     <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />  
     <layout class="org.apache.log4j.PatternLayout">  
    <param name="ConversionPattern" value="%d %-5p %c{2} - %m%n" />  
     </layout>  
   </appender>  
  
   <!-- [组件日志] -->  
   <logger name="LOGISTICS-COMPONENT">  
      <level value="${loggingLevel}" />  
      <appender-ref ref="COMPONENT-APPENDER" />  
      <appender-ref ref="ERROR-APPENDER" />  
   </logger>  
  
   <!-- Root Logger -->  
   <root>  
       <level value="${rootLevel}"></level>  
       <appender-ref ref="DEFAULT-APPENDER" />  
       <appender-ref ref="ERROR-APPENDER" />  
   </root>  
</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("日志打印");

热心网友 时间:2022-04-14 15:09

  简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就
  可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。
  Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况。
  log4j使用方法
  下面介绍的是log4j一些理论方面的知识,读者觉得枯燥的话可以跳过本节直接阅读第三节实例部分。
  1、定义配置文件
  首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:
  ①配置根Logger,其语法为:0
  log4j.rootLogger = [ level ] , appenderName, appenderName, …
  其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中华新生活倍倍加重疾险(互联网)-智多星版值得推荐吗?注意哪些问题? 中华新生活倍倍加重疾险(互联网)-智多星版的优点和缺点是什么?保障内 ... 中华新生活倍倍加重疾险(互联网)-智多星版应该小心哪些陷阱? 中华新生活倍倍加重疾险(互联网)-智多星版有优点嘛? 中华新生活倍倍加重疾险(互联网)-智多星版怎么样?有什么优缺点? #儿时疑惑#真的有龙这个动物嘛? 12生肖就他现在没有哦 去俄罗斯旅游的饮食禁忌 去俄罗斯旅游怎么注意饮食 ...而正常写着3.6--6.1mmol/L,请问我是不是得了糖尿病了? ...得了糖尿病,请问对毕业有什么影响吗,再就是我可以得到保险吗(当然我... 250V2A 的美标电器,问题~~~ 这个咸菜是用什么青菜做的? log4j如何设置和使用多个记录器? 温江哪里有学编程的啊?小孩子学的那种! 如何在eclipse中使用log4j 如何使用Log4j 成都童程童美光华校区少儿编程怎么样?有孩子去学过的吗? 如何使用log4j记录日志 哪些菜适宜腌咸菜 请问java中,log4j如何使用 少儿编程学的是什么?程动未来少儿编程开设了哪些课程? log4j详细的使用方法,从导包开始, log4j的说明 成都哈罗沃德少儿编程怎么样啊?最近看到他们在新班开课,想去试试 咸菜是用什么菜做的? java 中 log4j 的概念、作用以及如何使用 想在成都青羊区找一个靠谱的少儿编程,有吗? 在你们那咸菜都是用什么蔬菜腌制出来的? 如何实现log4j日志邮件发送 成都哪家少儿编程机构比较靠谱?求推荐! 土豆出芽了还能吃吗? 潮州咸菜是什么菜做的? 关于log4j的一个问题 如何配置log4j 实现对增删改的记录 java log4j 这个是什么意思? log4j.properties 的作用是什么?求详解 log4J对于普通项目有用吗? 用log4j记录日志总是把前一天的冲掉 浅谈Log4j和Log4j2的区别 log4j配置之后报错如何解决? log4j配置文件的%m为什么输出的总是方法的名字 茅台小王子52度多少钱 国宴王子酒52度价格? 贵州国宴酒52度多少钱一瓶? 跨界小王子帝豪GSe周末摆拍大片 跨界小王子帝豪GSe周末摆拍大片 站在中国喝酒“鄙视链”顶端的山东人,到底有多能喝? 站在中国喝酒“鄙视链”顶端的山东人,到底有多能喝? 世纪金庄52°450mL贵州国宴酒多少钱一瓶? 世纪金庄52°450mL贵州国宴酒多少钱一瓶? 是不是被人举报了,就会显示出现异常