准备工作 一Tomcat已正确配置与使用 二软件下载logjlogjzip Logj简介 在强调可重用组件开发的今天除了自己从头到尾开发一个可重用的日志操作类外Apache为我们提供了一个强有力的日志操作包Logj Logj是Apache的一个开放源代码项目通过使用Logj我们可以控制日志信息输送的目的地是控制台文件GUI组件甚至是套接口服务器NT的事件记录器UNIX Syslog守护进程等我们也可以控制每一条日志的输出格式通过定义每一条日志信息的级别我们能够更加细致地控制日志的生成过程最令人感兴趣的就是这些可以通过一个配置文件来灵活地进行配置而不需要修改应用的代码 此外通过Logj其他语言接口您可以在CC++NetPL/SQL程序中使用Logj其语法和用法与在Java程序中一样使得多语言分布式系统得到一个统一一致的日志组件模块而且通过使用各种第三方扩展您可以很方便地将Logj集成到JEEJINI甚至是SNMP应用中本文介绍的Logj版本是怎样通过一个配置文件来灵活地进行配置主要的应用平台是Tomcat Logj的配置 首先到jakarta下载一个logj的组件把jakartalogj\dist\lib下的logjjar文件copy到classpath指定的目录下!可以是Tomcat的common\lib目录下也可以是你需要用到logj的application下的lib目录 在Application目录下的webxml文件加入以后代码 <servlet> <servletname>logj</servletname> <servletclass>comapachejakartalogjLogjInit</servletclass> <initparam> <paramname>logj</paramname> <paramvalue>/WEBINF/logjproperties</paramvalue> </initparam> <loadonstartup></loadonstartup> </servlet> 这段代码的意思是说在Tomcat启动时加载comapachejakartalogjLogjInit这个名叫LogjInitclass这个类文件其中LogjInitclass的源代码如下 package comapachejakartalogj; import orgapachelogjPropertyConfigurator; import javaxservlethttpHttpServlet; import javaxservlethttpHttpServletRequest; import javaxservlethttpHttpServletResponse; public class LogjInit extends HttpServlet { public void init() { String prefix =getServletContext()getRealPath(/); String file = getInitParameter(logj); // if the logjinitfile is not set then no point in trying Systemoutprintln(logj start); if(file != null) { Propnfigure(prefix+file); } } public void doGet(HttpServletRequest req HttpServletResponse res) { } } 这段代码很简单可以看出在加载的过程中程序会读取/WEBINF/logjproperties这个文件 这个文件就是本文的重点也就是logj的配置文件 # Set root logger level to DEBUG and its only appender to A #logj中有五级logger #FATAL #ERROR #WARN #INFO #DEBUG #配置根Logger其语法为 #logjrootLogger = [ level ] appenderName appenderName … logjrootLogger=INFO A R #这一句设置以为着所有的log都输出 #如果为logjrootLogger=WARN 则意味着只有WARNERRORFATAL #被输出DEBUGINFO将被屏蔽掉 # A is set to be a ConsoleAppender #logj中Appender有几层如控制台文件GUI组件甚至是套接口服务器NT的事件记录器UNIX Syslog守护进程等 #ConsoleAppender输出到控制台 logjappenderA=orgapachelogjConsoleAppender # A 使用的输出布局其中logj提供种布局 orgapachelogjHTMLLayout(以HTML表格形式布局) #orgapachelogjPatternLayout(可以灵活地指定布局模式) #orgapachelogjSimpleLayout(包含日志信息的级别和信息字符串) #orgapachelogjTTCCLayout(包含日志产生的时间线程类别等等信息) logjappenderAlayout=orgapachelogjPatternLayout #灵活定义输出格式 具体查看logj javadoc orgapachelogjPatternLayout #d 时间 logjappenderAlayoutConversionPattern=%d{yyyyMMdd HH:mm:ss} [%c][%p] %m%n #R 输出到文件 RollingFileAppender的扩展可以提供一种日志的备份功能 logjappenderR=orgapachelogjRollingFileAppender #日志文件的名称 logjappenderRFile=logjlog #日志文件的大小 logjappenderRMaxFileSize=KB # 保存一个备份文件 logjappenderRMaxBackupIndex= logjappenderRlayout=orgapachelogjTTCCLayout #logjappenderRlayoutConversionPattern=%d{yyyyMMdd HH:mm:ss} [%c][%p] %m%n 配置以这里就差不多了如果你想更深入了解配置文件的各个细节可以去查看docs还有在文章的最后面我们提供配置文件中一些主要的语法下面我们来看看怎样在程序中使用logj Logj的使用 使用Logj第一步就是获取日志记录器这个记录器将负责控制日志信息其语法为 public static Logger getLogger( String name) 必须在使用前要把这个类导入 import orgapachelogjLogger; name一般是类文件的名字如下 static Logger logger = LoggergetLogger (classgetName () ) ; 您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方其语法如下 loggerdebug ( Object message ) ; ( Object message ) ; loggerwarn ( Object message ) ; loggererror ( Object message ) ; 为什么这里要分级别的呢?试想一下我们在写程序的时候为了调试程序会在很多会出错的地方加入大量的();信息当然程序调试完毕我们不需要这些输出信息了那怎么办呢?以前的做法是把每个程序中的删除但这是不现实的如果程序不大还可以但如果程序很多做这些事情就很烦人了但因为logj分级别了当我们不需要输出这样调试时用到的()时我们可以把输出的级别调高如调到warn或error级别这样info级别及以下的级别就不会出输出了是不是很方便的呢? 其实除了这种使用方式logj还有其它的使用方面不需要配置文件直接在程序中定义输入出级别层次等信息如果要了解这方法的使用可以参考文档 附注 以下是配置文件的一些重要的语法 定义配置文件 其实您也可以完全不使用配置文件而是在代码中配置Logj环境但是使用配置文件将使您的应用程序更加灵活 Logj支持两种配置文件格式一种是XML格式的文件一种是Java特性文件(键=值)下面我们介绍使用Java特性文件做为配置文件的方法 配置根Logger其语法为 logjrootLogger = [ level ] appenderName appenderName … 其中level 是日志记录的优先级分为OFFFATALERRORWARNINFODEBUGALL或者您定义的级别Logj建议只使用四个级别优先级从高到低分别是ERRORWARNINFODEBUG通过在这里定义的级别您可以控制到应用程序中相应级别的日志信息的开关比如在这里定义了INFO级别则应用程序中所有DEBUG级别的日志信息将不被打印出来 appenderName就是指定日志信息输出到哪个地方您可以同时指定多个输出目的地 配置日志信息输出目的地Appender其语法为 logjappenderappenderName = fullyqualifiednameofappenderclass logjappenderappenderNameoption = value … logjappenderappenderNameoption = valueN 其中Logj提供的appender有以下几种 orgapachelogjConsoleAppender(控制台) orgapachelogjFileAppender(文件) orgapachelogjDailyRollingFileAppender(每天产生一个日志文件) orgapachelogjRollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) orgapachelogjWriterAppender(将日志信息以流格式发送到任意指定的地方) //往数据库中加入日志 logjappenderR=orgapachelogjjdbcJDBCAppender logjappenderRURL=jdbc:mysql://localhost/log logjappenderRusername=root logjappenderRpassword= logjappenderRsql=INSERT INTO TEST (msg) VALUE (%d %c &m) logjappenderRlayout=orgapachelogjPatternLayout 配置日志信息的格式(布局)其语法为 logjappenderappenderNamelayout = fullyqualified |