Mybatis系列笔记二——日志管理

Java日志处理框架

常用的日志处理框架 对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,错误排查,基于 日志的业务逻辑统计分析等都离不日志。 日志的管理是系统很重要的一部分,千万不可忽略其重要性。完整的日志将会在系统维 护中起着异常重要的作用。 在 Java 领域存在多种日志框架,目前常用的日志框架包括 Log4j,Log4j2,Commons Logging,Slf4j,Logback,Jul。

Log4j

Logij简历

Log4j: Log For Java(Java 的日志) 是 Apache 提供的一个开源的 Java 主流的日志框架

Log4j 的日志级别

Log4j 定义了 8 个日志级别(除去 OFF 和 ALL,可以说分为 6 个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
在 Log4j 中建议只使用 DEBUG、INFO、WARN、ERROR 四个日志级别。

  • ALL:最低等级的,用于打开所有日志记录。
  • TRACE:很低的 日志级别,一般不会使用。
  • DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打 印一些运行信息。
  • INFO:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
  • WARN:表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
  • ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息, 如果不想输出太多的日志,可以使用这个级别。
  • FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错 误,这种级别你可以直接停止程序了。
  • OFF 最高等级的,用于关闭所有日志记录。

Log4j 的使用

Log4j 配置文件详解

Log4j配置文件名
  • log4j 配置文件名:log4j.properties
  • Log4j配置文件存放位置:项目的src的根目录中
配置根 Logger

log4j.rootLogger = [level],appenderName,appenderName2,…
level 是日志记录的优先级,优先级从低到高分别是 DEBUG,INFO,WARN,ERROR。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关,比如在这里定义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来
appenderName 就是指定日志信息输出到哪个地方。可同时指定多个输出目的地

Log4j 中的 appender
  • org.apache.log4j.ConsoleAppender(输出到控制台)
  • org.apache.log4j.FileAppender(输出到文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • org.apache.log4j.jdbc.JDBCAppender(将日志信息添加数据库中)
范例
  • 输出到控制台
### 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 的输出格式

Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:

  • %m 输出代码中指定的消息
  • %p 输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL
  • %r 输出自应用启动到输出该 log 信息耗费的毫秒数
  • %c 输出所属的类目,通常就是所在类的全名
  • %t 输出产生该日志事件的线程名
  • %n 输出一个回车换行符,Windows 平台为“\r\n”,Unix 平台为“\n”
  • %d 输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式 如:%d{yyyy 年 MM 月 dd 日 HH:mm:ss,SSS},输出类似:2020 年 05 月 01 日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 如: Testlog.main(TestLog.java:10) %F 输出日志消息产生时所在的文件名称
  • %L 输出代码中的行号
  • %x 输出和当前线程相关联的 NDC(嵌套诊断环境),像 java servlets 多客户多线程的应用 中
  • %% 输出一个"%"字符

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。 如:
%5c: 输出 category 名称,最小宽度是 5,category<5,默认的情况下右对齐
%-5c:输出 category 名称,最小宽度是 5,category<5,"-"号指定左对齐,会有空格
%.5c:输出 category 名称,最大宽度是 5,category>5,就会将左边多出的字符截掉,<5 不会有空格
%20.30c:category 名称<20 补空格,并且右对齐,>30 字符,就从左边交远销出的字符截

Log4j 的使用方式

Log4j.jar

添加 jar 包:log4j.jar
添加配置文件:log4j.properties

import org.apache.log4j.Logger; 
public class LogDemo { 
	private final static Logger logger = Logger.getLogger(LogDemo.class); 
}

commons-logging + log4j

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-api + slf4j-log4j + log4j

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 的日志管理

Mybatis 的内置日志工厂(LogFactory)提供日志处理功能,内置日志工厂将日志交 给以下其中一种工具作代理:

  • SLF4J
  • Apache Commons Logging
  • Log4j2
  • Log4j
  • JDK logging
  • NO_LOGGING
    MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查 找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。也就是说在项目中把日志工具环境配置出来后,不用在MyBatis 进行配置就可以让日志生效

你可能感兴趣的:(#,Mybatis,java,apache,开发语言)