最近整理了公司产品的日志输出规范,涉及到log4j的使用介绍,所以简单整理了一下。有需要的朋友可以过来咨询。
1 Log4j配置说明
1.1 配置文件LOG4J可由java程序动态设置。这种方法的明显缺点是:如果需要修改日志输出级别等信息,必须修改java文件,然后重新编译,非常麻烦;
Log4j也可以通过配置文件来设置。目前,支持两种格式的配置文件:
以下是一个log4j配置文件的完整内容(推荐):复制代码如下:log4j.rootcategory=info,stdout log4j.rootlogger=info,stdout。
# # # stdout # # # log4j . appender . stdout=org . Apache . log4j . consoleapenderlog4j . appender . stdout . target=system . outlog 4j . appender . stdout . layout=org . Apache . log4j . pattern you tlog4j . appender . stdout . layout . conversion pattern=% d { ABSOLUTE } % 5p-% m % n
# # # set package # # # log4j . logger . org . spring framework=infolog 4j . logger . org . Apache . catalina=infolog 4j . logger . org . Apache . commons . digester . digester=infolog 4j . logger . org . Apache。catalina . startup . TLD config=infolog 4j . logger . CHB . test=debug1.2 配置根LoggerRoot logger主要定义log4j支持的日志级别和输出目的地,其语法为:log4j.root logger=[level],AppenderName,appender name,…其中level为日志记录的优先级,可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或自定义级别。
建议只使用四个级别,优先级从高到低依次是错误、警告、信息和调试。AppenderName指定日志信息的输出位置,并且可以同时指定多个输出目的地。
1.3 配置输出目的地AppenderAppender主要定义日志信息输出到哪里,主要语法如下:复制代码如下:log4j . Appender name=class info log4j . Appender . Appender name . option 1=value 1…log4j . Appender . Appender name . option n=valuenlog 4j提供以下Appender:
org . Apache . log4j . ConsoleAppender(控制台)、org.apache.log4j.FileAppender(文件)、org . Apache . log4j . daily rolling file appender(每天生成一个日志文件)、org . Apache . log4j . rolling file appender(当文件大小达到指定大小时,将生成一个新文件)org . Apache . log4j . writer appender(以流格式将日志信息发送到任意指定位置)以console appender为例,复制代码为Appender . stdout=org . Apache . log4j . console appender log4j . appender . stdout . target=system . out1.4 配置日志信息的格式Layoutlayout负责格式化appender的输出,语法如下:复制代码如下:log4j . appender . appender name . layout=class info log4j . appender . appender name . layout . option 1=value 1…log4j . appender . layout . option n=valuen,其中由
org . Apache . log4j . HTML layout(HTML表格形式的布局)、org.apache.log4j.patternlayout(布局方式可以灵活指定)、org.apache.log4j.SimpleLayout(包括日志信息的级别和信息字符串)、org.apache.log4j.TTCCLayout(包括时间、线程、类别等。日志生成)。
1.5 设置package输出级别您可以设置不同软件包的日志输出级别。语法是:log4j.logger.packageName=level,其中packageName是实际的包名,level是日志级别。比如复制代码如下:log4j.logger.org.springframework=infolog 4j . logger . org . Apache . catalina=infolog 4j . logger . org . Apache . commons . digest . digest=infolog 4j . log . er . org . Apache . catalina . startup . TLD config=infolog 4j . logger . CHB . test=debug2 Log4j与J2ee结合
2.1 使用spring架构春天真好,为我们做了很多事。如果系统使用Spring框架,集成log4j就非常简单,主要分三步,如下:
2.1.1 定义log4j配置文件复制代码如下:log4j.rootcategory=info,stdout log4j.rootlogger=info,stdout
# # # stdout # # # log4j。阑尾手术。stdout=org。阿帕奇。log4j。consoleapenderlog4j。阑尾手术。stdout。目标=系统。outlog 4j。阑尾手术。stdout。布局=组织。阿帕奇。log4j。模式布局log4j。阑尾手术。stdout。布局。转换模式=% d { ABSOLUTE } % 5p-% m % n
###日志到文件# # # log4j。伐木工。org。spring framework=infolog 4j。伐木工。org。阿帕奇。catalina=infolog 4j。伐木工。org。阿帕奇。公地。消化器。digester=infolog 4j。伐木工。org。阿帕奇。卡特琳娜。启动。TLD配置=infolog 4j。伐木工。CHB。测试=调试2.1.2 定义监听器监听器需要定义在web.xml,主要包括:定义log4j配置文件目录、log4j监听器,如下:复制代码代码如下:可扩展标记语言版本='1.0 '编码='UTF八号'?我们B- app版本=' 2.4 ' xmlns=' http://Java。星期日J2EE ' xmlns:xsi=' http://www。w3。org/2001/XML schema-instance ' xsi:schema location=' http://Java。星期日http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd' J2EE
!-由春天载入的Log4j配置文件位置-context-param param-name log 4 jconfiglocation/param-name param-value/we b-INF/log4j。属性/参数值/上下文参数
context-param param-namecontextConfigLocation/param-name param-value/we b-INF/classes/application context * .XML/参数值/上下文参数
!-春季日志4j配置加载器-listener listener类组织。Spring框架。网络。util。日志4 jconfiglistener/listener-class/listener
监听器监听器类组织。spring框架。网络。语境。上下文加载器监听器/监听器-类/监听器
servlet servlet-name initiase servlet/servlet-name servlet-classchb.test.web.InitiaServlet/servlet-class启动时加载1/启动时加载/servlet
欢迎文件列表welcome-fileindex.jsp/welcome-file/欢迎文件列表/web-app2.1.3 测试类复制代码代码如下:package com。他走了。MIP。web
导入javax。servlet。servlet异常;导入javax。servlet。http。http servlet
导入org。阿帕奇。log4j。记录者;
公共类InitiaServlet扩展HttpServlet {
受保护的记录器日志=记录器。获取记录器(initiaservlet。类);
private static final long serialVersionUID=8550329576989690578 l;
/** *对象的构造函数. public initiase rvlet(){ super();}
/* * * servlet的销毁br */public void destroy(){ super。destroy();}
/* * * servlet的初始化br * * @发生错误时抛出servlet异常*/public void init()抛出ServletException { log.debug('服务器启动了,log4j开始工作了');}}2.2不使用spring架构如果系统没有使用春天,我们以小型应用程序为例,很简单,大家按照步骤执行即可,只贴代码,不说废话。
2.2.1 定义log4j配置文件放在网工程的WEB-INF目录下,内容如:复制代码代码如下:log4j.rootCategory=INFO,stdoutlog4j.rootLogger=info,stdout
# # # stdout # # # log4j。阑尾手术。stdout=org。阿帕奇。log4j。consoleapenderlog4j。阑尾手术。stdout。目标=系统。outlog 4j。阑尾手术。stdout。布局=组织。阿帕奇。log4j。模式布局log4j。阑尾手术。stdout。布局。转换模式=% d { ABSOLUTE } % 5p-% m % n
# # #设置包# # # log4j。伐木工。org。阿帕奇。catalina=infolog 4j。伐木工。org。阿帕奇。公地。消化器。digester=infolog 4j。伐木工。org。阿帕奇。卡特琳娜。启动。TLD配置=infolog 4j。伐木工。com。dhe aven=debug2.2.2 创建log4j初始化类复制代码代码如下:package com。他走了。MIP。web
导入javax。servlet。servlet异常;导入javax。servlet。http。http servlet
导入org。阿帕奇。log4j。属性配置器;
公共类InitLog4j扩展了HttpServlet {
private static final long serialVersionUID=1L;
公共void init()引发servlet异常{ String前缀=getservlet上下文().获取真实路径('/');prefix=prefix.replace('//','/');string file=getInitParameter(' log4j-init-file ');//如果没有设置log4j-init-file,那么尝试如果(文件!=null){属性配置器。配置(前缀文件);} }}2.2.3 在Web.xml中定义初始化类复制代码代码如下:servlet servlet-name log 4j-init/servlet-name servlet-class CHB。测试。网络。初始化日志4j/servlet-class
init-param param-name log 4j-init-file/param-name param-value we B- INF/log4j。属性/参数值/初始化参数
启动时加载1/启动时加载/servlet2.2.4 测试类复制代码代码如下:包CHB。测试。web
导入javax。servlet。servlet异常;导入javax。servlet。http。http servlet
导入org。阿帕奇。log4j。记录者;
公共类InitiaServlet扩展HttpServlet {
受保护的记录器日志=记录器。获取记录器(initiaservlet。类);
private static final long serialVersionUID=8550329576989690578 l;
/** *对象的构造函数. public initiase rvlet(){ super();}
/* * * servlet的销毁br */public void destroy(){ super。destroy();}
/* * * servlet的初始化br * * @发生错误时抛出servlet异常*/public void init()抛出ServletException { log.debug('服务器启动了,log4j开始工作了');}}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。