Java log的学习

学习Java log:配置文件log4j2.xml的参数学习

xml部分原文:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="warn" monitorInterval="60" strict="true">

  <!-- 设置存放日志文件的路径 -->
  <properties>
    <property name="logpath">./logs</property>
  </properties>
  
  <appenders>
  
    <!-- 控制器输出 -->
    <Console name="console" target="SYSTEM_OUT">
	  <!-- 输出格式 -->
      <PatternLayout pattern="%-d{yyyy-MM-dd HH:mm:ss.SSS} %p %X{ip} %t %C %M %m %n"/>
    </Console>
	
	<!-- system.log -->
    <RollingRandomAccessFile name="UFO.SYSTEM" immediateFlush="true" bufferSize="4096"
      fileName="${logpath}/system.log"
      filePattern="${logpath}/system.log.%d{yyyy-MM-dd-hh-mm}.zip"
      ignoreExceptions="false">
      <PatternLayout pattern="%-d{yyyy-MM-dd HH:mm:ss.SSS} %p %X{ip} %t %C %M %m %n"/>
      <Filters>
        <ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
        <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
        <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <Policies>
        <CronTriggeringPolicy schedule="0 0 2 * * ?" evaluateOnStartup="true"/>
      </Policies>
      <DefaultRolloverStrategy>  
        <Delete basePath="${logpath}" maxDepth="2" followLinks="true">
          <IfFileName glob="system.log.*.zip"/>
          <IfLastModified age="10s"/>
        </Delete>
      </DefaultRolloverStrategy>
    </RollingRandomAccessFile>
	
	<!-- error.log -->
	<RollingRandomAccessFile name="UFO.ERROR" immediateFlush="true" bufferSize="4096"
      fileName="${logpath}/error.log"
      filePattern="${logpath}/error.log.%d{yyyy-MM-dd}.zip"
      ignoreExceptions="false">
      <PatternLayout pattern="%-d{yyyy-MM-dd HH:mm:ss.SSS} %p %X{ip} %t %C %M %m %n"/>
      <Filters>
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
      </Filters>
      <TimeBasedTriggeringPolicy/>    
      <DefaultRolloverStrategy>
        <Delete basePath="${logpath}" maxDepth="2" followLinks="true">
          <IfFileName glob="error.log.*.zip"/>
          <IfLastModified age="7d"/>
        </Delete>
      </DefaultRolloverStrategy>
    </RollingRandomAccessFile>
  </appenders>
  
  <loggers>
    <Logger additivity="false" name="UFO.SYSTEM" level="INFO">
      <AppenderRef ref="UFO.SYSTEM"/>
      <AppenderRef ref="UFO.ERROR"/>
    </Logger>
	
	<!-- 根据具体需要添加需要打印的包的日志信息,这里主要关注tomcat以及zookeeper的日志 -->
    <Logger additivity="false" name="org.apache" level="ERROR">
      <AppenderRef ref="console"/>
    </Logger>
	
	<!--针对request以及response的信息配置输出级别-->
    <Logger additivity="true" name="com.alibaba.dubbo.rpc.protocol.rest.support" level="INFO">
      <AppenderRef ref="console"/>
    </Logger>
    <!-- 输出sql日志 -->
    <Logger additivity="true" name="com.ufo.mapper" level="DEBUG" />
	
	<!-- 设置根目录 -->
    <Root level="INFO" includeLocation="true">
      <AppenderRef ref="console"/>
      <AppenderRef ref="UFO.SYSTEM"/>
	  <AppenderRef ref="UFO.ERROR"/>
    </Root>
  </loggers>
</configuration>

1.pattern的对应值

这里仅说明常用参数:

  • %-d{yyyy-MM-dd HH:mm:ss.SSS} 设置日志记录的时间 {}中为时间格式
  • %p 设置日志的级别:TRACE/DEBUG/INFO/WARN/ERROR
  • %X{ip} 设置当前打印日志的ip
  • %t 设置当前日志打印的线程的名称
  • %C 设置当前打印的类的全路径名
  • %M 设置当前打印的方法名
  • %m 设置当前打印的消息
  • %n 设置换行符

