欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

log4j2配置详情

发布时间:2024/3/13 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 log4j2配置详情 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
<?xml version="1.0" encoding="UTF-8"?> /app_data/logs/my_app_log UTF-8 [%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5p][%T][%c.%M:%L] %msg%xEx%n 1MB <Appenders><!-- Console Appender常用于将日志输出到System.out,一般用在开发环境 --><Console name="Console" target="SYSTEM_OUT"><!-- 接受程序中DEBUG级别的日志进行处理,onMatch的值为 ACCEPT 表示接受该级别及以上的,onMismatch 的值为 DENY 表示拒绝该等级一下的--> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><!-- 在大多数情况下,Appender将格式化LogEvent的责任委托给Layout --><PatternLayout pattern="${log_pattern}"/></Console><!-- RollingFile name:指定Appender的名字,fileName:指定输出日志的目的文件带全路径的文件名,filePattern:指定新建日志文件的名称格式. PatternLayout:输出格式,不设置默认为:%m%n,Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志.--> <!-- 这个RollingFile Appender会打印出所有的DEBUG及以下级别(DEBUG、INFO、ERROR、FATAL、OFF)的信息 --><RollingFile name="DebugLogRollingFile" fileName="${log_base_path}/my_app_debug.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_debug_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}" charset="UTF-8"/><!-- Policies表示一个CompositeTriggeringPolicy,可以组合多个TriggeringPolicy,只要内部的任意一个TriggeringPolicy满足触发条件,都会滚动日志 --><Policies><!-- TimeBasedTriggeringPolicy用于按时间滚动日志。只要filePattern属性值中的日期/时间模式(pattern)不再应用于当前文件时就进行日志滚动。这种规则通过interval和modulate属性来配置。interval属性指定一个整数,用于基于日期/时间模式中的最小的时间单位数滚动一次。例如,filePattern值为/app_data/logs/my_app/$${date:yyyy_MM_dd}/my_app_%d{yyyy_MM_dd_HH}_%i.log,这里使用小时作为最小的时间单位时,假如interval参数值为4,则表示每4小时滚动一次。默认值为1。modulate表示是否调整interval属性值以便下次滚动发生在interval边界处。如果时间最小单位为小时,当前时间为早上3点,间隔为4小时,则第一次滚动将发生在早上4点时(而不是早上7点),后续滚动将发生在早上8点、中午12点、下午4点等时刻 --><TimeBasedTriggeringPolicy interval="1" modulate="false"/><!-- SizeBasedTriggeringPolicy用于按文件大小滚动日志。每当日志文件超过size指定的大小(一般不超过几十MB,否则使用软件打开导出的日志时很不方便),则这size大小的日志会自动存入按filePattern属性指定建立的文件夹下面并进行压缩存档 --><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><!-- DefaultRolloverStrategy可以同时接受RollingFileAppender中filePattern属性值中日期/时间和整数计数器(%i)的pattern,当日期/时间满足条件时,则会使用当前的日期/时间生成新的日志文件,如果filePattern属性值中含有一个整数计数器%i,则在每次滚动时该整数都会增加,如果filePattern属性值中同时包含了日期/时间和整数计数器(%i),计数器会在日期/时间不变时而满足其他滚动触发条件时(文件大小)开始自增,直到日期/时间发生变化时,计数器会重新自增。以.gz、.zip、.bz2、deflate、pack200或xz结尾的filePattern值,会在日志文件归档时以后缀对应的格式进行压缩。min属性指定计数器的最小值,默认为1。max属性指定计数器的最大值,一旦计数器达到了最大值,最早的归档将会在每次滚动时被删除,默认值为7。fileIndex属性如果设置为max(默认),则具有更大索引的文件比具有更小索引的文件内容更新,如果设置为min,文件将重命名且计数器将遵循Fixed Window策略,这两种情况均有可能导致批量的文件重命名,自2.8版本开始,如果fileIndex属性设置为nomax,则min和max属性值都将会被忽略,文件编号将每次递增1,每次滚动都会递增到更大的值,且没有最大文件编号的限制 --><!--<DefaultRolloverStrategy max="100" min="1" fileIndex = "nomax"/>--><DefaultRolloverStrategy fileIndex="nomax"><!-- Log4j 2.5引入了删除动作(Delete元素)。在滚动删除旧的日志文件时,相比使用DefaultRolloverStrategy的max属性,该功能可以让用户拥有更多的删除控制。删除动作可以让用户配置若干个条件来删除相对于基准目录的文件。该功能可以删除非日志文件,使用时一定要小心。可以通过testMode属性来测试配置是否会错删文件。basePath属性值用于指定删除文件的基准目录,必须显式指定。maxDepth属性指定扫描目录的最大层级,0表示仅能访问基准目录(安全限制不能访问的情况除外),Integer.MAX_VALUE值表示可以访问所有层级。默认值为1,表示仅扫描基准目录下的文件。testMode属性值如果设置为true,文件不会实际删除,而是在status logger打印一条INFO级别的消息,可以使用该功能来测试是否会错删目标文件,默认为false。--><!-- 这里的Delete元素配置了每次滚动都会删除基准目录下匹配“*/my_app_debug_*.log.gz”日志文件,只要9分钟以前的日志文件总大小超过2MB,或9分钟以前的日志文件文件总数超过2个就按时间顺序删除较早的日志文件。该元素可以防止日志文件所在分区的磁盘空间被占满。特别需要注意的是,只有在发生日志滚动时才会尝试进行删除,否则即使满足了删除条件,但如果没有新的滚动日志生成的话也不会发生删除操作。 --><Delete basePath="${log_base_path}" maxDepth="2"><!-- Delete元素里可以指定若干个PathCondition类型的元素。如果指定了不止一个条件,则这些条件都需要在删除之前接受某个路径。这些条件可以嵌套,只有外部条件接受某个路径之后,其内部条件才会决定是否接受该路径。如果这些条件没有嵌套,则它们的执行顺序是任意的。这些条件也可以通过使用IfAll, IfAny和IfNot等组合条件进行AND、OR和NOT等逻辑运算。用户也可以创建自定义条件或使用内置条件:- IfFileName:接受匹配正则表达式或glob的文件路径;- IfLastModified:接受比指定时段早或一样早的文件;- IfAccumulatedFileCount:在遍历文件树时文件总数超过文件数上限后接受路径;- IfAccumulatedFileSize:在遍历文件树时文件总大小超过上限后接受路径;- IfAll:如果所有内嵌条件都接受了某个路径才会接受该路径,相当于AND逻辑,其内嵌条件的执行顺序是任意的;- IfAny:如果任意一个内嵌条件接受了某个目录就接受该目录,相当于OR逻辑,其内嵌条件的执行顺序是任意的;- IfNot:如果内嵌条件不接受某个路径就接收该路径,相当于NOT逻辑。--><!-- IfFileName可以通过glob(使用受限的模式语言,比正则更简单)或regex属性(正则)来匹配相对路径(相对于Delete的basePath属性指定的基准目录)--><!-- 当外部的条件满足时才会计算内部的条件,内部的同级条件的计算顺序是任意的。 --><IfFileName glob="*/my_app_debug_*.log.gz"><!-- IfLastModified可以通过age属性值来指定接受最后修改时间为指定时间或早于指定时间的路径,该属性的值可参考org.apache.logging.log4j.core.appender.rolling.action.Duration.parse(CharSequence text)方法的文档 --><!-- 这里的IfLastModified指定删除达到或超过60天内的文件 --><IfLastModified age="9m"><!-- 这里的IfAny内嵌了两个PathCondition,表示满足任意一个条件即可 --><IfAny><!-- IfAccumulatedFileSize可通过exceeds属性值指定一个文件总大小上限值。如果文件数超过了该上限值则删除文件 --><IfAccumulatedFileSize exceeds="2MB"/><!-- IfAccumulatedFileCount可通过exceeds属性值指定一个文件总数上限值。如果文件数超过了该上限值则删除文件 --><IfAccumulatedFileCount exceeds="2"/></IfAny></IfLastModified></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="InfoLogRollingFile" fileName="${log_base_path}/my_app_info.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_info_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_info_*.log.gz"><!-- 这里表示匹配“*/my_app_info_*.log.gz”模式的日志文件的删除策略如下:- 只要日志文件总数量超过5个就删除按时间顺序最早的日志文件- 只要日志文件总大小超过10MB就会删除按时间顺序最早的日志文件- 只要日志文件最近修改时间为9分钟前或更早就会删除按时间顺序最早的日志文件 --><IfAny><IfAccumulatedFileSize exceeds="8MB"/><IfAccumulatedFileCount exceeds="5"/><IfLastModified age="9m"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="WarnLogRollingFile" fileName="${log_base_path}/my_app_warn.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_warn_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_warn_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="ErrorLogRollingFile" fileName="${log_base_path}/my_app_error.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_error_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_error_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><!-- 记录druid的SQL语句 --><RollingFile name="DruidSqlRollingFile" fileName="${log_base_path}/druid.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/druid_%d{yyyy_MM_dd_HH}_%i.log.gz"><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2" testMode="true"><IfFileName glob="*/druid_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile> </Appenders><!--定义logger,只有定义了logger并引入的appender,appender才会生效--> <Loggers><!-- 当Logger在配置文件中声明时,就创建了一个LoggerConfig对象,两者一一对应,LoggerConfig包含一些Filter、这些Filters用于过滤传递给任意Appender的LogEvent,它还包含一些Appender的引用。Logger本身执行无指向的动作,它仅含有一个与LoggerConfig关联的名称(通过name属性指定),root Logger具有固定的默认名称,其他Logger需要指定各自的name属性值。LoggerConfig会被分配一个日志级别,通过level属性来指定。内建的日志级别按优先级从高到底排序有:OFF > FATAL >ERROR > WARN > INFO > DEBUG > TRACE > ALL,Log4j 2 也支持自定义的日志级别。--><Root level="ALL"><AppenderRef ref="Console"/><AppenderRef ref="InfoLogRollingFile"/><AppenderRef ref="WarnLogRollingFile"/><AppenderRef ref="DebugLogRollingFile"/><AppenderRef ref="ErrorLogRollingFile"/></Root><!-- 每个LoggerConfig的日志级别如果没有显式配置,则会继承其父级LoggerConfig的日志级别,而root LoggerConfig如果没有配置日志级别,则会为其分配一个默认的ERROR级别 --><!-- 某个Logger所允许的每条日志打印请求都会传递给其LoggerConfig中的所有Appender,也会传递给该LoggerConfig的parentLoggerConfig中的Appender,这种现象称为相加性(Additivity)。也就是说,Appender会从LoggerConfig的继承中继承相加性。这种特性可以用来汇整某几个logger的输出,可以在声明Logger的配置文件中设置additivity="false"来禁用这种叠加继承 ,则这个logger不会将日志流反馈到root中,可以达到以logger中配置的appender方式来输出日志而其他地方输出的目的name 为要输出日志的包名或者类名--><!--记录druid-sql的记录--><Logger name="druid.sql.Statement" level="debug" additivity="false"><appender-ref ref="DruidSqlRollingFile"/></Logger><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><Logger name="org.springframework" level="INFO"/><Logger name="org.mybatis" level="INFO"/><!--log4j2 自带过滤日志--><Logger name="org.apache.catalina.startup.DigesterFactory" level="error"/><Logger name="org.apache.catalina.util.LifecycleBase" level="error"/><Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/><Logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/><Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/><Logger name="org.crsh.plugin" level="warn"/><Logger name="org.crsh.ssh" level="warn"/><Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error"/><Logger name="org.hibernate.validator.internal.util.Version" level="warn"/><Logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/><Logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/><Logger name="org.thymeleaf" level="warn"/> </Loggers>

在这里插入代码片

总结

以上是生活随笔为你收集整理的log4j2配置详情的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。