美文网首页
java日志小结

java日志小结

作者: tracy_668 | 来源:发表于2018-08-29 23:49 被阅读9次

日志组件

日志框架的目标都是将日志从你的应用程序输出到目标地址,这由三个核心组件组成:

  • Loggers: 用来捕捉事件并将其发送给合适的Appender
  • Appenders: 也被称为Handlers,负责将捕捉到的日志事件记录到目标位置, 并使用Layout进行格式化处理
  • Layout: 也被称为Formatters,它决定了数据在日志记录中的展现形式
    当logger记录一个事件时,它将事件转发到合适的Appender(Handler),Appender再使用layout对记录格式化并将其发送到控制台、文件、或者其他目标位置。

日志框架

现在常用的日志框架有log4j,logback,slf4j等,这些日志框架大都通过配置文件来设置记录器的级别、存放器、和布局格式,配置文件可以是key=value形式的properites文件,也可以是xml文件形式,如Log4j:

log4j

可以设置级别:debug < info < warn < error
debug: 显示debug, info, warn, error
info: 显示info, warn, error
warn: 显示warn, error
error: 只显示error
日志的输出级别由rootLogger和普通Logger设置的最高级别决定。
log4j.rootLogger=debug,appender1, appender2,...
log4j.rootLogger=info,appender1, appender2,...
log4j.rootLogger=warn,appender1
log4j.rootLogger=error,appender1

其中log4j提供了几种appender:

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

log4j提供的Layout

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

这里配置的是类所在的包test.log4j, 逗号之前未配置日志输出级别,默认为根logger的级别(日志的输出级别由rootLogger和普通Logger设置的最高级别决定),test.log4j包下对应的log使用Test appender
log4j.logger.test.log4j=, TEST
log4j.appender.TEST=org.apache.log4j.ConsoleAppender
log4j.appender.TEST.layout=org.apache.log4j.TTCCLayout

slf4j

slf4j 本身并不是具体的日志解决方案,它是服务于日志系统的Fascade,允许用户在部署其应用时使用其所希望的日志系统,为复杂的日志系统提供了简单一致的接口。slf4j提供的核心API是一些接口以及LoggerFactory工厂类,直接调用这些api即可,不需要在代码或者配置文件中指定你打算使用的具体日志系统。可以灵活的切换具体的日志系统。最终日志的格式、记录级别等是通过具体日志系统的配置实现。
slf4j举例

package test.slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloSlf4j {
    private static final Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
    public static void main(String[] args) {
        logger.debug("This is debug message");
        logger.info("This is info message");
        logger.warn("This is warn message");
        logger.error("This is error message");
    }
}

如果使用log4j作为底层日志工具,运行以上程序需要三个包log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.ja,后面两个包由slf4j提供。当你需要换一职中logging的实现时,只需要简单替换几个jar包即可,无须修改散步在代码各处的logging接口调用。

slf4j优势
  • 不再需要冗长的级别判断,在log4j中,为了提高运行效率,往往在输出信息之前,还要进行级别判断,并在输出字符串时常常需要拼接字符串
if (logger.isDebugEnabled()){
       logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
    }

而在slf4j,就不需要字符串连接,而是使用占位符,在生产最终日志信息的字符串之前,这个方法会检查一个特定的日志级别是不是打开了,这降低了构建日志信息(String)的开销,内存消耗而且预先降低了CPU去处理字符串连接命令的时间。

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

debug的实现:

    if (logger.isDebugEnabled()) {
        FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
        logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
    }
}

相关文章

  • java日志小结

    日志组件 日志框架的目标都是将日志从你的应用程序输出到目标地址,这由三个核心组件组成: Loggers: 用来捕捉...

  • java学习笔记-日志篇

    java学习笔记-日志篇-目录 java日志篇(1)-日志概述 java日志篇(2)-JUL(java.util....

  • (09.12.17)2009年11月小结  私人日志

    (09.12.17)2009年11月小结 私人日志 2009-12-18 00:29:24| 分类: 每月小结 天...

  • Java好文收集

    Java日志 Java日志终极指南关于日志记录的一些感想 Spring测试 testing-improvement...

  • 20170921-DirectByteBuffer 堆外内存

    java.nio.ByteBuffer用法小结 补充

  • 2018-01-14 Java应用日志

    java日志体系 java日志体系很混乱。在日志实现框架在有log4j,log4j2,java.util.log,...

  • Java 日志框架

    title: Java 日志框架date: 2021/02/05 12:28 一、Java 日志框架简介 1.1 ...

  • Java基础 - 日志

    什么是java日志? 将应用程序的日志输出到指定地址 java日志的核心 Logger :Logger负责捕捉事件...

  • Log

    混乱的 Java 日志体系 正确的打日志姿势

  • 无标题文章

    Java日志处理问题? Java中日志处理,用了druid和log4j处理日志,druid对项目进行监控,通过lo...

网友评论

      本文标题:java日志小结

      本文链接:https://www.haomeiwen.com/subject/vcscwftx.html