log4j的升級版--log4j2

由一個錯誤而引發的問題,錯誤如下:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.Standard
log4j:WARN Please initialize the log4j system properly.

但是我並沒有做改動,爲啥忽然就罷工了呢,於是在網上找了很多大神的,但都無濟於事,我就把idea重啓了幾次,就好了,你說神奇不神奇,看來重啓軟件或電腦實在是好辦法,本來有問題,重啓之後就都解決了。

另外一個意外的收穫來自於:原文鏈接

從這裏我知道了還有一個log4j的升級版是log4j2,於是我把我的log4j改爲了log4j2;
我把要排除舊的包搬過來了,哎呀媽呀,累慘我了,如下:
<exclusions>
    <!-- log4j 相關包 -->
    <exclusion>
        <artifactId>log4j</artifactId>
        <groupId>log4j</groupId>
    </exclusion>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j</artifactId>
    </exclusion>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
    <!-- log4j 的springboot starter -->
    <exclusion>
        <artifactId>spring-boot-starter-log4j</artifactId>
        <groupId>org.springframework.boot</groupId>
    </exclusion>
 
    <!-- logback 相關包 -->
    <exclusion>
        <artifactId>logback-classic</artifactId>
        <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
        <artifactId>logback-core</artifactId>
        <groupId>ch.qos.logback</groupId>
    </exclusion>
 
    <!-- slf4j 相關包 -->
    <exclusion>
        <artifactId>slf4j-log4j12</artifactId>
        <groupId>org.slf4j</groupId>
    </exclusion>
     <exclusion>
        <artifactId>log4j-to-slf4j</artifactId>
        <groupId>org.apache.logging.log4j</groupId>
    </exclusion>
    <exclusion>
        <artifactId>slf4j-api</artifactId>
        <groupId>org.slf4j</groupId>
    </exclusion>
</exclusions>

注:因爲每個項目的pom.xml多種多樣,所以無法總結統一的排除方案,這裏只彙總需要排除的包
pom中的依賴參照:原文鏈接
加上log4j2的依賴包
<!-- log4j2的api、core和web包 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.11.1</version>
</dependency>
<!-- slf4j與log4j2的連接包 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.1</version>
</dependency>
<!-- log4j與log4j2的連接包 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.11.1</version>
</dependency>
<!-- log4j2支撐完全異步模式的關鍵api -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.2</version>
</dependency>
<!-- slf4j本身的api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
</dependency>

最後log4j2的配置文件:來自於 原文鏈接 嘿嘿,我小做了修改
<?xml version="1.0" encoding="UTF-8"?>
<!--日誌級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration後面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,你會看到log4j2內部各種詳細輸出-->
<!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身,設置間隔秒數-->
<configuration status="WARN" monitorInterval="30" packages="org.apache.logging.log4j.core.layout">
    <Properties>
        <Property name="baseDir">logs</Property>
    </Properties>
    <!--先定義所有的appender-->
    <appenders>
        <!--   這個輸出控制檯的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--    控制檯只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--    這個都知道是輸出日誌的格式 -->
            <PatternLayout pattern="[%date{DEFAULT}]-[%highlight{%level}]-[%threadName]-[%-class{4}:%line]-%msg%n"/>
        </Console>
        <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的文件夾下面並進行壓縮,作爲存檔-->
        <RollingFile name="RollingFileInfo" fileName="${baseDir}/all.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log">
            <!--控制檯只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%date{DEFAULT}]-[%level]-[%threadName]-[%logger{1}]-%msg%n"/>

            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="500 MB"/>
            </Policies>
        </RollingFile>
        <RollingFile name="RollingFileWarn" fileName="${baseDir}/warn.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%date{DEFAULT}]-[%level]-[%threadName]-[%logger{1}]-%msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認爲最多同一文件夾下7個文件,這裏設置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>

        <RollingFile name="RollingFileErrorCommon" fileName="${baseDir}/errorc.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%date{DEFAULT}]-[%level]-[%threadName]-[%logger{1}]-%msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
        <!--OTS ERRO-->
        <RollingFile name="RollingFileOtsError" fileName="../${baseDir}/ots-error.log"
                     filePattern="../${baseDir}/$${date:yyyy-MM}/ots-error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%date{DEFAULT}]-[%level]-[%threadName]-[%logger{1}]-%msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
    </appenders>
    <!--然後定義logger,只有定義了logger並引入的appender,appender纔會生效-->
    <loggers>
        <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
        <logger name="org.springframework" level="DEBUG"></logger>
        <logger name="org.mybatis" level="DEBUG"></logger>
        <logger name="com.alicloud.openservices.tablestore" level="ERROR" additivity="false">
            <appender-ref ref="RollingFileOtsError"/>
        </logger>
        <root level="INFO">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileErrorCommon"/>
        </root>
    </loggers>
</configuration>

與君互勉!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章