spring boot 配置 log4j2

版本信息:

spring cloud 版本Greenwich.SR2
spring boot 版本2.1.8.RELEASE

官网文档:

http://logging.apache.org/log4j/2.x/manual/configuration.html

以下每个步骤不可缺失

  1. pom.xml配置
    需要排除spring-boot-starter自带的logback依赖,不然日志无法记录在日志文件里

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
         <exclusions>
             <!-- 排除自带的logback依赖 -->
             <exclusion>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-logging</artifactId>
             </exclusion>
         </exclusions>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-log4j2</artifactId>
     </dependency>
    
  2. log4j配置
    新建log4j.xml放在resources目录下
    设置console,InfoLog,ErrorLog的输出配置以及日志目录

    Configuration status="INFO" 设置的是console的输出级别

     <?xml version="1.0" encoding="UTF-8"?>
     <Configuration status="INFO">
         <Appenders>
             <!--添加一个控制台追加器-->
             <Console name="Console" target="SYSTEM_OUT" follow="true">
                 <PatternLayout>
                     <pattern>[%-5p] %d %c - %m%n</pattern>
                 </PatternLayout>
             </Console>
             
             <!-- info log -->
             <RollingFile name="InfoLog" fileName="/opt/logs/scm-warehouse/info.log"
                          filePattern="/opt/logs/scm-warehouse/info-%d{yyyy-MM-dd}.log">
                 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36}.%M[%L] - %msg%xEx%n"/>  
                 <Policies>
         			<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
         		</Policies>
                 <Filters>
                 	<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> 
                 	<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
                 </Filters> 
             </RollingFile>
             
             <!-- error log -->
             <RollingFile name="ErrorLog" fileName="/opt/logs/scm-warehouse/error.log"
                          filePattern="/opt/logs/scm-warehouse/error-%d{yyyy-MM-dd}.log">
                 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%-5level] %class{36}.%M[%L] - %msg%xEx%n"/>  
         		<Policies>
         			<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
         		</Policies>
                 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />  
             </RollingFile>            
         </Appenders>
         <Loggers>
             <Root level="info">
                 <AppenderRef ref="Console" />
                 <AppenderRef ref="InfoLog" />
                 <AppenderRef ref="ErrorLog" />
             </Root>
         </Loggers>
     </Configuration>
    
  3. yml配置,指定配置

     logging:
       config: classpath:log4j.xml
       level:
     	root: info
    
  4. java代码内使用

     import org.slf4j.Logger;
     import org.slf4j.LoggerFactory;
     private static Logger logger = LoggerFactory.getLogger(XXXclass.class);
     logger.info("xxx);
    
  5. 日志级别
    OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL级别。Log4j建议只使用四个级别,优先级 从高到低分别是 ERROR、WARN、INFO、DEBUG。
    比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。优先级高的将被打印出来。

    可指定某个包或者某个类的日志级别,比如 kafka自带日志级别设置为off

         <Loggers>
           <Logger name="org.apache.kafka.clients" level="off">
               <AppenderRef ref="ERROR"/>
           </Logger>
           <Root level="info">
               <AppenderRef ref="Console"/>
               <AppenderRef ref="DEBUG"/>
               <AppenderRef ref="INFO"/>
               <AppenderRef ref="ERROR"/>
               <AppenderRef ref="FATAL"/>
           </Root>
       </Loggers>
    
posted @ 2019-12-30 17:52  CalronLoveRonnie  阅读(302)  评论(0编辑  收藏  举报
AmazingCounters.com