log4j2日志配置

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="OFF">
  <!-- Properties 模块 : 配置一些全局的属性值 -->
  <properties>
    <property name="LOG_HOME">/data/logs</property>
    <property name="APP_NAME">cb-service-user</property>
    <!-- PatternLayout 日志输出格式模板:
      %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}
      %-5p :输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL(级别从左显示5个字符宽度)。
      %M:输出产生日志信息的方法名。
      %F:输出日志消息产生时所在的文件名称。
      %L:日志输出所在行数 日志输出所在行数
      %t:输出产生该日志事件的线程名
      %msg:日志消息
      %r:输出自应用程序启动到输出该log信息耗费的毫秒数
      %n:是换行符
      %X{xxx}:输出在ThreadContext中变量xxx的值,该值需要在ThreadContext中进行设置,
                service在ConsumerLogFilter和ProviderLogFilter设置;
                web统一在Interceptor中设置
     -->
    <property name="CONSOLE_PATTERN_LAYOUT">[%d{HH:mm:ss.SSS}] [%-5p] [%F:%M] %msg%rEx%n</property>
    <property name="CONSOLE_PATTERN_LAYOUT_APP">[%d{HH:mm:ss.SSS}] [%-5p] [%F:%M:%L] [%X{MSG-NO}] [%X{TYPE}] [%X{REMOTE-HOST}:%X{REMOTE-PORT} -> %X{LOCAL-HOST}:%X{LOCAL-PORT}] %msg%rEx%n</property>
    <property name="PATTERN_LAYOUT">[%d] [%-5p] [%F:%M] %msg%rEx%n</property>
    <property name="PATTERN_LAYOUT_APP">[%d] [%-5p] [%F:%M:%L] [%X{MSG-NO}] [%X{TYPE}] [%X{REMOTE-HOST}:%X{REMOTE-PORT} -> %X{LOCAL-HOST}:%X{LOCAL-PORT}] %msg%rEx%n</property>
  </properties>

  <!-- Appenders 模块 : 日志输出相关配置 -->
  <Appenders>
    <!-- 输出到Console -->
    <!-- Console节点 配置控制台日志输出:
         name:指定Appender的名字.
         target: SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.
         PatternLayout: 输出格式,采用properties中定义的格式.-->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="${CONSOLE_PATTERN_LAYOUT_APP}" />
    </Console>

    <!-- 输出到滚动保存的文件 -->
    <RollingRandomAccessFile name="RollingRandomAccessFile"
      fileName="${LOG_HOME}/${APP_NAME}.log"
      filePattern="${LOG_HOME}/$${date:yyyy-MM}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i">
      <PatternLayout pattern="${PATTERN_LAYOUT_APP}" />
      <Policies>
        <!-- TimeBasedTriggeringPolicy 通过时间策略来对log文件进行处理
             interval 的值含义取决于filePattern定义的最小的时间粒度,当前为一个月 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <!--SizeBasedTriggeringPolicy 基于对log文件大小的判断策略:
            当log文件大于设定的阈值时,将触发封存动作。
            可设定的log文件大小的单位有bytes、KB、MB或GB。-->
        <SizeBasedTriggeringPolicy size="500 MB" />
      </Policies>
    </RollingRandomAccessFile>

    <!--单独处理ERROR级别的日志,并把该日志放到logs/xxx-error.log文件中 -->
    <RollingFile name="RollingFileError" fileName="${LOG_HOME}/${APP_NAME}-error.log"
      filePattern="${LOG_HOME}/error/${APP_NAME}-error.log.%i">
      <!-- ThresholdFilter 过滤器:
           控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
           日志的级别: ALL< Trace < DEBUG < INFO < WARN < ERROR < FATAL < OFF。-->
      <ThresholdFilter level="ERROR" />
      <PatternLayout pattern="${PATTERN_LAYOUT_APP}" />
      <Policies>
        <SizeBasedTriggeringPolicy size="500 MB" />
      </Policies>
    </RollingFile>

    <!--DRUID的日志记录追加器 -->
    <RollingFile name="druidSqlRollingFile" fileName="${LOG_HOME}/${APP_NAME}-sql.log"
      filePattern="${LOG_HOME}/$${date:yyyy-MM}/${APP_NAME}-sql.log.%d{yyyy-MM-dd}.%i">
      <PatternLayout pattern="${PATTERN_LAYOUT_APP}" />
      <Policies>
        <SizeBasedTriggeringPolicy size="500 MB" />
        <TimeBasedTriggeringPolicy />
      </Policies>
    </RollingFile>

  </Appenders>

  <Loggers>
    <!-- Logger同步日志配置,一般需要将additivity设置为false,日志不会重复打印否则还会在root里面打印 -->
    <Logger name="com.joinpay.cb" level="DEBUG" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="RollingRandomAccessFile" />
      <AppenderRef ref="RollingFileError" />
    </Logger>

    <!--记录druid-sql的记录
     AsyncLogger异步日志配置,同样需要将additivity设置为false
     -->
    <AsyncLogger name="druid.sql.Statement" level="DEBUG" additivity="false">
      <AppenderRef ref="Console" />
    </AsyncLogger>

    <!-- level="INFO" 只能够输出level级别是INFO及INFO以上的
         Root日志必须配置相当于父类日志,level默认为Error
    -->
    <Root level="INFO">
      <AppenderRef ref="druidSqlRollingFile" level="INFO" />
    </Root>
  </Loggers>
</Configuration>

  

上一篇:java-slf4j-log4j在传递给Asynchronus记录器之前将对象转换为字符串


下一篇:java – 如何仅为特定类配置log4j2.xml日志级别?