zoukankan      html  css  js  c++  java
  • 日志之log4j,log4j2,logback配置干货分享篇

    打印日志

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
       private static final Logger logger = LoggerFactory.getLogger(XX.class);
       ... 
       logger.error("there has occured error [{}]", "nice");
    

    maven依赖包及配置文件

    slf4j

    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-api</artifactId>
    	<version>1.7.29</version>
    </dependency>
    

    log4j

    maven/pom依赖

    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-log4j12</artifactId>
    	<version>1.7.29</version>
    </dependency>
    <dependency>
    	<groupId>log4j</groupId>
    	<artifactId>log4j</artifactId>
    	<version>1.2.16</version>
    </dependency>
    

    resource/配置文件 log4j.properties

    log4j.rootLogger=DEBUG, CONSOLE, A, E
    log4j.addivity.org.apache=false
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Threshold=WARN
    log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}][%l][%p] -%-4r %-5p  %x - %m%n
    log4j.appender.CONSOLE.Target=System.out
    log4j.appender.CONSOLE.Encoding=UTF-8
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.A=org.apache.log4j.RollingFileAppender
    log4j.appender.A.File=./log4j/infos/info.log
    log4j.appender.A.MaxFileSize=50MB
    log4j.appender.A.MaxBackupIndex=10
    log4j.appender.A.Threshold=DEBUG
    log4j.appender.A.Encoding=UTF-8
    log4j.appender.A.DatePattern='.'yyyy-MM-dd'.log'
    log4j.appender.A.layout=org.apache.log4j.PatternLayout  
    log4j.appender.A.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}][%l][%p][%c]%m%n
    
    log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File=./log4j/errors/error.log
    log4j.appender.E.DatePattern='.'yyyy-MM-dd'.log'
    log4j.appender.E.Encoding=UTF-8
    log4j.appender.E.Threshold=ERROR
    log4j.appender.E.layout=org.apache.log4j.PatternLayout  
    log4j.appender.E.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}][%l][%p][%c]%m%n
    

    log4j2

    maven/pom依赖

    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-slf4j-impl</artifactId>
    	<version>2.8.2</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.8.2</version>
    </dependency>
    

    resource/配置文件 log4j2.xml

    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
    <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->
    <Configuration status="OFF" monitorInterval="300">
    	<properties>
    		<property name="LOG_HOME">./log4j2/</property>
    	</properties>
    	<Appenders>
    		<Console name="Console" target="SYSTEM_OUT">
    			<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
    			<ThresholdFilter level="TRACE" onMatch="ACCEPT"
    				onMismatch="DENY" />
    			<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) 优先级,即DEBUG,INFO,WARN,ERROR, 
    				<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/> -->
    			<PatternLayout
    				pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    		</Console>
    		<!-- 消息在粗粒度级别上突出强调应用程序的运行过程 -->
    		<RollingRandomAccessFile name="InfoFile"
    			fileName="${LOG_HOME}/info.log"
    			filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    			<Filters>
    				<ThresholdFilter level="warn" onMatch="DENY"
    					onMismatch="NEUTRAL" />
    				<ThresholdFilter level="trace" onMatch="ACCEPT"
    					onMismatch="DENY" />
    			</Filters>
    			<PatternLayout
    				pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
    			<Policies>
    				<TimeBasedTriggeringPolicy />
    				<SizeBasedTriggeringPolicy size="10 MB" />
    			</Policies>
    			<DefaultRolloverStrategy max="20" />
    		</RollingRandomAccessFile>
    		<!-- 输出错误信息日志 -->
    		<RollingRandomAccessFile name="ErrorFile"
    			fileName="${LOG_HOME}/error.log"
    			filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
    			<Filters>
    				<ThresholdFilter level="fatal" onMatch="DENY"
    					onMismatch="NEUTRAL" />
    				<ThresholdFilter level="warn" onMatch="ACCEPT"
    					onMismatch="DENY" />
    			</Filters>
    			<PatternLayout
    				pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
    			<Policies>
    				<TimeBasedTriggeringPolicy />
    				<SizeBasedTriggeringPolicy size="10 MB" />
    			</Policies>
    			<DefaultRolloverStrategy max="20" />
    		</RollingRandomAccessFile>
    		<!-- 输出每个严重的错误事件将会导致应用程序的退出的日志. -->
    		<RollingRandomAccessFile name="FatalFile"
    			fileName="${LOG_HOME}/fatal.log"
    			filePattern="${LOG_HOME}/$${date:yyyy-MM}/fatal-%d{yyyy-MM-dd}-%i.log">
    			<Filters>
    				<ThresholdFilter level="fatal" onMatch="ACCEPT"
    					onMismatch="DENY" />
    			</Filters>
    			<PatternLayout
    				pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
    			<Policies>
    				<TimeBasedTriggeringPolicy />
    				<SizeBasedTriggeringPolicy size="10 MB" />
    			</Policies>
    			<DefaultRolloverStrategy max="20" />
    		</RollingRandomAccessFile>
    		<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
    		<RollingFile name="RollingFile"
    			fileName="${LOG_HOME}/web.log"
    			filePattern="${LOG_HOME}/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
    			<PatternLayout
    				pattern="[%d{yyyy-MM-dd 'at' HH:mm:ss z}] [%-5p] %l - %m%n" />
    			<SizeBasedTriggeringPolicy size="2MB" />
    		</RollingFile>
    	</Appenders>
    
    	<Loggers>
    		<Root level="TRACE"> <!-- 这里的TRACE控制总下面的各类日志的日志级别,凡是高于此级别的都会在各自的级别文件中生成 -->
    			<AppenderRef ref="RollingFile" />
    			<AppenderRef ref="Console" />
    			<AppenderRef ref="InfoFile" />
    			<AppenderRef ref="ErrorFile" />
    			<AppenderRef ref="FatalFile" />
    		</Root>
    	</Loggers>
    </Configuration>
    

    logback

    maven/pom依赖

    <dependency>
    	<groupId>ch.qos.logback</groupId>
    	<artifactId>logback-classic</artifactId>
    	<version>1.1.7</version>
    </dependency>
    <dependency>
    	<groupId>ch.qos.logback</groupId>
    	<artifactId>logback-core</artifactId>
    	<version>1.1.7</version>
    </dependency>
    

    resource/配置文件 logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
    <!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
    <!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
    <!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <!-- 子节点<property> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量。-->
        <property name="LOG_HOME" value="./logback/" />
     
        <!--子节点<appender>:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名-->
        <!-- ConsoleAppender 控制台输出日志 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!-- 设置日志输出格式 -->
                <pattern>[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%logger{0}:%L] %m%n</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
               <level>INFO</level>
            </filter>
        </appender>
     
        <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:-->
        <!--      <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。-->
        <!--      <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。-->
        <!--      <rollingPolicy>:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类-->
        <!--      class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy": 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:-->
        <!--        <fileNamePattern>:必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。-->
        <!--如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;-->
        <!--如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“”会被当做目录分隔符。-->
        <!--        <maxHistory>:-->
        <!--可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。-->
     
        <!--      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy": 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:-->
        <!--        <maxFileSize>:这是活动文件的大小,默认值是10MB。-->
        <!--        <prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。-->
     
        <!--      <triggeringPolicy >: 告知 RollingFileAppender 合适激活滚动。-->
        <!--      class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy" 根据固定窗口算法重命名文件的滚动策略。有以下子节点:-->
        <!--        <minIndex>:窗口索引最小值-->
        <!--        <maxIndex>:窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。-->
        <!--        <fileNamePattern>:必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有log%i.log.zip-->
        <appender name="LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/youxi.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/youxi.log.%d{yyyy-MM-dd}</fileNamePattern>
            </rollingPolicy>
            <!-- <encoder>:对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。-->
            <!-- PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“”对“\%”进行转义。-->
            <encoder>
                <pattern>%p %d{yyyy-MM-dd HH:mm:ss} %logger - %m%n</pattern>
            </encoder>
        </appender>
     
        <appender name="PokerMqListenerLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/mq/poker-mq.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/mq/poker-mq.log.%d{yyyy-MM-dd}</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%p %d{yyyy-MM-dd HH:mm:ss} %logger - %m%n</pattern>
            </encoder>
        </appender>
        <logger name="com.jd.station.soa.message.listener.PokerActivityInfoMqListener" level="INFO" additivity="false">
            <appender-ref ref="PokerMqListenerLogFile"/>
        </logger>
     
        <logger name="jdbc.sqltiming" level="info"/>
        <logger name="com.ibatis" level="info" />
        <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="info" />
        <logger name="com.ibatis.common.jdbc.ScriptRunner" level="info" />
        <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="info" />
        <logger name="java.sql.Connection" level="info" />
        <logger name="java.sql.Statement" level="info" />
        <logger name="java.sql.PreparedStatement" level="info" />
        <logger name="java.sql.ResultSet" level="info" />
     
        <root level="INFO">
            <appender-ref ref="console" />
            <appender-ref ref="LogFile" />
        </root>
     
    </configuration>
    

    关于顺序

    • maven 包加载顺序优先者先绑定

    代码下载

    https://files.cnblogs.com/files/pengsn/log-api.zip

    如果觉得文章对您有用,请点下推荐。您的支持将鼓励我继续创作!

  • 相关阅读:
    PAT (Advanced Level) Practice 1100 Mars Numbers (20分)
    PAT (Advanced Level) Practice 1107 Social Clusters (30分) (并查集)
    PAT (Advanced Level) Practice 1105 Spiral Matrix (25分)
    PAT (Advanced Level) Practice 1104 Sum of Number Segments (20分)
    PAT (Advanced Level) Practice 1111 Online Map (30分) (两次迪杰斯特拉混合)
    PAT (Advanced Level) Practice 1110 Complete Binary Tree (25分) (完全二叉树的判断+分享致命婴幼儿错误)
    PAT (Advanced Level) Practice 1109 Group Photo (25分)
    PAT (Advanced Level) Practice 1108 Finding Average (20分)
    P6225 [eJOI2019]异或橙子 树状数组 异或 位运算
    P4124 [CQOI2016]手机号码 数位DP
  • 原文地址:https://www.cnblogs.com/pengsn/p/13554795.html
Copyright © 2011-2022 走看看