Maven工程使用Log4j

使用日志系统有很多种方式,最常见有logback一套,log4j一套等,以下是log4j这一套的使用说明(Maven工程)。另外,此处只是介绍一种可以使用日志系统的方式,以此还有很多引申出来的概念和其他使用方式没有做详细的介绍,可以自行百度扩展。最后会将一下本人在使用的时候遇到的问题。

一、使用步骤

1.加载对用的包
2.增加log的配置文件
3.在类中使用

二、详细使用说明:

1.在.pom文件中加载对应的包,最初使用时会想,为什么使用Log4j海的引入slf相关包,这个可以自行百度一下(类似与jdbc的模式);

<!--slf4j-Log4j驱动包  会自动添加4个对应包 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.6</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.6</version>
</dependency>

2.增加配置文件:

a.配置文件有两种使用方式,xml文件或者properties文件,以下是对xml使用的示例,另外一种可以百度以下其配置格式即可。
b.配置文件的存放位置也有两种,一种是直接存放到resource目录下工程加载时会自动去读取;第二种是自行定义存放位置,自己写listener类去加载,这种方式还可以配置文件刷新时间等,可以百度一下如何完成;这里是直接存放到resource下的示例,文件(2个)可以直接拷贝使用,但需需改一下自己日志的存放路径(这里是存放到tomcat的日志记录中,关于日志记录的存放方式可绝对路径、也可以放到项目路径下等,这些有那些优劣也可以百度了解),文件见文章最后的附件。
c.另外,这里的配置已经够使用了,若需配置自己喜欢的打印格式或者日志级别(5个级别打印不同日志)(这里是error级别)设置,可以在xml中改变和增加。

3.使用示例

a.声明:一般声明为private static final 标识只为本类使用,也不用多次new不同对象浪费内存,注意在import包的时候引org.apache.log4j包,另外还有中声明方式是LoggerFactory.getLogger()方法,这个就是使用的slf的接口,至于为什么,可以搜索一下slf 和 log4j的关系(类似于jdbc的模式)。
b.使用:使用的时候直接在catch中如下使用即可。

private static Logger logger = Logger.getLogger(xx.class.getName());

logger.info(e.getMessage());
logger.error(e.getMessage());
logger.debug(e.getMessage());
logger.fatal(e.getMessage());
logger.warn(e.getMessage());

三、在使用的过程中遇到的问题

本人在使用的过程中,由于刚开始使用java的log包,发现这个职能使用logger.info方法,后来又改为使用logback方法,再后来使用Log4j。
就出现在使用@postConstruct的类A中去使用Loooger时总是报错,找不到Log的类文件导致该类初始化失败,在其他类中使用不报错,但是当A类使用到其他类中有Log类时也报同样的错。
于是就开始找,pom是否对,Extennal Libraries包中有没有这几个包,发现是有的。没再怀疑是保不存在这个问题,开始怀疑是不是@postConstruct特性,导致在加载A类的时候Log类还没有加载,所以就开始想办法去手动加载Logger类,1.在web.xml中配置启动就加载,2.手动使用Class.forname在使用Log前加载,还是报同样的找不到类的错误,3.还想过但没试Listeher,或者实现HttpServlet,在init方法中加入A类需要实现的功能,是因为在遇到这个问题的时候去深入学习了一下累的加载机制和servlet的声明周期,觉得不是因为类没有加载。
最后的最后,折腾了一天,发现target中没有log相关的几个包,哎,然后又是一顿删掉pom中的dependency文件 删除target 重启idea,target终究还是没有这几个包。最后只有从新创建一个工程,将文件拷进去,发现好使了,最后的总结是,可能是之前使用多种方式的时候引入的包间依赖或者是什么有问题,哎。

四、关于使用log4j的一些常用问题的官方回答

http://logging.apache.org/log4j/1.2/faq.html#noconfig

附件

文件1(log4j.xml顶部会引用第二个文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <!-- appender -->
   <appender name="console_appender" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n" />
      </layout>
   </appender>

   <appender name="monitor_appender" class=<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值