2.appender

  • ConsoleAppender 控制台打印  对应标签<console>
  • FileAppender以及RandomAccessFileAppender  输出到对应日志文件中 对应标签<File>和 <RandomAccessFile>
  • RollingFileAppender以及RollingRandomAccessFileAppender 输出到对应日志文件中,并且进行滚动 对应标签<RollingFile> 和 <RollingRandomAccessFile>

3.RollingRandomAccessFileAppender参数说明

  • name appender名称
  • fileName 输出文件名称
  • filePattern 输出格式
  • immediateFlush 在日志有变化时是否立即刷新
  • bufferSize 缓冲池大小,对于异步刷新这个字段似乎没有什么用
  • ThresholdFilter标签:
    • level,表示最低接受的日志级别,博客配置的为INFO,即我们期望打印INFO级别以上的日志。

    • onMatch,表示当日志事件的日志级别与level一致时,应怎么做。一般为ACCEPT,表示接受。

    • onMismatch,表示日志事件的日志级别与level不一致时,应怎么做。一般为DENY,表示拒绝。也可以为NEUTRAL表示中立。

  • Policies 策略:rollover(当日志文件满足特定条件时,将触发事件,例如创建一个新的文件/把原有的文件归档/删除等,具体操作由RolloverStrategy决定)
    • OnStartupTriggeringPolicy  jvm重启就进行一次rollover
    • SizeBasedTriggeringPolicy size="10 MB"  文件大小达到10MB进行一次rollover
    • TimeBasedTriggeringPolicy interval="2" modulate="true" 根据时间进行rollover,
      • interval 时间的数量,时间的单位为filePattern的最小时间单位,上例中是到dd,即为天,则这里代表2天进行一次rollover;
      • modulate 时间的固定偏移量,保证每次发生rollover的时候,都是在一个时间节点上(到0秒,比如说1天为单位,会在00:00:00时进行操作,如果以小时为单位,则会在固定小时点进行打包,比如12:00:00时操作等)
    • CronTriggeringPolicy schedule="0 0 2 * * ?" evaluateOnStartup="true" 定时策略,使用cron表达式
      • evaluateOnStartup:true,在TriggeringPolicy初始时评估是否需要补充一次归档;false,不检测
    • CompositeTriggeringPolicy 组合了多个triggering policies,如果配置的策略中的任何一个返回true,则返回true。CompositeTriggeringPolicy简单的通过在policies元素包裹其他的policies来配置。
  • Rollover策略,具体操作
    • DefaultRolloverStrategy
      • Delete 删除文件 basePath 文件路径 maxDepth目录深度(目前没什么感觉,1为当前目录,2为当前目录的子目录,以此类推)
        • IfFileName标签  匹配文件名
        • IfLastModified标签 匹配日志文件的保留时间:数字+D 天/H 小时/M 分钟/S 秒
      • 默认是日志文件按文件名格式打包 max为最多保留日志包的数量
    • DirectWriteRolloverStrategy 日志直接写入由文件模式表示的文件

4.Logger/root

  • level 日志输出最低级别
  • name 要打印日志的包路径(个人理解)如果为appender名称,则对应当前项目中所有用到logger的包;如果为包路径,则为指定包,输出指定包的日志
  • additivity 是否在子appender的日志内容要不要在父appender中显示,true为要,false则子appender的内容仅在子appender的范围内显示(不是很清楚)
  • appender-ref 关联的appender

5.后续

在一个maven工程中,是如何调用log4j2.xml进行操作的?

如果出现多个xml,调用顺序应该是怎样?

在使用disconf的前提下,为什么必须使用log4jDisconf的动态配置类才能正常打印日志,对于disconf来说,xml应仅有托管的作用,并不具备动态配置的作用?

一个log是如何打印出来的?

xml对应的properties的基本写法

log4j与logback slf4j等日志类的关系

 

参考文章链接:

https://blog.csdn.net/garfielder007/article/details/82874529

https://www.wandouip.com/t5i369144/

https://garssion.iteye.com/blog/2369929

https://blog.csdn.net/qq_33200504/article/details/78413438

https://www.cnblogs.com/xkxf/p/10029769.html

https://www.cnblogs.com/edgedance/p/6979622.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值