Log4j 如何实现 根据不同的类 或者不同的包 输出的调试信息到不同的文件夹中
Log4j 如何实现 根据不同的类 或者不同的包 输出的调试信息到不同的文件夹中
岸芷汀兰 发表于3年前
Log4j 如何实现 根据不同的类 或者不同的包 输出的调试信息到不同的文件夹中
  • 发表于 3年前
  • 阅读 4652
  • 收藏 27
  • 点赞 0
  • 评论 1

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: Log4j 如何实现 根据不同的类 或者不同的包 输出的调试信息到不同的文件夹中

在配置文件中按包名或类名来定义Logger
在程序中按类名取Logger

定义:
log4j.rootLogger=debug,stdout
log4j.logger.com.mypkg=debug,mypkg
log4j.logger.com.mypkg.db=info,db
log4j.logger.com.mypkg.mail=debug,mail

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5r [%5p][%c{2}] %m%n

log4j.appender.mypkg=org.apache.log4j.RollingFileAppender
log4j.appender.mypkg.File=system.log
log4j.appender.mypkg.Append=true
log4j.appender.mypkg.MaxFileSize=1MB
log4j.appender.mypkg.MaxBackupIndex=1
log4j.appender.mypkg.layout=org.apache.log4j.PatternLayout
log4j.appender.mypkg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

log4j.appender.db=org.apache.log4j.FileAppender
log4j.appender.db.File=db.log
log4j.appender.db.Append=true
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

log4j.appender.mail=org.apache.log4j.FileAppender
log4j.appender.mail.File=mail.log
log4j.appender.mail.Append=true
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

log4j.additivity.com.mypkg=false
log4j.additivity.com.mypkg.db=false
log4j.additivity.com.mypkg.mail=false

使用:
package com.mypkg;
public class Class1
{
    private static Logger logger = Logger.getLogger(Class1.class);

    ...
    if(logger.isDebugEnabled())
        logger.debug("debug info");
    ...
}

package com.mypkg.db;
public class Class2
{
    private static Logger logger = Logger.getLogger(Class2.class);

    ...
    if(logger.isDebugEnabled())
        logger.debug("debug info");
    ...
}

package com.mypkg.mail;
public class Class3
{
    private static Logger logger = Logger.getLogger(Class3.class);

    ...
    if(logger.isDebugEnabled())
        logger.debug("debug info");
    ...
}

这样一来:
  com.mypkg.mail下的类(Class3)的日志就会记入mail.log
  com.mypkg.db下的类(Class2)的日志就会记入db.log
  com.mypkg下的类(Class1)及类似com.mypkg.pkg1这样的未定义相应Logger的包下的类(com.mypkg.pkg1.Class4)的日志就会记入system.log
  com.mypkg以外的类(com.pkg1.Class5)的日志就会记录到rootLogger,即输出到控制台

不管增加还是删除日志配置项,都不需要修改程序:
    如果想去掉其中一个,如mail,只需从配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"这一行,去掉后com.mypkg.mail包下的类(如Class3)的日志就会记入system.log中。

    如果要新增Logger,如com.mypkg.pkg2,只需在配置文件中增加类似配置,com.mypkg.pkg2包下的类的日志就会记入新增的log文件,而不再记入system.log文件。

还可以为指定类配置一个logger,如为类com.mypkg.db.ConnectionPool配置一个logger:
  log4j.logger.com.mypkg.db.ConnectionPool=debug,pool

  log4j.appender.pool=org.apache.log4j.FileAppender
  log4j.appender.pool.File=pool.log
  log4j.appender.pool.Append=true
  log4j.appender.pool.layout=org.apache.log4j.PatternLayout
  log4j.appender.pool.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

  log4j.additivity.com.mypkg.db.ConnectionPool=false

这样一来,ConnectionPool类的日志就会记入pool.log,不会记入db.log

共有 人打赏支持
粉丝 26
博文 112
码字总数 87648
评论 (1)
zigzagroad
配置多个(用于输出日志内容到文件的)appender;然后配置logger使用相应的appender和拦截相应的类。如果日志输出到不同的目录,相应目录要预先存在。

建议使用XML方式配置,properties文件已经不推荐使用了(不直观、不易懂)。
×
岸芷汀兰
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: