LOG4J的使用- -

      首先我们要了解为什么要使用LOG4J,使用它会有什么好处.我觉的这个很重要,因为每一个新的功能性插件的出现,只能解决某个特定的问题,或者说它只是用来解决某一类型项目中所出现的问题,而不是全部.所以我必须先了解功能,用途然后再决定用不用.(这也许会给你带代你想不到的新的问题)
用它的目的有三个:
1.监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析;
2.跟踪代码运行轨迹,作为日后审计的依据;
3.担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息.
举个例子说在我们写程序的时候,在进行了一个操作后,我们可能查看一个变量或对象它的状态值是什么,这样我们可以根据状值的变化来判断程序执行只否存在逻辑错误.在JAVA中可能会用到像"System.out.println()"类似的打印语句,在VB中可能会用到像"Msgbox".(这种方式我也很常用,很方便)如果对于一个项目来说整篇都充满了这样的语句,对对分析程序查找错误是很不利的.但是LOG4J却对这些类似的输出语句做了很好的封装,而不是让一系统的打印语句充斥着代码的主体.
LOG4J有三个主要的组件:记录器,存放器,布局
记录器:LOG4J允许程序定义多个记录,每个记录器有自己的名字,它们之间是通过名称来判断其隶属关系的.LOG4J本身存在个记录器叫根记录器,它是固定的,不能通过名字检索或引用,可以通过Logger.getRootLogger()方法来取得,但是一般的记录器通过Logger.getLogger(String name)
package org.apache.log4j;
public class Logger {
// 记录器创建与获取方法
public static Logger getRootLogger();
public static Logger getLogger(String name);
// 打印方法
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
// 产生打印方法
public void log(Level l, Object message);
}
上面的程序是Logger的原型,五个打印方法代表其中五个级别,面调用它们的时候Log4j会自动根据记录器的不同级别来决定是否输出的,打印方法的级别只有大于等于记录器的级别才能进行输出,否则将不输出.级别从高到低依次为FATAL,ERROR、WARN、INFO、DEBUG.根记录器默认的级别是DEBUG
例子描述了一个子记录器继承了父记录器的级别,并且验证一个低于记录器级别的方法能否输出.
//首先获得一个记录器
Logger logger = Logger.getLogger("com.test");
//为它设置级别INFO
logger.setLevel(Level.INFO);
//然后再获得一个它的子记录器
Logger logger1 = Logger.getLogger("com.test.bar");
//这个打印是可以输出的
logger1.info("Located nearest gas station");
//这个打印是不能被输出的
logger1.debug("the request disable");
为了让日志程序更具有灵活性,还以使用日志配置文件来进行设置.
下面介绍一下日志配置文件
log4j.rootLogger = DEBUG,A1 //设置根记录器级别为DEBUG级,记录的名称为A1(如果要有多个记录可以依次将名称写到后面)
log4j.appender.A1 = org.apache.log4j.ConsoleAppender//设置A1记录器的输出位置为控制台
log4j.appender.A1.layout = org.apache.log4j.PatternLayout//设置A1记录器的输出布局是PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n//设置信息的输出格式(因为PatternLayout布局方式默认的输出格式就是这相所以我觉的这里可以省略)
%r 表示自从程序开始到目前花费的时间,%4r表示时间用HH:MM:SS.ssss格式来显示,默认只显示毫秒
[%t] 表示发出日志请求的线程
[%-5p]表示日志语句的级别
%c 表示与该日志请求关联的日志记录器的名称
- 将设置的参数与输出的信息分隔开
%m%n 表示要输出的内容
上面的日志只能输出到控制台上,下面我们在写一个可以将日志内容输出到控制台与日志文件中.
log4j.rootLogger=DEBUG,app1,app2
//将app1输出到控制台上,将app2输出到日志文件中
//设置app1的输出源,以及输出的布局方式
log4j.appender.app1=org.apache.log4j.ConsoleAppender
log4j.appender.app1.layout=org.apache.log4j.PatternLayout
//设置信息的转换格式
log4j.appender.app1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
//设置app2记录器
log4j.appender.app2=org.apache.log4j.RollingFileAppender
//设置保存日志的文件名
log4j.appender.app2.File=app2.log
//指定文件的最大容量(必须标出容量否则将以字节以单位)
log4j.appender.app2.MaxFileSize=100KB
//指定日志的布局以及输出格式
log4j.appender.app2.layout=org.apache.log4j.PatternLayout
log5j.appender.app2.layout.ConversionPattern=%p %t %c - %m%n
(注意如果日志文件的容量超过所设置的最大容量那么文件名会自动重命为xxx.log.1然后再重建一个新日志文件xxx.log,这样依次循环记录 .1 .2 ......)
写了一大堆还没讲实际是怎么应用的,下面是一个实际应用的例子.
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class appLog4j {
 
 static Logger logger = Logger.gerLogger(appLog4j.class.getClassName());
 
 public static void main(String args[]) {
  
  PropertyConfigurator.configure("log4j.properties");//log4j.properties为日志的配置文件默认是          放在WEB-INF文件夹,也可以由自己来指定           存位置
  logger.debug("this is debug");
  logger.info("this is info");
  logger.warn("this is warn");
  logger.error("this is error");
  logger.fatal("this is fatal");
 }
}
下面说明一下如何在WEB中应用Log4j
log4j必须在其它代码执行之前就要完成初始化,所以一般在WEB中会使用一个单独的SERVLET来完成log4j配置,并要保证这个SERVLET要位于其它SERVLET之前.
配置web.xml文件
<servlet>
    <servlet-name>log4j-init</servlet-name>
    <servlet-class>com.foo.Log4jInit</servlet-class><!--实例名字-->
    <init-param>
      <param-name>log4j-init-file</param-name>
      <param-value>WEB-INF/classes/log4j.properties</param-value><!--log4j日志配置文件的存放位置-->
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
代码中应用
import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.Httpservlet;
import javax.servlet.http.HttpServletRequest;
import java.servlet.http.httpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;
public class Log4jInit extends HttpServlet {
 
