Log4j的学习(附带与slf4j的整合)

一、问题引出

        日志对于一个成熟的项目来说是比不课少的。当项目运行上线,运行出错的时候,可以通过日志记录。然后开发人员通过日志反馈的信息找到错误的根源,进而修改之。

二、Java项目中日志的记录-----Log4J的使用

       java项目中,使用最广泛的应该就是Log4j了吧。Log4j是apache下的开源项目,通过使用Log4j,我们可以很容易的把日志信息输送到控制台,文件,数据库等。

三、Log4j详细内容

       1) Log4j主要由三部分组成:

                  loggers:负责捕获记录信息

                  appenders:负责发布日志信息,选择不同的日志输出目的地

                  layouts:负责日志输出内容的格式化操作

       2)Log4j的使用方式。可以建立项目的根目录下定义一个Log4j.properties配置文件,里面定义内容如下:

#设置日志输出级别
log4j.rootLogger=debug,A1,A2,A3
#设置输出到终端
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#设置日志的输出方式
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#具体的方式,这是与PatternLayout一同使用的
log4j.appender.A1.layout.ConversionPattern=[%p] [time]:%d{yyyy-MM-dd HH:mm:ss}  [from]:%c   [detail]:%m    [position]:%l%n
#设置日志信息输出到文件
log4j.appender.A2=org.apache.log4j.FileAppender
#ERROR级别以上的内容才会被输出
log4j.appender.A2.Threshold=ERROR
#日志输出格式
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%p] [time]:%d{yyyy-MM-dd HH:mm:ss}  [from]:%c   [detail]:%m    [position]:%l%n
#文件的存储地址,如果不存在,就会创建这个文件
log4j.appender.A2.File=F:/test.log

#输出到html文档中
log4j.appender.A3=org.apache.log4j.FileAppender
#指定输出地址
log4j.appender.A3.File=F:/test.html
#ERROR级别以上的内容才会被输出
log4j.appender.A3.Threshold=ERROR
#以html格式输出
log4j.appender.A3.layout=org.apache.log4j.HTMLLayout
#设置网页标题
log4j.appender.A3.layout.Title=MyLog
#设置为true后可以定位日志出错位置,建议使用
log4j.appender.A3.layout.LocationInfo=true

        log4j.rooterLogger  :log4j的根记录器,它用来定义日志的记录级别以及日志的输出地址。Log4j常用的日志输出四个级别为按照优先级从高到低分别是ERROR>WARN>INFO>DEBUG。当定义了一个日志输出优先级的时候,低于这个优先级的内容不会输出。举个例子:如果定义的日志优先级为INFO,那么DEBUG的内容不会被输出。   上面的例子当中使用的日志优先级别为DEBUG,在开发中一般定义为这个级别,在项目上线后,将级别再改为INFO.   

                   |- log4j.appender.A1=org.apache.log4j.ConsoleAppender:指定日志的输出目的地。

                                     输出的目的地有以下几种:

                                     org.apache.log4j.ConsoleAppender(控制台),

                                             org.apache.log4j.FileAppender(文件),
                                                org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
                                             org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
                                             org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

                 |-log4j.appender.A1.layout:layout用来设置日志的输出格式:定义的日志格式有

                                               org.apache.log4j.HTMLLayout(以HTML表格形式布局)
                                               org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
                                               org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

                                               org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

                               对于patternLayout,Log4j官方给出了布局使用的方式:

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

四、Log4j测试

               通过测试加载配置文件。

public class LogTest {

    public  static Logger logger= Logger.getLogger(LogTest.class);
    @Test
    public  void test1() {
        try {
            System.out.println(1 / 0);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }
}

日志文件中内容:

[ERROR] [time]:2017-11-16 22:03:05  [from]:com.itschool.test.LogTest   [detail]:/ by zero    [position]:com.itschool.test.LogTest.test1(LogTest.java:24)


HTML文档中内容:



五、Log4j的优缺点

                    优点:便于项目的维护,配置好的日志可以准确找到代码的错误位置

                    缺点:减缓项目的运行,如果上面的项目使用DEBUG方式运行,那么会明显感受到速度减慢。

六、Log4j与slf4j的整合

               现在不只是单纯的使用log4j记录日志了,有一个原因是当如果不用Log4j记录日志改用其他的了,那么又要重新修改代码。但是有了slf4j之后,当需要更换,只需要更换jar包就行。减少了耦合度

                所需jar包:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>

              整合后使用方式,通过LoggerFactory获得Logger:

public class LogTest {

    public  static Logger logger= LoggerFactory.getLogger(LogTest.class);
    @Test
    public  void test1() {
        try {
            System.out.println(1 / 0);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }
}
             

ps:如有不对,请指出~~

                 

             

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值