做设计去那些网站找素材,一个网站怎么上线,网站 参数,视频黄台在线观看目录 一 log4j基本知识
1.1 log4j的日志级别
1.2 log4j的日志文件结构*
1.2.1 概述
1.2.2 详解
1.3 log4j的日志格式化api
1.3.1 api详解
1.3.2 演示案例 1.3.3 演示案例
1.4 log4j中onmatch和onmismatch的区别*
1.4.1 案例
1.4.2 onmatch的api
1.5 logback#x…目录 一 log4j基本知识
1.1 log4j的日志级别
1.2 log4j的日志文件结构*
1.2.1 概述
1.2.2 详解
1.3 log4j的日志格式化api
1.3.1 api详解
1.3.2 演示案例 1.3.3 演示案例
1.4 log4j中onmatch和onmismatch的区别*
1.4.1 案例
1.4.2 onmatch的api
1.5 logbacklog4j2和slf4j的区别
1.6 log4j2的异常日志格式配置
1.7 log4j2的异步日志配置
1.8 log4j2的日志滚动和过期策略配置
1.9 log4j2设置颜色
1.9.1 设置颜色
1.9.2 设置颜色方式
1.9.3 设置颜色案例
1.10 log4j2的配置使用
1.11 log4j2中includeLocationtrue
1.12 log4j2中日志格式化和日志分片
1.13 log4j2中排除包和依赖包 一 log4j基本知识
1.1 log4j的日志级别
Log4j定义了8个级别的log除去OFF和ALL可以说分为6个级别优先级从低到高依次为Alltracedebuginfowarnerrorfataloff。
当日志级别设置为某个值的时候低于它的日志信息将不会被记录只有高于设置的级别的信息会被记录。
【ALL】最低等级的用于打开所有日志记录。
【Trace】很低日志级别一般很少使用
【Debug】debug级别的主要输出调试性质的内容该级别日志主要用于在开发、测试阶段输出该级别的日志应尽可能地详尽便于在开发、测试阶段出现问题或者异常时对齐进行分析。
【Info】INFO日志主要记录系统关键信息旨在保留系统正常工作期间关键运行指标开发人员可以将初始化系统配置、业务状态变化信息或者用户业务流程中的核心处理记录到INFO日志中方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后在测试环境将日志级别调成 INFO然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况如果出现问题后是否这些日志能否提供有用的排查问题的信息。
【warn】warn级别的主要输出警告性质的内容这些内容是可以预知且是有规划的比如某个方法入参为空或者该参数的值不满足运行该方法的条件时在warn级别时应输出较为详尽的信息以便于事后对日志进行分析。
【error】error级别主要对于一些不可预知的信息如错误异常等比如在catch快中捕获的网络通信数据库连接等异常如果异常对系统的整个流程影响不大可以使用warn级别日志输出。在输出error级别的日志时尽量多地输出方法入参数、方法执行过程中产生的对象等数据在带有错误、异常对象的数据时需要将该对象一并输出。
【fatal】指出每个严重的错误事件将会导致应用程序的退出这个级别比较高了。重大错误这种级别你可以直接停止程序了。【1】https://blog.csdn.net/wsskl/article/details/137580290
【OFF】最高等级的用于关闭所有日志记录。
1.2 log4j的日志文件结构*
1.2.1 概述
Log4j的日志文件主要结构Loggers(记录器)Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别日志要输出的地方和日志以何种形式输出。
1.properties 定义一些变量如日志格式路径等。
2.Appenders定义日志输出的目标位置如控制台文件等。
3.Loggers定义日志记录器控制日志的输出级别和目标。
4.filters定义过滤条件控制日志输出。
其中configuration标签的status属性用于设置log4j2自身jar里代码的日志输出级别。将status设置为debug可以获得更详细的内部日志输出这对于调试和问题排查非常有帮助。 5.完整的结构 1.2.2 详解
Loggers(记录器)Loggers组件被分为7个级别优先级从低到高all、debug、info、warn、error、fatal、off。任何一个级别只输出本级别以及它级别以上的级别内容。
Appends输出源Log4j允许把日志输出到不同的地方如控制台Console、文件Files等。
Layout布局Layout的作用是控制Log信息的输出方式也就是格式化输出的信息。
1根节点Configuration有两个属性status和monitorinterval有两个子节点Appenders和Loggers(表明可以定义多个 Appender和Logger)
status用来指定log4j本身的打印日志的级别。
monitorinterval用于指定log4j自动重新配置的监测间隔时间单位是s最小是5s
2.Appenders节点常见的有三种子节点Console、RollingFile、File
1)Console节点用来定义输出到控制台的Appender name指定 Appender 的名字 targetSYSTEM_OUT 或SYSTEM_ERR一般只设置默认SYSTEM_OUT PatternLayout输出格式不设置默认为%m%n
2)File节点用来定义输出到指定位置的文件的Appender name指定Appender的名字 fileName指定输出日志的目的文件带全路径的文件名 PatternLayout输出格式不设置默认为%m%n
3)RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender
name指定Appender的名字
fileName指定输出日志的目的文件带全路径的文件名
PatternLayout输出格式不设置默认为%m%n
filePattern指定新建日志文件的名称格式
Policies指定滚动日志的策略就是什么时候进行新建日志文件输出日志
TimeBasedTriggeringPolicyPolicies子节点基于时间的滚动策略interval属性用来指定多久滚动一次默认是1 hour。modulatetrue用来调整时间比如现在是早上3aminterval是4那么第一次滚动是在4am接着是8am12am...而不是7am
SizeBasedTriggeringPolicyPolicies子节点基于指定文件大小的滚动策略size 属性用来定义每个日志文件的大小。
DefaultRolloverStrategy用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的创建新的(通过max属性)。
3.Loggers节点常见的有两种Root和Logger
1)root节点用来指定项目的根日志如果没有单独指定 Logger那么就会默认使用该 Root日志输出
level日志输出级别共有8个级别按照从低到高为All Trace Debug Info Warn Error Fatal OFF
AppenderRefRoot的子节点用来指定该日志输出到哪个Appender子节点的ref属性也就是前面的RollingFile中指定的name名称子节点的level也是日志输出级别。
2)logger节点用来单独指定日志的形式比如要为指定包下的class指定不同的日志级别等。每个logger可以指定一个levelTRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF不指定时level默认为ERROR。
level日志输出级别共有8个级别按照从低到高为All Trace Debug Info Warn Error Fatal OFF
name用来指定该 Logger所适用的类或者类所在的包全路径,继承自 Root节点.
AppenderRefLogger的子节点用来指定该日志输出到哪个Appender如果没有指定就会默认继承自 Root。如果指定了那么会在指定的这个Appender和 Root的Appender中都会输出此时我们可以设置 Logger的 additivityfalse只在自定义的 Appender中进行输出。
案例配置 1.3 log4j的日志格式化api
1.3.1 api详解 log4j - 输出格式控制, PatternLayout参数含义以及详细配置 - frank_cui - 博客园
1.3.2 演示案例
1.查看 %l 2. 查看%L 2. 查看%L 3查看%msg 1.3.3 演示案例
%L%line显示日志输出的代码所在的行数。Log4j在输出行号时会检查堆栈信息是耗时的操作。
%c{precision}%logger{precision}:
logger名称precision可以是一个正整数、负整数、1.、1.1..、.等格式用于指定输出的logger的名称的层级和详细程度。 %C{precision}%class{precision}输出调用者的权限定类名precision的规则与logger名称的用法相同。Log4j在输出类名时会检查堆栈信息是耗时的操作建议使用%c{precision}或%logger{precision}代替。
%d{pattern}%date{pattern}输出日志事件的时间pattern经常包含若干对包含时间/日期格式SimpleDateFormat的花括号。 %m%msg输出应用中自定义的日志内容
%M%method输出方法名。Log4j在输出行号时会检查堆栈信息是耗时的操作
%n输出当前运行平台所用的换行符一般放在末尾
%p|level{levellabel, levellabel, ...}%p|level{lengthn}%p|level{lowerCasetrue|false}
输出日志的级别。可以每个日志级别指定别名如%level{WARNW, DEBUGD, ERRORE, TRACET, INFOI}%level{length1}也可以实现同样的效果如果length的值超过了日志级别的名称那么使用正常的日志级别名称。
levellabel和lengthn可以组合使用如%level{ERRORError, length2}为ERROR级别指定了别名为其他日志级别限定了长度。此外还可以指定级别的大小写。
%T%tid%threadId输出日志的线程号非常有必要
%t%tn%thread%threadName输出日志的线程名称类似于线程号作用相同可选择其中一个。https://blog.csdn.net/qq_34253002/article/details/129821103
1.4 log4j中onmatch和onmismatch的区别*
1.4.1 案例
表示匹配级别info以上的则输出info级别以下的不匹配则忽略。 1.4.2 onmatch的api
OnMatch和onMismatch都有3个属性值分别为ACCEPTdeny和neutal Onmatch Onmismatch Accept匹配该级别以上 Accept:匹配该级别以下 Deny不匹配该级别以上 Deny不匹配该级别以下 Neutral该级别以上的由下一个filter处理如果当前是最后一个则表示匹配该级别以上。 该级别以及以下的由下一个filter处理如果当前是最后一个则不匹配该级别以下的。
Log4j2的onMatch和onMismatch属性值详解-CSDN博客
在log4j2中日志级别从低到高依次为 alltracedebuginfowarnerrorfataloff。
当设置onMismatchneutal时当前过滤器不会对日志事件做出接受或拒绝的决定而是将事件传递给下一个过滤器处理如果当前过滤器是最后一个那么不匹配当前日志级别以下的事件将被忽略。
例如第一个过滤器level设置为error且onmatch为denyonmismatchaccept这意味着会输出error以下级别warninfodebugtrace的日志
当onmismatchnetral则这些日志事件会继续传递给下一个过滤器处理而不是被当前过滤器直接处理或者忽略掉。
1.5 logbacklog4j2和slf4j的区别
1)SLF4J: 是一个日志门面抽象层不是具体实现;提供统一的日志接口允许用户在部署时选择不同的日志实现;支持多个日志实现logback、log4j、java.util.logging等
2)Log4j: Apache的开源日志实现;Log4j 1.x已经停止维护;Log4j 2.x是完全重写的版本
3)Logback; Log4j创始人开发的新一代日志框架;作为Log4j的继承者是SLF4J的原生实现。深入解析Java日志框架Logback、Log4j 2与SLF4J的区别与使用指南_slf4j logback-CSDN博客4)推荐使用方案
1. SLF4J Logback首选
2. SLF4J Log4j2备选
5为什么选用log4j2
相比与其他的日志系统log4j2丢数据这种情况少disruptor技术在多线程环境下性能高于logback等10倍以上利用jdk1.5并发的特性减少了死锁的发生https://blog.csdn.net/weixin_44001965/article/details/143703014
对于Java工程师来说关于日志工具的使用最佳实践就是在应用中使用。如log4j2 slf4j这样的组合来进行日志输出。这样做的最大好处就是业务层的开发不需要关心底层日志框架的实现及细节在编码的时候也不需要考虑日后更换框架所带来的成本。这也是日志接口门面模式所带来的好处。
Log4j2使用详解
1.6 log4j2的异常日志格式配置
https://blog.csdn.net/sz85850597/article/details/120572827 1.7 log4j2的异步日志配置
https://blog.51cto.com/1936625305/11823448 loggers !--includeLocation 打印行号如果这里不设置就算%L 也不会打印行号-- AsyncRoot levelDEBUG includeLocationtrue AppenderRef refCONSOLE/ /AsyncRoot AsyncLogger namecom.luna levelINFO includeLocationtrue appender-ref refFILE-INFO/ appender-ref refFILE-ERROR/ /AsyncLogger AsyncLogger namedruid.sql.Statement levelDEBUG additivityfalse includeLocationtrue appender-ref refCONSOLE/ appender-ref refFILE-INFO/ /AsyncLogger /loggers
1.8 log4j2的日志滚动和过期策略配置 !--http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingRandomAccessFileAppender-- !-- nameFILE-INFO appender 名字可以自定义logger引用使用 fileName当前日志名称如果是多级目录则会自动创建 filePattern归档日志格式 -- RollingRandomAccessFile nameFILE-INFO fileName${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.log filePattern${BASE_LOG_PATH}/${SERVER_NAME}/${SERVER_NAME}-info.%d{yyyy-MM-dd}-%i.log.gz !-- minLevel最小日志级别 maxLevel最大日志级别 onMatch匹配成功接收 onMismatch匹配失败丢弃 -- LevelRangeFilter minLevelWARN maxLevelDEBUG onMatchACCEPT onMismatchDENY/ !-- pattern日志格式 charset日志字符编码 -- PatternLayout pattern${PATTERN} charset${CHARSET} / Policies !--每天滚动一次interval的单位 取决于filePattern 我这里定义的是dd天也就是每天会产生一个新的日志文件 -- TimeBasedTriggeringPolicy interval1/ !--或者日志文件达到10KB 滚动一次-- SizeBasedTriggeringPolicy size10KB/ /Policies !--日志删除策略-- !--DefaultRolloverStrategy 默认的max7 代表的是dd天最多产生7个文件多余自动删除但是我们会自己定义删除策略所以要屏蔽这个配置如果不屏蔽这个配置则当天日志最多只有7个 -- !--源码org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.Builder.build 当fileIndexnomax不在使用max变量 -- DefaultRolloverStrategy fileIndexnomax !--basePath从此处扫描需要删除的日志基本路径maxDepth:要访问的日志目录最大级别数默认是1 -- !--例如我们的日志是/data/logs/app/app-info.logbasePath/data/logs,maxDepth2 恰好能访问到app-info.log -- Delete basePath${BASE_LOG_PATH}/${SERVER_NAME} maxDepth2 !--删除正则匹配到文件名-- IfFileName glob*-info.*.log.gz/ !--删除日志距离现在多长事件P1D代表是1天-- !--http://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/rolling/action/Duration.html-- IfLastModified ageP1D/ /Delete /DefaultRolloverStrategy /RollingRandomAccessFile
详细配置https://blog.51cto.com/1936625305/11823448 1.9 log4j2设置颜色
1.9.1 设置颜色
SpringBoot整合Log4j2日志框架 - Evan1024 - 博客园 整个log4j2框架 Console nameconsoleAppender targetSYSTEM_OUT !--控制台只输出level及以上级别的信息onMatch其他的直接拒绝onMismatch -- ThresholdFilter levelinfo onMatchACCEPT onMismatchDENY/ !--设置日志格式及颜色-- PatternLayout pattern%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red} noConsoleNoAnsifalse/ /Console Console nameconsoleAppender targetSYSTEM_OUT!--设置日志格式及颜色--PatternLayout pattern%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red} disableAnsifalse noConsoleNoAnsifalse//Console
1.9.2 设置颜色方式
修改日志配置中pattern属性 通过%style{xxxx}{styleValue1,styleValue2}和%highlight{}可以很容易修改日志样式。设置属性disableAnsi为false,表示开启Ansi这样才会输出有样式的日志。
https://mp.weixin.qq.com/s/jN9h2FjSQKPXv8mkShkJ_g
方式1style{pattern}{ANSI style}
%style{%d{ISO8601}}{black} %style{[%t]}{blue} %style{%-5level:}{yellow} %style{%msg%n%throwable}{green}
方式2highlight{pattern}{style}
%highlight{%d [%t] %-5level: %msg%n%throwable}
%highlight{%d [%t] %-5level: %msg%n%throwable}{STYLELogback} 1.9.3 设置颜色案例
%style{%throwable}{red} 异常信息标红色
PatternLayout pattern%d{HH:mm:ss.SSS} %-5level %class{36} %style{%L}{red} %M - %msg%style{%throwable}{red}%n disableAnsifalse noConsoleNoAnsifalse/
案例截图如下https://mp.weixin.qq.com/s/yYzFN7OTMh9IO8x_LaGLWg 1.10 log4j2的配置使用
https://cloud.tencent.com/developer/article/2332025 使用了Lombok提供的Log4j2注解自动生成了一个名为log的Logger对象。在类中的方法中通过log对象记录了相应的日志信息。 1.11 log4j2中includeLocationtrue
在includeLocationtrue的作用确保日志输出中包含类的路径和行号信息对于调式和定位问题非常有帮助。如下图 AsyncLogger name”st” level”debug” includeLocation”true” /AsyncLogger
当设置为false时不再输出行号信息。 1.12 log4j2中日志格式化和日志分片
1.日志格式化
2.日志分片https://mp.weixin.qq.com/s/-a3tvoOo_3ppX68fP92FOA 1.13 log4j2中排除包和依赖包
1.排除包
log4j与log4j2性能对比及log4j升级至log4j2方案 exclusions !-- log4j 相关包 -- exclusion artifactIdlog4j/artifactId groupIdlog4j/groupId /exclusion exclusion groupIdorg.slf4j/groupId artifactIdlog4j/artifactId /exclusion exclusion groupIdorg.slf4j/groupId artifactIdslf4j-log4j12/artifactId /exclusion !-- log4j 的springboot starter -- exclusion artifactIdspring-boot-starter-log4j/artifactId groupIdorg.springframework.boot/groupId /exclusion !-- logback 相关包 -- exclusion artifactIdlogback-classic/artifactId groupIdch.qos.logback/groupId /exclusion exclusion artifactIdlogback-core/artifactId groupIdch.qos.logback/groupId /exclusion !-- slf4j 相关包 -- exclusion artifactIdslf4j-log4j12/artifactId groupIdorg.slf4j/groupId /exclusion exclusion artifactIdlog4j-to-slf4j/artifactId groupIdorg.apache.logging.log4j/groupId /exclusion exclusion artifactIdslf4j-api/artifactId groupIdorg.slf4j/groupId /exclusion
2.新增包 !-- log4j2的api、core和web包 -- dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-api/artifactId version2.11.1/version /dependency dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-core/artifactId version2.11.1/version /dependency dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-web/artifactId version2.11.1/version /dependency !-- slf4j与log4j2的连接包 -- dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-slf4j-impl/artifactId version2.11.1/version /dependency !-- log4j与log4j2的连接包 -- dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-1.2-api/artifactId version2.11.1/version /dependency !-- log4j2支撑完全异步模式的关键api -- dependency groupIdcom.lmax/groupId artifactIddisruptor/artifactId version3.4.2/version /dependency !-- slf4j本身的api -- dependency groupIdorg.slf4j/groupId artifactIdslf4j-api/artifactId /dependency
3.框架对应的包名
在log4j版本Logger的包路径是org.apache.log4j。
在log4j2版本Logger的包路径是org.apache.logging.log4j
4替换日志配置文件。
在log4j版本配置文件为log4j.xml或者log4j.properties。
在log4j2版本配置文件为log4j2.xml。