最近参与公司的一个新项目,前期负责日志模块的工作,包括日志收集,日志输出(文件,数据库),日志管理, 由于之前只是在代码中简单的使用了log4j的Logger对象进行日志打印的编码工作,但对于如果使用log4j来搭建一个完整的日志模块的工作没有什么经验,所以自己就花了点时间来熟悉这方面的工作,总体来讲不是很难,因为网上这方面的资料很多,只是有些零散,所以我在这里就将我自己工作中如何使用log4j的心得做下总结,希望对大家有所帮助,有不当之处还请各位“大虾”多指点,谢谢!!!。
总结如下三点:
一:log4j配置文件说明
二:Web应用系统中log4j的初始化
三:Web应用系统动态加载修改的log4j配置文件
现在主要对上述三点运用进行说明:
一:log4j的基本配置说明
Log4j提供两种方式的配置文件,XML文件和properties属性文件,下面我以properties格式的配置文件为例进行说明。
1:定义一个Logger。在定义Logger的时指定该Logger的级别及输出目的地(即输出端Appender, 可以多个)。 定义Logger的格式如下:
log4j.rootLogger=loggerLevel, appenderName1, appenderName2, ….appenderNameN
例: log4j.rootLogger=DEBUG, A1, A2, A3
该Logger的日志输出级别为DEBUG( 日志级别还包括有:INFO, WARN, ERROR ),同时定义三个输出端Appender:A1,A2,A3
2:定义Appender的输出目的地。 定义一个Appender的输出目的地的格式如下:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j提供的输出端有:(前缀为org.apache.log4j.)
ConsoleAppender: 将日志信息输出到控制台
FileAppender: 将日志信息输出到一个文件
WriterAppender: 将日志信息以流格式发送到任意指定的地方
JDBCAppender: 通过JDBC把日志信息输出到数据库中(参考下面实例)
DailyRollingFileAppender: 将日志信息输出到一个文件,并且每天输出到一个新的日志文件中
RollingFileAppender:将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名(参考下面实例)
3:定义Appender的布局模式。定义一个Appender的布局模式的格式如下:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
Log4j提供的布局模式有以下几种:
org.apache.log4j.HTMLLayout, 以HTML表格形式布局
org.apache.log4j.PatternLayout,可以灵活地指定布局模式
org.apache.log4j.SimpleLayout, 包含日志信息的级别和信息字符串
4:指定输出信息的输出格式及其含义如下:
%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。
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
在这里我提供简单的log4j的配置文件,如下:
log4j.rootLogger=DEBUG, A1, A2, A3
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.lay.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %l - %m%n
#定义A2输出到文件
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
#定义A2要输出到哪一个文件
log4j.appender.A2.File = D:\\work\\workspace_study\\testPaserXML_Project\\example.log
#定义A2的输出文件的最大长度
log4j.appender.A2.MaxFileSize = 1024KB
#定义A2的备份文件数
log4j.appender.A2.MaxBackupIndex = 3
#定义A2的布局模式为PatternLayout
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
#定义A2的输出格式
log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %l - %m%n
#定义A3输出到数据库
log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
#定义A3日志信息数的缓存大小,当有10条日志记录时才一次性输出到数据库
log4j.appender.A3.BufferSize = 10
#定义A3与数据库的连接信息
log4j.appender.A3.Driver = oracle.jdbc.driver.OracleDriver
log4j.appender.A3.URL = jdbc:oracle:thin:@127.0.0.1:1521:myoracle
log4j.appender.A3.User = system
log4j.appender.A3.Password = root
#定义A3的布局模式
log4j.appender.A3.layout = org.apache.log4j.PatternLayout
#定义A3的日志信息输出到具体的数据库表 ( 数据库中必须存在该结构的表 )
log4j.appender.A3.sql = insert into mylogdb(logid, logtime, loglevel, logthread, logaddress, logmsg) values(mylogsequence.nextval, to_date('%d{yyyy-MM-dd hh:mm:ss}', 'yyyy-MM-dd hh24:mi:ss'), '%p', '%t', '%l', '%m')
二:Web应用系统中log4j的初始化
Log4j需要进行初始化才可以使用,但不可能在每次调用logger时都进行初始化的工作,所以在Web应用系统中我可以把log4j的初始化工作放到servlet中从而独立出来,而该servlet我们只需在Web应该系统中的web.xml进行配置,让log4j在系统启动时就进行初始化工作,这样我们就可以在任何地方都可以调用logger进行日志输出了。
该servlet的实例如下:
public class Log4jInit extends HttpServlet {
private static Logger logger = Logger.getLogger(Log4jInit.class.getName());
public void init(){
String file = getInitParameter("log4j-init-file");
if(file != null){
PropertyConfigurator.configure(file);
}
testDebug();
testInfo();
testWarning();
testError();
}
public static void testDebug(){
logger.debug("testDebug...");
}
public static void testInfo(){
logger.info("testInfo...");
}
public static void testWarning(){
logger.warn("testWarn...");
}
public static void testError(){
logger.error("testError...");
}
}
Web.xml的配置部分如下:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>clou.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name> <param-value>D:/work/workspace_study/testIbatis/WebRoot/WEB-INF/log4j.properties</param-value>
</init-param>
<!-- 因为log4j初始化要在所有调用log4j之前完成,为了让该servlet先启动执行,所以这里设为1-->
<load-on-startup>1</load-on-startup>
</servlet>
三:Web应用系统动态加载修改的log4j配置文件
因为我是个小菜,依我的理解是在web应该系统中,一旦修改了配置文件,需要重新启动该系统服务才能使修改后的配置文件生效,但现实中我们的应用系统一旦正常投入使用就不可能随便重启服务,那我们修改了log4j的配置信息又怎么让它生效呢,于是我查阅了资料,采用了Spring中提供的log4j监听器,可以很好的解决这个问题。 我相信肯定还有很多其他方法可以解决该问题,大家也可以拿出来交流。
采用Spring提供的log4j监听器,我们只需在web.xml上配置相关信息就可以实现了,而不需要做其他工作,是不是很简单,呵呵。 具体如下:
<!--由Sprng载入的Log4j配置文件位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
<!--在这里定位配置文件,需要的是从root开始的绝对路径-->
</context-param>
<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<!--Spring log4j 监听器-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
分享到:
相关推荐
log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记
maven+Springmvc+spring+mybatis+log4j的Demo,企业级三层架构。eclipse项目源代码。个人学习总结。
通过自己学习和在工作中的总结以及在网上查找相关资料,总结了这个文档,希望对大家有帮助
Java关于log日志组件的详细说明及应用,通过本文档的学习,不仅可以对Java日志组件有更加深一层的认识,还能是自己的只是上一个台阶
顺便亲手搭了个ssh框架,至于log4j则是每个项目都必要的东西,因此顺便加了进去。最近几天会将环境搭建的手册以及建议上传上来。以便需要的朋友们参考;希望大家自己将框架由于学习就好,请不要用于商业传播。谢谢...
WED工作原理、HTTP协议、Servlet、GET和POST提交方式的优缺点、MVC设计、连接池、JNDI、自定义异常、Log4j、EL 和 JSTL、Wed service
---11-log4j2的配置与日志发展历程总结.mp4 ---12-日志组件配置概述.mp4 ---13-jul配置文件与级别.mp4 ---14-jul打印级别与其他配置项.mp4 ---15-log4j配置文件与配置项.mp4 ---16-log4j的appender及pattern格式.mp4...
---11-log4j2的配置与日志发展历程总结.mp4 ---12-日志组件配置概述.mp4 ---13-jul配置文件与级别.mp4 ---14-jul打印级别与其他配置项.mp4 ---15-log4j配置文件与配置项.mp4 ---16-log4j的appender及pattern格式.mp4...
4. JPivot标签库使用详解 4.1. Introduce JPivot 是一套基于 Mondrian 的 OLAP 前端展现工具,它提供了一套标签库来解决的 OLAP 的展现层问题。 在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的...
Struts标签Lucene中文分词构建基于词典的Lucene分析器使用Log4j进行日志记录 您使用过旅游指南吗?它总是能让我们快速的找到目的地。我对此有深刻的印象,希望这篇指南也能使您快速的完成Struts标签相关的任务。我...
这是学习mybatis的demo以及总结,会从最基本的项目构建开始,包括Junit测试,log4j等等。 1. 主要是介绍了什么是框架,介绍mybatis,演示从0到搭建一个实现插入功能的mybatis demo,同时包含test测试以及日志。 2. ...
1.6.4 第三步:log4j.properties 6 1.6.5 第四步:SqlMapConfig.xml 6 1.6.6 第五步:po类 7 1.6.7 第六步:程序编写 8 1.6.8 Mybatis解决jdbc编程的问题 15 1.6.9 与hibernate不同 16 2 Dao开发方法 16 2.1 需求 16...
Log4j Java 8 容器 Tomcat 1、Java 语言基础和JDK源码阅读 Java 语言基础 编号 名称 1 基本 2 运算符 3 数据类型 4 类 对象 接口 5 数组 6 枚举 7 异常处理 8 注解 9 范型 其他 编号 名称 1 Object类及其方法 2 ...
平日学习总结. 纯手工编辑啊!! 谢谢支持! -------------- 一: 前期准备工作 Crystal Report 2008 JDBC 相关jar包 --- mysql-connector-java-5.1.22-bin.jar(MySQL) Jar包下载: mysql-connector-java-...
总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或...
log n.日志,记录 [lɒg] native (关键字) ?? ['neitiv] nested [java] 嵌套的 ['nestid] '如:内部类(nested classes) Object [java] 对象 ['ɒbdʒekt] Overload [java] 方法的重载(不同参数列表的同名方法) [,...
阿里巴巴面试题leetcode 程序猿提高篇。...Log4j 教程 - v1.0.pdf Maven 教程 - v1.0.pdf Mongodb 教程 - v1.0.pdf MySQL数据库开发的三十六条军规-石展 Netty 4.x 用户指南 - v1.0.pdf Nginx 入门指南 -
rome Rome was not built in one day 罗马非一日建成 取名来由 命名rome,源于"Rome was not built in one day",旨在表达如果想提升自己的技能和知识...springboot项目如何使用Log4j2 点击 springboot项目集成rabbitm
阿里巴巴面试题leetcode #学习内容源于 程序猿提高篇。...Log4j 教程 - v1.0.pdf Maven 教程 - v1.0.pdf Mongodb 教程 - v1.0.pdf MySQL数据库开发的三十六条军规-石展 Netty 4.x 用户指南 - v1.0.pdf Nginx
frame-wh -- Efficiency comes from diligence. And in shortage in the play ground transportation into Si, ...log4j2 入门学习与总结 spring-boot默认配置 spring-boot-starter-security 账号:admin 密码:admin