Java日志学习笔记

java的日志方案有Commons-logging, Log4j, Slf4j, LogBack...

Commons-logging: apache最早提供的日志的门面接口,类似于jdbc的接口,具体实现由jdbc driver

Log4j:经典的一种日志解决方案,内部把日志系统抽象封装为Logger, appender, pattern等实现,可以通过配置文件轻松的实现日志系统的管理和多样化配置

Slf4j:全称:Simple Logging Facade for JAVA : java简单日志门面,是对不同日志框架提供的一种门面封装,部署的时候不修改任何配置即可接入一种日志实现方案。

Logback: 作为一个通用可靠,快速灵活的日志框架,将作为Log4j的替代和Slf4j组合新的日志系统的完整实现

SLF4J日志方案

通过SLF4J依赖,提供日志API,其是使用Log4J作为实现的,其Maven的配置如下:


	org.slf4j
  	slf4j-log4j12
  	1.7.7

若是在Maven工程中,必须在main/resource目录下创建一个名为log4j.properties的文件,内容如下:

#日志级别为ERROR 提供两种日志console(控制台),file(文本)
#需要对两种日志分别配置

log4j.rootLogger = ERROR, console, file
#控制台日志
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# %m%n在日记结尾添加换行
log4j.appender.console.layout.ConversionPattern = %m%n  

#文件日志
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
#输出日志到指定的文件
log4j.appender.file.File = ${user.home}/logs/book.log
#文件回滚的时间
log4j.appender.file.DatePattern = '_'yyyyMMdd 
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{HH:mm:ss,SSS} %p %c (%L) - %m%m

#同时指定只有cc.codingape包下的类才输出DEBUG级别的日志
log4j.logger.cc.codingape = DEBUG

日志的一个使用范例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory
public class Slf4jDemo {
    private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jDemo.class);
    public static void main(String[] args){
        LOGGER.error("Slf4jDemo");//在控制台上输出Slf4jDemo
    }
}

在Slf4j中增加了占位符{},使得信息的输出便捷很多

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Slf4jDemo {
    private static final Logger LOGGER = LoggerFactory.getLogger(Slf4jDemo.class);
    public static void main(String[] args){
        String message = "slf4j";
        LOGGER.debug("use {}",message);
    }
}

日志的配置文件

核心对象

  • Logger对象 负责获取日志信息,并存储于一个分层的命名空间中
  • Layout对象 提供用于各种风格格式的日志信息的对象,在日志发布前,为appender提供支持
  • Appender对象 负责将日志信息发布到不同的目的地,比如数据库,文件, 控制台

%m%n`表示在输出信息后换行

日志的级别有:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, ALL 级别不断提高,输出的日志基本高于配置文件中日志的基本才能得以输出,例如配置文件中的日志级别为 ERROR,则代码中INFO级别的日志是无法输出的,FATAL,ALL级别的日志信息才能被输出。若指定具体包下的日志输出级别除外,如上述log4j.logger.cc.codingape = DEBUG指定了cc.codingape包下的日志输出级别为DEBUG.

在日志的配置文件中可以使用${}的运算符来配置文件

Layout类型

Apache Log4j提供多个Layout对象,每个根据布局的不同都可格式化日志数据

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

文件记录日志

FileAppender配置

属性 描述
immediateFlush 默认为true,每次日志追加操作都刷新到文件
encoding 编码,默认情况下使用平台相关的编码
threshold appender对象的阀值
Filename 日志文件名
fileAppend 默认true,日志追加到文件
bufferedIO 是否打开缓冲,默认为false
bufferSize 若是开启缓冲去IO,指定缓冲区大小,默认8kb

使用org.apache.Log4j.FileAppender将日志记录到文件,

将文件写入多个文件则使用org.apache.Log4j.RollingFileAppender,该类继承了FileAppender类

逐日生成日志

逐日生成日志文件,使用org.apache.Log4j.DailyRollingFileAppender,该类同样继承了FileAppender类

DatePattern:该属性表明什么时候回滚文件,以及文件的命名约定,缺省情况下每日午夜回滚文件

DatePattern 描述
'.'yyyy-MM 在本月末,下月初回滚文件
'.'yyyy-MM-dd 在每日午夜回滚文件,缺省值
'.'yyyy-MM-dd-a 在每日中午和午夜回滚文件
'.'yyyy-MM-dd-HH 在每个整点回滚文件
'.'yyyy-MM-dd-HH-mm 每分钟回滚文件
'.'yyyy-ww 根据地域,在每周的第一天回滚文件

转载于:https://my.oschina.net/u/3592080/blog/1236253

你可能感兴趣的:(Java日志学习笔记)