产品网站设计,兴义做网站的公司,网站开发软件启动,门户网站建设存在问题与不足文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders#xff08;输出控制器#xff09;3、Layout#xff08;日志格式化器#xff09; 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自… 文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders输出控制器3、Layout日志格式化器 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自定义配置文件拆分日志1、按照文件大小进行拆分2、按照日期进行拆分 六、自定义配置文件中的logger 一、Log4j简介
Log4j是Apache的一个开源项目可以控制日志信息输出到控制台、文件、甚至是数据库中可以控制每一条日志的输出格式通过一个配置文件来灵活地进行配置而不需要修改应用的代码
二、Log4j组件介绍
主要由Loggers (日志记录器)、Appenders输出控制器和 Layout日志格式化器组成Loggers控制日志的输出级别与日志是否输出Appenders指定日志的输出方式输出到控制台、文件等Layout控制日志信息的输出格式
1、Loggers (日志记录器)
日志记录器负责收集处理日志记录 实例的命名就是类的全限定名如com.xc.log4j.XXLogger的名字大小写敏感 命名有继承机制 例如name为com.xc.log4j的logger会继承name为com.xc的logger的属性父类所做的日志属性设置会直接的影响到子类 Log4J中有一个特殊的logger叫做“root”他是所有logger的根 也就意味着其他所有的logger都会直接或者间接地继承自rootroot logger可以用Logger.getRootLogger()方法获取
2、Appenders输出控制器
ConsoleAppender将日志输出到控制台FileAppender将日志输出到文件中DailyRollingFileAppender将日志输出到一个日志文件并且每天输出到一个新的文件RollingFileAppender将日志信息输出到一个日志文件并且指定文件的尺寸当文件大小达到指定尺寸时会自动把文件改名同时产生一个新的文件JDBCAppender把日志信息保存到数据库中
3、Layout日志格式化器
HTMLLayout格式化日志输出为HTML表格形式SimpleLayout简单的日志输出格式化打印的日志格式如默认INFO级别的消息PatternLayout最强大的格式化组件有默认的转换格式也可以自定义格式输出日志 日志输出格式说明 %m输出代码中指定的日志信息%p输出级别及 DEBUG、INFO 等%n换行符Windows平台的换行符为 “\n”Unix 平台为 “\n”%r输出自应用启动到输出该 log 信息耗费的毫秒数%c输出打印语句所属的类的全名%t输出产生该日志的线程全名%d输出服务器当前时间默认为 ISO8601也可以指定格式如%d{yyyy年MM月dd日 HH:mm:ss}%l输出日志时间发生的位置包括类名、线程、及在代码中的行数。如Test.main(Test.java:10)%F输出日志消息产生时所在的文件名称%L输出代码中的行号%%输出一个 “%” 字符 可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式 %5c输出category名称最小宽度是5category5默认的情况下右对齐%-5c输出category名称最小宽度是5category5-号指定左对齐会有空格%.5c输出category名称最大宽度是5category5就会将左边多出的字符截掉5不会有空格%20.30ccategory名称20补空格并且右对齐30字符就从左边较远处多出的字符截掉
三、Log4j快速入门
pom依赖
dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version
/dependencyimport org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Test;public class Log4jTest {Testpublic void test01() {// 加载初始化配置没有配置文件则需要添加此配置BasicConfigurator.configure();// 实例化LoggerLogger logger Logger.getLogger(Log4jTest.class);logger.info(logger实例名称 logger.getName());logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);}
}输出结果
0 [main] INFO com.xc.log.Log4jTest - logger实例名称com.xc.log.Log4jTest
1 [main] FATAL com.xc.log.Log4jTest - fatal信息
1 [main] ERROR com.xc.log.Log4jTest - error信息
1 [main] WARN com.xc.log.Log4jTest - warn信息
1 [main] INFO com.xc.log.Log4jTest - info信息
1 [main] DEBUG com.xc.log.Log4jTest - debug信息Log4j提供了8个级别的日志输出 ALL最低等级 用于打开所有级别的日志记录TRACE程序推进下的追踪信息这个追踪信息的日志级别非常低一般情况下是不会使用的DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的主要是配合开发在开发过程中打印一些重要的运行信息默认级别INFO消息的粗粒度级别运行信息WARN表示警告程序在运行过程中会出现的有可能会发生的隐形的错误ERROR系统的错误信息发生的错误不影响系统的运行 一般情况下如果不想输出太多的日志则使用该级别即可FATAL表示严重错误它是那种一旦发生系统就不可能继续运行的严重错误OFF最高等级的级别用户关闭所有的日志记录
四、Log4j自定义配置文件输出日志
Loader.getResource(log4j.properties)源码默认从类路径找
1、输出到控制台
resources目录下的log4j.properties文件 Test
public void test02(){//自定义配置文件设置Appender输出方式和Layout输出格式Logger logger Logger.getLogger(Log4jTest.class);logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);
}输出结果
[FATAL ] [main] [2024-09-19 22:38:55:822] [com.xc.log.Log4jTest.test01(Log4jTest.java:18)] fatal信息
[ERROR ] [main] [2024-09-19 22:38:55:825] [com.xc.log.Log4jTest.test01(Log4jTest.java:19)] error信息
[WARN ] [main] [2024-09-19 22:38:55:825] [com.xc.log.Log4jTest.test01(Log4jTest.java:20)] warn信息
[INFO ] [main] [2024-09-19 22:38:55:825] [com.xc.log.Log4jTest.test01(Log4jTest.java:21)] info信息
2、输出到文件
resources目录下的log4j.properties文件
Test
public void test03(){//输出到文件对于追加默认是trueLogger logger Logger.getLogger(Log4jTest.class);logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);
}输出结果 3、输出到数据库
创建表结构字段的制定可以根据需求进行调整
CREATE TABLE log (log_id int(11) NOT NULL AUTO_INCREMENT,project_name varchar(255) DEFAULT NULL COMMENT 目项名,create_date varchar(255) DEFAULT NULL COMMENT 创建时间,level varchar(255) DEFAULT NULL COMMENT 优先级,category varchar(255) DEFAULT NULL COMMENT 所在类的全名,file_name varchar(255) DEFAULT NULL COMMENT 输出日志消息产生时所在的文件名称 ,thread_name varchar(255) DEFAULT NULL COMMENT 日志事件的线程名,line varchar(255) DEFAULT NULL COMMENT 号行,all_category varchar(255) DEFAULT NULL COMMENT 日志事件的发生位置,message varchar(4000) DEFAULT NULL COMMENT 输出代码中指定的消息,PRIMARY KEY (log_id)
);resources目录下的log4j.properties文件 Test
public void test04(){//将日志持久化到数据库表中Logger logger Logger.getLogger(Log4jTest.class);logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);
}输出结果 五、Log4j自定义配置文件拆分日志
1、按照文件大小进行拆分
resources目录下的log4j.properties文件 Test
public void test05(){Logger logger Logger.getLogger(Log4jTest.class);for (int i 0; i 10000; i) {logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);}
}第一次执行 第二次执行 最新日志在logFile.log文件中logFile.log.x数字越小日志越新先打印的日志会被先覆盖 如上第一次打印0123第二次打印中的45是第一次打印的0123被覆盖后东西01比23内容新23被覆盖那么45中剩余的就是01的内容 总之最新的内容覆盖最旧的内容
2、按照日期进行拆分
resources目录下的log4j.properties文件 Test
public void test05(){//根据日期拆分Logger logger Logger.getLogger(Log4jTest.class);logger.fatal(fatal信息);logger.error(error信息);logger.warn(warn信息);logger.info(info信息);logger.debug(debug信息);logger.trace(trace信息);
}这里使用的默认根据天拆分也可以根据小时分钟拆分今天是9.20日昨天的日志被添加到新文件logFile.log.2024-09-19中当天日志都会记录在logFile.log中
六、自定义配置文件中的logger
常规创建出来的Logger对象默认都是继承rootLogger的也可以自定义logger让其他logger来继承这个logger 如果根节点的logger和自定义logger配置的输出位置是不同的则取二者的并集配置的位置都会进行输出操作如果二者配置的日志级别不同以按照我们自定的logger的级别输出为主