 public void init() {
  
  String appPath = getServletContext().getRealPath("/");
  try {
   String file = getInitParameter("log4j-init-file");//为执行log4j而进行初始化
   if(file != null) {
    propertyConfigurator.configure(appPath + file);
   }
  }catch(IOException e) {
   System.err.println("the log4j configuretor file is error");
  }
  
 }
 public void doGet(HttpServletRequest req, HttpServletResponse res) {
    //.......
 }
}
然后就可以获取log4j实例进行应用了
static Logger logFile = Logger.getLogger(xxx.class.getClassName());
//下面是一个日志配置文件的原例子,#号后面的是英文注释部分,很简单.有日志输出格式的各种参数的使用说明.
# For the general syntax of property based configuration files see the
# documenation of org.apache.log4j.PropertyConfigurator.
# The root category uses the appender called A1. Since no priority is
# specified, the root category assumes the default priority for root
# which is DEBUG in log4j. The root category is the only category that
# has a default priority. All other categories need not be assigned a
# priority in which case they inherit their priority from the
# hierarchy.
log4j.rootCategory=DEBUG, A1, A2
# A1 is set to be a FileAppender which outputs to the file
# "factor.log". Start the server NumberCruncherServer and two
# NumberCruncherClients, and ask to factor two numbers
# near-simultaneously. Notice that the log output from these two
# requests are logged in the file factor.log. Nevertheless, the logs
# of these requests can still be distinguished given their distinct
# nested diagnostic contexts.
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=portal.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
# Note the %x conversion specifier for NDC printing.
# %d date time
# %-5p debug level
# %m messages
# %l class with method and line number (slowly! dubug only, on release use %c{2} in release version)
# %n /n or /r/n
#debug version
log4j.appender.A1.layout.ConversionPattern=%d [%-5p] %l - %m%n
log4j.appender.A2.layout.ConversionPattern=%d [%-5p] %l - %m%n
#release version
# log4j.appender.A1.layout.ConversionPattern=%d [%-5p] %c{2} - %m%n
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值