福州网站推广公司,wordpress 在线联系,做金融培训的网站,网上有卖网站链接的吗文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使… 文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使用 三、LogBack3.1 logback模块3.2 logback组件3.3 logback配置3.4 使用 配置文件相关
1. properties 用来代表属性文件通过Properties可以读写配置文件的内容。 构造方法 public Properties()用于构建Properties集合对象空容器常用方法
方法说明public void load(InputStream is);通过字节输入流读取配置文件里的键值对数据public void load(Reader reader);通过字符输入流读取属性文件里的键值对数据public String getProperties(String key);根据键获取值public SetString stringPropertyNames();获取全部键的集合public Object setProperty(String key, String value);保存键值对数据到Properties对象中public void store(OutputStream os, String comments);把键值对数据通过字节输出流写出到属性文件里去public void store(Writer w, String comments);把键值对数据通过字符输出流写出到属性文件里去
测试 Log4j2
public class TestProperties {public static void main(String[] args) throws Exception {Properties properties new Properties();properties.load(new FileReader(src\\main\\resources\\user.properties));properties.setProperty(like, 跳舞);properties.forEach((k,v)-{System.out.println(k --》 v);});}
} 2. XMl Extensible Markup Language可扩展标记语言。 本质是一种数据格式可以用来存储复杂的数据结构和数据关系。 特点
XML中的标签名称为一个标签或者一个元素一般成对出现。XML中的标签名可以自己定义但是需要正确的嵌套。XML中只能有一个根标签。XML中的标签可以有属性。如果一个文件中放置的是XML格式的数据这个文件就是XML文件后缀一般要写成.xml
语法规则
XML文件的后缀名为.xml文档声明必须是第一行。XML中可以定义注释信息!-- 注释内容 --XML中书写、可能会报错导致冲突。可以用特殊字符代替。
字符说明lt;小于 gt;大于 amp;和 andapos;单引号 ’quot;引号
XML中可以书写CDATA数据区里面内容不受格式限制。 ![CDATA[ ...内容]]
使用Dom4j解析XML
SAXReaderDom4j提供的解析器可以认为是代表整个Dom4j框架。
构造器说明public SAXReader();构建Dom4j的解析器对象public Document read(String url);把XML文件读取成Document对象public Document read(InputStream is);通过字节输入流读取XML文件
方法说明public getRootElement();获取根元素对象public String getName();得到元素名字public ListElement elements();得到当前元素下所有子元素public ListElement elements(String name);得到当前元素下指定名字的子元素返回集合public Element element(String name);得到当前元素下指定名字的子元素如果有多个名字相同的返回第一个public String attributeValue(String name);通过属性名直接得到属性值public String elementTest(子元素名);得到指定名称的子元素的文本public String getText();得到文本
Log4j与Log4j2 log4j2是log4j 1.x的升级版。2015年5月apache宣布log4j 1.x停止更新。最新版本为1.2.17。 日志框架出现的历史顺序log4j-JUL-JCL-slf4j-logback-log4j2
log4j2参考logback的一些优秀设计并且修复了一些问题带来一些重大提升。主要有
异常处理。在logback中Appender中的异常不会被应用感知。但是在log4j2中提供了一些异常处理机制。性能提升。log4j2相较于log4j和logback都具有很明显的性能提升。自动重载配置。参考了logback设计提供自动刷新参数配置可以动态的修改日志的级别而不需要重启应用。无垃圾机制。log4j2在大部分情况下可以使用其设计的一套无垃圾机制避免频繁的日志收集导致的jmv gc。 补充 Java虚拟机JVM的垃圾回收GC是Java语言的一个重要特性它允许开发者编写代码时不需要手动管理内存的分配和回收。垃圾回收器Garbage Collector简称GC会自动找出不再使用的对象并将它们占用的内存回收以供新的对象使用。
日志门面 用户可以使用日志门面根据需求动态选择具体的日志实现框架。可以实现所有日志实现框架有统一的规范。 面向接口开发不再依赖具体的实现类减少代码的耦合项目通过导入不同的日志实现类可以灵活的切换日志框架统一API方便开发者学习和使用统一配置便于项目日志管理 一、Log4j 三大主要组件/对象Loggers记录器、Appenders输出源、Layouts布局 每条日志语句都要设置一个等级DEBUG、INFO、WARN、ERROR、FATAL 优先级从高到低依次为OFF关闭、FATAL严重错误信息、ERROR错误信息、WARN警告信息、INFO一般信息、DEBUG调试信息、TRACE、 ALL所有信息。
1.1 Logges 在设置日志输出位置的时候会给位置设置一个级别。只有大于此级别的日志才会打印输出到指定位置。 例如给日志等级设置为INFO则INFO、WARN、ERROR、FATAL级别的日志才会打印DEBUG日志则不会打印。 1.2 Appenders 禁用和使用日志请求是log4j的基本功能log4j允许把日志输出到不同的地方。例如控制台Console、文件Files等。还可以根据天数或者文件大小产生新的文件可以以流的形式将日志发送到其他地方。 常用类
类说明org.apache.log4j.ConsoleAppender控制台org.apache.log4j.FileAppender文件org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件org.apache.log4j.RollingFileAppender文件大小到达指定尺寸的时候产生一个新的文件org.apache.log4j.WriterAppender将日志信息以流格式发送到任意指定的地方
1.3 Layouts 用户可以根据自己的喜好格式化输出自己的日志文件。 Layouts提供四种日志输出样式根据HTML样式、自由指定样式、包含日志级别与信息的样式、包含日志时间、线程、类别等信息的样式。 常用类
类说明org.apache.log4j.HTMLLayout以HTML表格形式布局org.apache.log4j.PatternLayout灵活指定布局模式org.apache.log4j.SimpleLayout包含日志信息的级别和信息字符串org.apache.log4j.TTCCLayout包含日志产生的时间、线程、类别等信息
1.4 使用
导入POM依赖
dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version
/dependency创建配置文件 日志配置文件log4j.properties文件或者logback.xml
### 日志的输出级别是debug输出位置名字叫做stdout,D
log4j.rootLogger debug,stdout,D#### 输出DEBUG级别以上的日志到控制台
log4j.appender.stdoutorg.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target System.out
# 指定日志级别
log4j.appender.stdout.Threshold DEBUG
# 是否即时生效
log4j.appender.stdout.ImmediateFlush true
# 日志编码格式
log4j.appender.stdout.Encoding UTF-8
# 以特定格式输出日志
log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout
# 设置日志格式%d%m是输出代码中指定的消息的占位符
log4j.appender.stdout.layout.ConversionPattern %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p:%F:%L ] %m%n#### 输出WARNING级别以上的日志到文件
log4j.appender.Dorg.apache.log4j.FileAppender
# 日志路径
log4j.appender.D.File D:/logtest/error.log
# 日志以追加方式输入
log4j.appender.D.Append true
# 指定日志级别
log4j.appender.D.Threshold WARN
# 是否即时生效
log4j.appender.D.ImmediateFlush true
# 日志编码格式
log4j.appender.D.Encoding UTF-8
# 以特定格式输出日志
log4j.appender.D.layout org.apache.log4j.PatternLayout
# 设置日志格式%d%m是输出代码中指定的消息的占位符
log4j.appender.D.layout.ConversionPattern %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p:%F:%L ] %m%n
测试
package com.example.log;import org.apache.log4j.Logger;
import org.junit.Test;public class TestLog {// 获取日志记录器此纪录器将负责控制日志信息。Name一般是当前类的名字Logger logger Logger.getLogger(TestLog.class);Testpublic void testLog() {logger.debug(这是一条debug信息);logger.info(这是一条info信息);logger.warn(这是一条warn信息);logger.error(这是一条error信息);logger.fatal(这是一条fatal信息);try {int i 12 / 0;} catch (Exception e) {logger.error(e.getMessage());}}
}
效果
1.5 配置文件详解
1.5.1 配置根目录
log4j.rootLogger [level],appenderName,appenderName...level是日志记录的优先级分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或自定义的级别。 log4j建议只使用4个级别优先级从高到低分别是EOOR、WARN、INFO、DEBUG。通过级别定义可以控制到应用程序中相应级别日志信息的开关。例如定义了INFO级别则应用程序中所有DEBUG日志信息将不会被打印出来。appenderName指定日志信息输出到什么地方可以同时指定多个输出目的地。
1.5.2 配置日志信息输出目的地Appender
log4j提供的appender有以下几种
类说明org.apache.log4j.ConsoleAppender控制台org.apache.log4j.FileAppender文件org.apache.log4j.DailyRollingFileAppender每天产生一个日志文件org.apache.log4j.RollingFileAppender文件大小到达指定尺寸的时候产生一个新的文件org.apache.log4j.WriterAppender将日志信息以流格式发送到任意指定的地方
ConsoleAppender选项ThresholdWARN;指定日志消息输出的最低层次。
ImmediateFlushtrue;默认是true所有消息是否立即输出。
TargetSystem.err;默认情况下是System.out指定输出到控制台。FileAppender选项ThresholdWARN;指定日志消息输出的最低层次。
ImmediateFlushtrue;默认是true所有消息是否立即输出。
Filemylog.txt;指定消息输出到mylog.txt文件。
Appendfalse;默认是true即消息追加到指定文件中false指将消息覆盖指定的文件内容。DailyRollingFileAppender选项ThresholdWARN;指定日志消息输出的最低层次。
ImmediateFlushtrue;默认是true所有消息是否立即输出。
Filemylog.txt;指定消息输出到mylog.txt文件。
Appendfalse;默认是true即消息追加到指定文件中false指将消息覆盖指定的文件内容。
DatePattern.yyyy-ww 每周滚动一次文件即每周产生一个新的文件。1).yyyy-MM每月2).yyyy-ww每周3).yyyy-MM-dd每天4).yyyy-MM-dd-a每天两次5).yyyy-MM-dd-HH每小时6).yyyy-MM-dd-HH-mm每分钟RollingFileAppender选项ThresholdWARN;指定日志消息输出的最低层次。
ImmediateFlushtrue;默认是true所有消息是否立即输出。
Filemylog.txt;指定消息输出到mylog.txt文件。
Appendfalse;默认是true即消息追加到指定文件中false指将消息覆盖指定的文件内容。
MaxFileSize100KB;后缀可以是KBMB或者GB。在文件日志到达该大小时将会自动滚动即将原来的内容移动到mylog.log.1文件。
MaxBackupIndex2;指定可以产生的滚动文件的最大数1.5.3 输出格式设置
在配置文件中通过log4j.appender.A1.layout.ConversionPattern设置日志的输出格式。
参数说明%p输出日志信息优先级即DEBUG、INFO、WARN、ERROR、FATAL%d输出日志时间点的日期或时间默认格式为ISO8601也可以在其后指定格式比如%d{yyyy MMM dd HH:mm:ss,SSS}输出类似 2024年1月1日 120000,921%r输出自应用启动到输出该log信息耗费的毫秒数%c输出日志信息所属的类目通常就是所在类的全名%t输出产生该日志事件的线程名%l输出日志事件的发生位置相当于%C.%M(%F:%L)的组合包括类目名、发生的线程以及在代码中的行数%x输出和当前线程相关联的NDC嵌套诊断环境尤其用到相Java Servlets这样的多客户多线程的应用中%%输出一个’%字符%F输出日志消息产生时所在的文件名称%L输出代码中的行号%m输出代码中指定的消息产生的日志具体信息%n输出一个回车换行符windows平台为’/r/n’unix平台为‘\n’输出信息换行
二、Log4j2 log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式。2.x版本常用.xml后缀的文件进行配置除此之外还包含.json和.jsn配置文件。 log4j2虽然采用xml风格进行配置依然包含三大组件。Logger记录器、Appender输出目的地、Layout日志布局。配置文件的位置log4j2默认会在classpath目录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的文件。
2.1 XML配置文件解析
根节点Configuration有两个属性status和monitorinteval有两个子节点Appenders和Loggers可以定义多个Appender和Logger stataus指定log4j本身的打印日志的级别monitorinterval为log4j 2.x 新特性自动重载配置指定自动重载配置的间隔时间单位是s最小是5s。 Appenders节点常见的有三种子节点Console、File、RollingFile Console节点定义输出到控制台的Appender。File节点定义输出到指定位置的文件的Appender。RollingFile节点 定义超过指定大小自动删除旧的创建新的Appender。
通过在子节点加入patternLayout pattern”自定义信息格式“/ 进行日志布局。
占位符解释%c输出logger名称%C输出类名%d{HH:mm:ss.SSS}表示输出到毫秒的时间%t输出当前线程的名称%-5level输出日志级别-5表示左对齐并且固定输出5个字符如果不足在右边补0%logger输出logger名称%msg日志文件%n换行
其他常用占位符有
占位符解释%F输出所在的类文件名如Log4j2Test.java%L输出行号%M或%method输出所在方法名%l输出完整的错误位置包括类名、方法名、文件名、行数%p该条日志的优先级%replace{pattern}{regex}{substitution}将pattern的输出结果pattern按照正则表达式regex替换为substitution
Loggers节点 常见的Loggers节点有两种Root和Logger Root节点用来指定项目的根日志如果没有单独指定Logger那么就会默认使用该Root日志输出Logger节点用来单独指定日志的形式比如要为指定报下的class指定不同的日志级别等。
2.2 使用 测试是新建的SpringBoot项目 导入POM依赖
!-- 排除 Spring-boot-starter 默认的日志配置 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/exclusion/exclusions/dependency!-- 引入log4j2依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-log4j2/artifactId/dependency创建配置文件 2.1 如果配置文件名是log4j2-spring.xml则不用再另外配置会自动检测到该配置文件 2.2 如果配置文件名是自定义的需要在application.yml中另外配置 logging:config: log4j2.xmllevel:cn.jay.repository: trace配置文件内容如下
?xml version1.0 encodingUTF-8?
!--Configuration后面的status这个用于设置log4j2自身内部的信息输出可以不设置当设置成trace时你会看到log4j2内部各种详细输出--
!--monitorIntervalLog4j能够自动检测修改配置 文件和重新配置本身设置间隔秒数--
configuration monitorInterval5!--日志级别以及优先级排序: OFF FATAL ERROR WARN INFO DEBUG TRACE ALL --!--变量配置--Properties!-- 格式化输出%date表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %msg日志消息%n是换行符--!-- %logger{36} 表示 Logger 名字最长36个字符 --property nameLOG_PATTERN value%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [第%L行] - %msg%n /!-- 定义日志存储的路径 --property nameFILE_PATH valueD:\logtest /property nameFILE_NAME valuetestlog //Propertiesappendersconsole nameConsole targetSYSTEM_OUT!--输出日志的格式--PatternLayout pattern${LOG_PATTERN}/!--控制台只输出level及其以上级别的信息onMatch其他的直接拒绝onMismatch--ThresholdFilter levelinfo onMatchACCEPT onMismatchDENY//console!--文件会打印出所有信息这个log每次运行程序会自动清空由append属性决定适合临时测试用--File nameFileLog fileName${FILE_PATH}/test.log appendfalsePatternLayout pattern${LOG_PATTERN}//File!-- 这个会打印出所有的info及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩作为存档--RollingFile nameRollingFileInfo fileName${FILE_PATH}/info.log filePattern${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch--ThresholdFilter levelinfo onMatchACCEPT onMismatchDENY/PatternLayout pattern${LOG_PATTERN}/Policies!--interval属性用来指定多久滚动一次默认是1 hour--TimeBasedTriggeringPolicy interval1/SizeBasedTriggeringPolicy size10MB//Policies!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖--DefaultRolloverStrategy max15//RollingFile!-- 这个会打印出所有的warn及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩作为存档--RollingFile nameRollingFileWarn fileName${FILE_PATH}/warn.log filePattern${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch--ThresholdFilter levelwarn onMatchACCEPT onMismatchDENY/PatternLayout pattern${LOG_PATTERN}/Policies!--interval属性用来指定多久滚动一次默认是1 hour--TimeBasedTriggeringPolicy interval1/SizeBasedTriggeringPolicy size10MB//Policies!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖--DefaultRolloverStrategy max15//RollingFile!-- 这个会打印出所有的error及以下级别的信息每次大小超过size则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩作为存档--RollingFile nameRollingFileError fileName${FILE_PATH}/error.log filePattern${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz!--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch--ThresholdFilter levelerror onMatchACCEPT onMismatchDENY/PatternLayout pattern${LOG_PATTERN}/Policies!--interval属性用来指定多久滚动一次默认是1 hour--TimeBasedTriggeringPolicy interval1/SizeBasedTriggeringPolicy size10MB//Policies!-- DefaultRolloverStrategy属性如不设置则默认为最多同一文件夹下7个文件开始覆盖--DefaultRolloverStrategy max15//RollingFile/appenders!--Logger节点用来单独指定日志的形式比如要为指定包下的class指定不同的日志级别等。--!--然后定义loggers只有定义了logger并引入的appenderappender才会生效--loggers!--过滤掉spring和mybatis的一些无用的DEBUG信息--logger nameorg.mybatis levelinfo additivityfalseAppenderRef refConsole//logger!--监控系统信息--!--若是additivity设为false则 子Logger 只会在自己的appender里输出而不会在 父Logger 的appender里输出。--Logger nameorg.springframework levelinfo additivityfalseAppenderRef refConsole//Loggerroot levelinfoappender-ref refConsole/appender-ref refFileLog/appender-ref refRollingFileInfo/appender-ref refRollingFileWarn/appender-ref refRollingFileError//root/loggers
/configuration
测试
package com.example.log;import lombok.extern.log4j.Log4j2;Log4j2
public class TestLog {public static void main(String[] args) {for (int i 0; i 2; i) {log.trace(这是一个trace日志);log.debug(这是一个debug日志);log.info(这是一个info日志);log.warn(这是一个warn日志);log.error(这是一个error日志);log.fatal(这是一个严重错误日志);}}
} 三、LogBack
官网网站
3.1 logback模块
logback-core其他两个模块的基础模块logback-classlog4j的改良版本完整实现了Slf4j APIlogback-access访问模块于servlet容器集成提供通过Http来访问日志的功能
3.2 logback组件
Logger日志的记录器把它关联到应用对应的context后主要用于存放日志对象也可以定义日志类型、级别。Appender用于指定日志输出的目的地可以是控制台、文件、数据库等。Layout负责把时间转换成字符串格式化的日志信息输出。在logback中Layout对象被封装在encoder中。
3.3 logback配置 logback会依次读取以下类型配置文件 logback.grovylogback-test.xmllogback.xml
3.4 使用
spring-boot-starter其中包含了 spring-boot-starter-logging该依赖内容就是 Spring Boot 默认的日志框架 LogbackSLF4J。而 spring-boot-starter-web 包含了spring-boot-starte所以只需要引入web组件即可。
引入POM依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependencyresources下新建logback.xml文件
?xml version1.0 encodingUTF-8?
configuration!-- 日志存放路径 --property namelog.path value./logs /!-- 日志输出格式 --property namelog.pattern value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26} - [%method,%line] - %msg%n /!-- 控制台输出 --appender nameconsole classch.qos.logback.core.ConsoleAppenderencoderpattern${log.pattern}/pattern/encoder/appender!-- 系统日志输出 --appender namefile_info classch.qos.logback.core.rolling.RollingFileAppenderfile${log.path}/sys-info.log/file!-- 循环政策基于时间创建日志文件 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志文件名格式 --fileNamePattern${log.path}/sys-info.%d{yyyy-MM-dd}.log/fileNamePattern!-- 日志最大的历史 60天 --maxHistory60/maxHistory/rollingPolicyencoderpattern${log.pattern}/pattern/encoderfilter classch.qos.logback.classic.filter.LevelFilter!-- 过滤的级别 优先级从高到低依次为OFF关闭、FATAL严重错误信息、ERROR错误信息、WARN警告信息、INFO一般信息、DEBUG调试信息、TRACE、 ALL所有信息--levelINFO/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appenderappender namefile_error classch.qos.logback.core.rolling.RollingFileAppenderfile${log.path}/sys-error.log/file!-- 循环政策基于时间创建日志文件 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志文件名格式 --fileNamePattern${log.path}/sys-error.%d{yyyy-MM-dd}.log/fileNamePattern!-- 日志最大的历史 60天 --maxHistory60/maxHistory/rollingPolicyencoderpattern${log.pattern}/pattern/encoderfilter classch.qos.logback.classic.filter.LevelFilter!-- 过滤的级别 --levelERROR/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appenderroot leveltraceappender-ref refconsole //root!--系统操作日志--root levelinfoappender-ref reffile_info /appender-ref reffile_error //root!-- 系统模块日志级别控制 --logger namecom.example.demo leveltrace /!-- Spring日志级别控制 --logger nameorg.springframework levelwarn /
/configuration 测试
public class TestLog {private static final Logger log LoggerFactory.getLogger(TestLog.class);public static void main(String[] args) {log.trace(trace);log.debug(debug);log.info(info);log.warn(warn);log.error(error);}
}