log4j

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} span.hilite1 {mso-style-name:hilite1;} span.hilite3 {mso-style-name:hilite3;} span.hilite4 {mso-style-name:hilite4;} span.hilite2 {mso-style-name:hilite2;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

log4j 的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j 基础上稍加配置即可轻松实现这一功能。

  先看一个常见的log4j.properties 文件,它是在控制台和myweb.log 文件中记录日志:

log4j.rootLogger=DEBUG, stdout, logfile

 

log4j.category.org.springframework=ERROR

log4j.category.org.apache=INFO

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log

log4j.appender.logfile.MaxFileSize=512KB

log4j.appender.logfile.MaxBackupIndex=5

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

  

如果想对不同的类输出不同的文件(cn.com.Test 为例) ,先要在Test.java 中定义:

private static Log logger = LogFactory.getLog(Test.class );

  然后在log4j.properties 中加入:

log4j.logger.cn.com.Test = DEBUG, test

log4j.appender.test =org.apache.log4j.FileAppender

log4j.appender.test .File=${myweb.root}/WEB-INF/log/test.log

log4j.appender.test .layout=org.apache.log4j.PatternLayout

log4j.appender.test .layout.ConversionPattern=%d %p [%c] - %m%n

  也就是让cn.com.Test 中的logger 使用log4j.appender.test 所做的配置。

 

  但是,如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java 中定义:

private static Log logger1 = LogFactory.getLog("myTest1 ");

private static Log logger2 = LogFactory.getLog("myTest2 ");

  然后在log4j.properties 中加入:

log4j.logger.myTest1 = DEBUG, test1

log4j.appender.test1 =org.apache.log4j.FileAppender

log4j.appender.test1 .File=${myweb.root}/WEB-INF/log/test1.log

log4j.appender.test1 .layout=org.apache.log4j.PatternLayout

log4j.appender.test1 .layout.ConversionPattern=%d %p [%c] - %m%n

  

log4j.logger.myTest2 = DEBUG, test2

log4j.appender.test2 =org.apache.log4j.FileAppender

log4j.appender.test2 .File=${myweb.root}/WEB-INF/log/test2.log

log4j.appender.test2 .layout=org.apache.log4j.PatternLayout

log4j.appender.test2 .layout.ConversionPattern=%d %p [%c] - %m%n

  也就是在用logger 时给它一个自定义的名字( 如这里的"myTest1 ") ,然后在log4j.properties 中做出相应配置即可。别忘了不同日志要使用不同的logger( 如输出到test1.log 的要用logger1 .info("abc"))

 

  还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger 所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:

log4j.additivity .myTest1 = false

  它用来设置是否同时输出到log4j.rootLogger 所配置的日志中,设为false 就不会输出到其它地方啦!注意这里的"myTest1 " 是你在程序中给logger 起的那个自定义的名字!

如果你说,我只是不想同时输出这个日志到log4j.rootLogger 所配置的logfile 中,stdout 里我还想同时输出呢!那也好办,把你的log4j.logger.myTest1 = DEBUG, test1 改为下式就OK 啦!

log4j.logger.myTest1 =DEBUG, test1

 

 

 

 

ibatis log4j 运行级别调到 DEBUG 可以在控制台打印出 ibatis 运行的 sql 语句 , 方便调试 :

log4j .logger .com .ibatis =DEBUG
log4j .logger .com .ibatis .common.jdbc.SimpleDataSource=DEBUG
log4j .logger .com .ibatis .common.jdbc.ScriptRunner=DEBUG
log4j .logger .com .ibatis .sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j .logger .java.sql.Connection=DEBUG
log4j .logger .java.sql.Statement=DEBUG
log4j .logger .java.sql.PreparedStatement=DEBUG

 

 

 

web study--Log4j

  1 Log4j 是什么?
  Log4j 可以帮助调试(有时候debug 是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧: http://jakarta.apache.org/log4j

2 Log4j 的概念
    Log4j
中有三个主要的组件,它们分别是 Logger AppenderLayoutLog4j 允许开发人员定义多个Logger ,每个Logger 拥有自己的名字,Logger 之间通过名字来表明隶属关系。有一个Logger 称为Root ,它永远 存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger() 方法获得,其它Logger 通过 Logger.getLogger(String name) 方法。
   Appender
则是用来指明将所有的log 信息存放到什么地方,Log4j 中支持多种appender ,如
console filesGUI componentsNT Event Loggers 等,一个Logger 可以拥有多个Appender ,也就是你既可以将Log 信息输出到屏幕,同时存储到一个文件中。
   Layout
的作用是控制Log 信息的输出方式,也就是格式化输出的信息。
   Log4j
中将要输出的Log 信息定义了5 种级别,依次为DEBUGINFOWARNERRORFATAL ,当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。

3 Log4j 的配置文件
 
虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j 支持两种格式的配置文件:XML 格式和Javaproperty 格式,本人更喜欢后者,首先看一个简单的例子吧,如下:

  log4j.rootLogger=debug,
stdout, R
  log4j.appender.
stdout =org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

  # Pattern to output the caller's file name and line number.
  log4j.appender.stdout.layout.ConversionPattern=%5p [%t]
(%F:%L) - %m%n

  log4j.appender.
R =org.apache.log4j.RollingFileAppender
  log4j.appender.R.File=example.log
  log4j.appender.R.MaxFileSize=
100KB

  # Keep one backup file
  log4j.appender.R.MaxBackupIndex=1

  log4j.appender.R.layout=org.apache.log4j.PatternLayout
  log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n         

  首先,是设置root ,格式为 log4j.rootLogger=[level],appenderName, ... ,其中level 就是设置需要输出信息的级别,后面是appender 的输出的目的地,appenderName 就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 配置日志信息输出目的地Appender ,其语法为
  log4j.appender.appenderName = fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1 = value1
  ...
  log4j.appender.appenderName.option = valueN

Log4j 提供的appender 有以下几种:
  org.apache.log4j.ConsoleAppender
(控制台)
  org.apache.log4j.FileAppender
(文件)
  org.apache.log4j.DailyRollingFileAppender
(每天产生一个日志文件)
  org.apache.log4j.RollingFileAppender
(文件大小到达指定尺寸的时候产生新文件)
  org.apache.log4j.WriterAppender
(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式(布局),其语法为:
  log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1
  ....
  log4j.appender.appenderName.layout.option = valueN

Log4j 提供的layout 有以下几种:
  org.apache.log4j.HTMLLayout
(以HTML 表格形式布局),
  org.apache.log4j.PatternLayout
(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout
(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout
(包含日志产生的时间、线程、类别等等信息)

Log4J
采用类似C 语言中的printf 函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

   %p 输出优先级,即DEBUGINFOWARNERRORFATAL
  %r 输出自应用启动到输出该log 信息耗费的毫秒数
  %c 输出所属的类目,通常就是所在类的全名
  %t 输出产生该日志事件的线程名
  %n 输出一个回车换行符,Windows 平台为“/r/n”Unix 平台为“/n”
  %d 输出日志时间点的日期或时间,默认格式为ISO8601 ,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS} ,输出类似:
2002 1018 22 1028921
  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)



4 Log4j 在程序中的使用
  要在自己的程序中使用Log4j ,首先需要将commons-logging.jarlogging-log4j-1.2.9.jar 导入到构建路径 中。然后再将log4j.properties 放到src 根目录下。这样就可以在程序中使用log4j 了。在类中使用log4j 首先声明一个静态变量 Logger logger=Logger.getLog("classname") ;现在就可以使用了,用法如下:logger.debug("debug message") 或者logger.info("info message") ,看下面一个小例子:

  import com.foo.Bar;
  import org.apache.log4j.Logger;
  import org.apache.log4j.PropertyConfigurator;
  public class MyApp {
    static Logger logger = Logger.getLogger(MyApp.class.getName());
    public static void main(String[] args) {
      // BasicConfigurator replaced with PropertyConfigurator.
      PropertyConfigurator.configure(args[0]);
      logger.info("Entering application.");
      Bar bar = new Bar();
      bar.doIt();
      logger.info("Exiting application.");
    }
  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值