常用的日志处理框架 对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,错误排查,基于 日志的业务逻辑统计分析等都离不日志。 日志的管理是系统很重要的一部分,千万不可忽略其重要性。完整的日志将会在系统维 护中起着异常重要的作用。 在 Java 领域存在多种日志框架,目前常用的日志框架包括 Log4j,Log4j2,Commons Logging,Slf4j,Logback,Jul。
Log4j: Log For Java(Java 的日志) 是 Apache 提供的一个开源的 Java 主流的日志框架
Log4j 定义了 8 个日志级别(除去 OFF 和 ALL,可以说分为 6 个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
在 Log4j 中建议只使用 DEBUG、INFO、WARN、ERROR 四个日志级别。
log4j.rootLogger = [level],appenderName,appenderName2,…
level 是日志记录的优先级,优先级从低到高分别是 DEBUG,INFO,WARN,ERROR。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关,比如在这里定义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来
appenderName 就是指定日志信息输出到哪个地方。可同时指定多个输出目的地
### appender.console 输出到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=<%d> %5p (%F:%L) [%t] (%c) - %m%n
log4j.appender.console.Target=System.out
### appender.logfile 输出到日志文件 ###
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=SysLog.log
log4j.appender.logfile.MaxFileSize=500KB
log4j.appender.logfile.MaxBackupIndex=7
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=<%d> %p (%F:%L) [%t] %c - %m%n
### appender.logDB输出到数据库 ###
log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/bjsxt
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=root
log4j.appender.logDB.Sql=INSERT INTO
logs(project_name,create_date,level,category,file_name,thread_name,line,all_ category,message)values('logDemo','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','% t','%L','%l','%m')
log4j.logger.org.apache=FATAL
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.com.bjsxt=ERROR
Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。 如:
%5c: 输出 category 名称,最小宽度是 5,category<5,默认的情况下右对齐
%-5c:输出 category 名称,最小宽度是 5,category<5,"-"号指定左对齐,会有空格
%.5c:输出 category 名称,最大宽度是 5,category>5,就会将左边多出的字符截掉,<5 不会有空格
%20.30c:category 名称<20 补空格,并且右对齐,>30 字符,就从左边交远销出的字符截
import org.apache.log4j.Logger;
public class LogDemo {
private final static Logger logger = Logger.getLogger(LogDemo.class);
}
commons-logging 是 Apache 的 Commons 项目中提供的一个高层的日志框架,是门面模式的典型应用。commons-logging 本身没有实现真正的日志能力。它可以挂接不同的日志系 统,默认情况下,Commons Loggin 自动搜索并使用 Log4j,如果没有找到 Log4j,再使用 JDK Logging
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogDemo {
private static final Log logger = LogFactory.getLog(LogDemo.class);
}
SLF4J 的全称是 Simple Logging Facade for Java,即简单日志门面应用。SLF4J 并不是具体 的日志框架,而是作为一个简单门面服务于各类日志框架,如 java.util.logging, logback 和 log4j。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogDemo {
private static final Logger logger = LoggerFactory.getLogger(LogDemo.class);
}
Mybatis 的内置日志工厂(LogFactory)提供日志处理功能,内置日志工厂将日志交 给以下其中一种工具作代理: