All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uyinnn.you-db-utils.1.2.1.source-code.log4j2.xml Maven / Gradle / Ivy

<?xml version="1.0" encoding="UTF-8"?>
<!--
        Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。
    -->
<!--
    monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数。
-->
<Configuration status="off" monitorInterval="300">
    <properties>
        <property name="LOG_HOME">Log</property>
        <property name="FILE_NAME">mylog</property>
    </properties>

    <!--先定义所有的appender-->
    <Appenders>
        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <Console
                name="infoOnly"
                target="SYSTEM_OUT">

            <!-- 下面这个日志过滤就是只输入info日志 -->
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <Console
                name="sqlConsole"
                target="SYSTEM_OUT">

            <Filters>
                <!--
                    需要说明的是onMatch和onMismatch可以选择的值及其含义。可选的值分别是,ACCEPT, DENY, NEUTRAL,
                    ACCEPT和DENY比较好理解就是接受和拒绝的意思,在使用单个过滤器的时候,一般就是使用这两个值。
                    但是在组合过滤器中,如果用接受ACCEPT的话,日志信息就会直接写入日志文件,后续的过滤器不再进行过滤。
                    所以,在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,
                    只有符合所有过滤器条件的日志信息,才会被最终写入日志文件。
                -->

                <!--
                    在取得连接的时候 我们会使用“select 1”来先验证连接的合法性
                    这样在连接池初始化的时候会疯狂的打印:
                        14:44:43.756 [main] DEBUG druid.sql.Statement - {conn-1000x, stmt-2000x} executed. select 1
                    所以我们为sqlConsole设置过滤器
                    使用RegexFilter来设置不打印包含语句“select 1”的日志 也就过滤了上面这种日志的打印
                -->
                <RegexFilter regex=".* select[\s]1.*" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="log/app.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>

        <!--
            RollingRandomAccessFile的属性:
                fileName  指定当前日志文件的位置和文件名称
                filePattern  指定当发生Rolling时,文件的转移和重命名规则
                SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling
                DefaultRolloverStrategy  指定最多保存的文件个数
                TimeBasedTriggeringPolicy
                    这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,
                    最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},
                    最小粒度为小时,则每一个小时生成一个文件。
        -->
        <RollingRandomAccessFile name="MyFile2"
            fileName="${LOG_HOME}/${FILE_NAME}.log"
            filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="1 MB" />
            </Policies>

            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile
            name="error"
            fileName="log/errors/error.log"
            filePattern="log/errors/${date:yyyy-MM}/error-%d{yyyy-MM-dd HH-mm}-%i.log">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

            <Filters>
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>

            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="1 MB" />
            </Policies>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="InfoFile"
                                 fileName="log/info/info.log"
                                 filePattern="log/info/${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />

            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

    </Appenders>


    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <Loggers>
        <!--建立一个默认的root的logger-->
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>

        <!-- druid配置 -->
        <Logger name="druid.sql.Statement" level="debug" additivity="false">
            <appender-ref ref="sqlConsole"/>
        </Logger>

        <Logger name="mylog" level="trace" additivity="false">
            <!--<AppenderRef ref="MyFile2"/>-->
            <AppenderRef ref="infoOnly"/>
            <AppenderRef ref="InfoFile"/>
        </Logger>

        <Logger name="com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>




© 2015 - 2025 Weber Informatics LLC | Privacy Policy