文章标题
来源:互联网 发布:淘宝白底图片怎么拍 编辑:程序博客网 时间:2024/05/30 23:01
需要导入包:
log包:log4j-12.17.jar
第一步:web.xml配置
<!-- log4j配置,文件路径,因为是跟随项目启动 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value> </context-param> <!-- 配置log4j.xml变量,如果需要动态的就使用下面方式,使用方法${name} --> <context-param> <param-name>controller</param-name> <param-value>controller-log</param-value> </context-param> <context-param> <param-name>loggingLevel</param-name> <param-value>info</param-value> </context-param> <!-- 加载log4j配置文件 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
第二步log4j.xml配置
先讲解一下核心对象:
logger对象: Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。
Appender对象:下位层提供Appender对象。Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。
layout对象: 该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。
打个比方:logger是个情报站,负责收集他 所在地方(用name=”xxx包”指定)下的所有信息。appender是发送出去的方式,如写信(FileAppender)、电报(SMTPAppender)等多种。layout就是发送内容以什么格式书写,如自定义格式(PatternLayout),html(HTMLLayout)格式。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "http://toolkit.alibaba-inc.com/dtd/log4j/log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- ===================================================================== --> <!-- 以下是appender的定义,定义日志输出的目的地、输出方式及过滤级别 --> <!-- ===================================================================== --> <appender name="root-log" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="d://logs/log4j-study.log"/> <param name="append" value="true"/> <param name="encoding" value="GBK"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %l - %m%n"/> </layout> </appender> <appender name="info-log" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="d://logs/info.log"/> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <param name="append" value="true"/> <param name="encoding" value="GBK"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %m%n"/> </layout> </appender> <appender name="info-log-console" class="org.apache.log4j.ConsoleAppender"> <param name="encoding" value="GBK"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n"/> </layout> </appender> <!-- 过滤出我们想要的日志信息,实现按照日志等级把日志输出到不同地方的目的 --> <appender name="error-log" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="d://logs/error.log"/> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <param name="append" value="true"/> <param name="encoding" value="GBK"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %l - %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- ===================================================================== --> <!-- 日志写出器:每一个logger可以有多个输出目的地和输出方式 --> <!-- ===================================================================== --> <logger name="info-logger" additivity="false"> <level value="INFO"/> <appender-ref ref="info-log"/> <appender-ref ref="info-log-console"/> </logger> <logger name="error-logger" additivity="false"> <appender-ref ref="error-log"/> </logger> <!-- ===================================================================== --> <!-- Root logger 所有logger的基类,没有定义的logger将会使用root logger --> <!-- ===================================================================== --> <!-- <root> <level value="INFO"/> <appender-ref ref="root-log"/> </root> --></log4j:configuration>
controller中的代码:
Logger log2 = Logger.getLogger("error-logger");log2.error("带过滤功能的日志写出器,用于过滤error信息。。。");Logger log3 = Logger.getLogger("info-logger");log3.info("info信息。。。");
(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 输出产生该日志事件的线程名
og4j:configuration (root element)
xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间,取定值”http://jakarta.apache.org/log4j/”
appender [* child] : 一个appender子元素定义一个日志输出目的地
logger [* child] : 一个logger子元素定义一个日志写出器
root [? child] : root子元素定义了root logger
appender
appender元素定义一个日志输出目的地。
name [#REQUIRED attribute] : 定义appender的名字,以便被后文引用
class [#REQUIRED attribute] : 定义appender对象所属的类的全名
param [* child] : 创建appender对象时传递给类构造方法的参数
layout [? child] : 该appender使用的layout对象
layout
layout元素定义与某一个appender相联系的日志格式化器。
class [#REQUIRED attribute] : 定义layout对象所属的类的全名
param [* child] : 创建layout对象时传递给类构造方法的参数
logger
logger元素定义一个日志输出器。
name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用
additivity [#ENUM attribute] : 取值为”true”(默认)或者”false”,是否继承父logger的属性
level [? child] : 定义该logger的日志级别
appender-ref [* child] : 定义该logger的输出目的地
root
root元素定义根日志输出器root logger。
param [* child] : 创建root logger对象时传递给类构造方法的参数
level [? child] : 定义root logger的日志级别
appender-ref [* child] : 定义root logger的输出目的地
level
level元素定义logger对象的日志级别。
class [#IMPLIED attribute] : 定义level对象所属的类,默认情况下是”org.apache.log4j.Level类
value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为”all”、”debug”、”info”、”warn”、”error”、”fatal”和”off”。当值为”off”时表示没有任何日志信息被输出
param [* child] : 创建level对象时传递给类构造方法的参数
appender-ref
appender-ref元素引用一个appender元素的名字,为logger对象增加一个appender。
ref [#REQUIRED attribute] : 一个appender元素的名字的引用
appender-ref元素没有子元素
param
param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。
name and value [#REQUIRED attributes] : 提供参数的一组名值对
param元素没有子元素
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 为什么全新的Open Container Initiative标准是软件行业的里程碑?
- ios 跳转AppStore的两种方法,以及遇到的坑
- MVP设计模式
- CAS客户端请求重定向次数过多导致请求失败
- td文字太多撑开了table
- 文章标题
- 分布式协调服务zookeeper02-zookeeper核心工作机制以及api代码演示
- 禁用组合键
- Phpstrom 注册码
- Android Studio 清除项目无用资源
- NOIP基础算法与经典问题01 一维前缀和
- 正则表达式验证格式(ip地址验证)的简单使用.
- R中library(xlsx)出错
- Spark GraphX下强连通子图和社团发现算法在1T TPC-DS数据集下执行方法、优化和性能估算