IDEA 搭建spring+maven+mybatis+mysql+junit+log4j2


https://www.cnblogs.com/toutou/p/ssm_springmvc.html

https://www.cnblogs.com/toutou/p/ssm_springmvc.html

碼雲地址:https://gitee.com/aaronRhythm/callcenter

遇到問題:

1、log4j修改為log4j2時,Mybatis增加如下配置項將SQL輸出到日志:<setting name="logImpl" value="LOG4J2"/>,啟動TOMCAT失敗。

  【解決】:可能是Mybatis版本問題,可在POM添加3.3.0的版本:<mybatis.version>3.3.0</mybatis.version>

        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>    

2、項目啟動日志沒打印

  【解決】:添加下述配置后,就能在項目啟動時加載log4j2

<!--加上下述配置后,就能在項目啟動是加載log4j2-->
    <!-- Log4j2監聽器 -->
    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
    <!-- Log4j2過濾器 -->
    <filter>
        <filter-name>log4jServletFilter</filter-name>
        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>log4jServletFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    <!--加上上述配置后,就能在項目啟動是加載log4j2-->

  log4j2.xml的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--日志級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--status="WARN" :用於設置log4j2自身內部日志的信息輸出級別,默認是OFF-->
<!--monitorInterval="30"  :間隔秒數,自動檢測配置文件的變更和重新配置本身,無需重啟應用-->
<configuration status="WARN" monitorInterval="30">
    <Properties>
        <!--自定義一些常量,之后使用${變量名}引用-->
        <Property name="logFilePath">${sys:user.home}/logs</Property>
        <Property name="logFileName">iac_test.log</Property>
    </Properties>
    <!--appenders:定義輸出內容,輸出格式,輸出方式,日志保存策略等,常用其下三種標簽[console,File,RollingFile]-->
    <Appenders>
        <!--console :控制台輸出的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--PatternLayout :輸出日志的格式,LOG4J2定義了輸出代碼,詳見第二部分-->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
        <!--File :同步輸出日志到本地文件-->
        <!--append="false" :根據其下日志策略,每次清空文件重新輸入日志,可用於測試-->
        <File name="TestLog" fileName="${logFilePath}/${logFileName}" append="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %class{36} %L %M - %msg%xEx%n"/>
        </File>
        <!--SMTP :郵件發送日志-->
        <!-- <SMTP name="Mail" subject="****IAC系統異常信息" to="message@message.info" from="message@lengjing.info" smtpUsername="message@message.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false" smtpPort="25" bufferSize="10">
            <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" />
        </SMTP> -->

        <!-- Debug日志 -->
        <RollingFile name="RollingFileDebug" fileName="${logFilePath}/iac_debug.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/iac_info-%d{yyyy-MM-dd}-%i.log">
            <!--ThresholdFilter :日志輸出過濾-->
            <!--level="info" :日志級別,onMatch="ACCEPT" :級別在info之上則接受,onMismatch="DENY" :級別在info之下則拒絕-->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- Policies :日志滾動策略-->
            <Policies>
                <!-- TimeBasedTriggeringPolicy :時間滾動策略,默認0點小時產生新的文件,interval="6" : 自定義文件滾動時間間隔,每隔6小時產生新文件, modulate="true" : 產生文件是否以0點偏移時間,即6點,12點,18點,0點-->
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <!-- SizeBasedTriggeringPolicy :文件大小滾動策略-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,這里設置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>

        <!-- INFO日志 -->
        <RollingFile name="RollingFileInfo" fileName="${logFilePath}/iac_info.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/iac_info-%d{yyyy-MM-dd}-%i.log">
            <!--ThresholdFilter :日志輸出過濾-->
            <!--level="info" :日志級別,onMatch="ACCEPT" :級別在info之上則接受,onMismatch="DENY" :級別在info之下則拒絕-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- Policies :日志滾動策略-->
            <Policies>
                <!-- TimeBasedTriggeringPolicy :時間滾動策略,默認0點小時產生新的文件,interval="6" : 自定義文件滾動時間間隔,每隔6小時產生新文件, modulate="true" : 產生文件是否以0點偏移時間,即6點,12點,18點,0點-->
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <!-- SizeBasedTriggeringPolicy :文件大小滾動策略-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,這里設置了20 -->
            <DefaultRolloverStrategy max="90"/>
        </RollingFile>

        <!-- WARN日志 -->
        <!-- <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/iac_warn.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile> -->

        <!-- ERROR日志 -->
        <RollingFile name="RollingFileError" fileName="${logFilePath}/iac_error.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

    </Appenders>

    <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效-->
    <Loggers>
        <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
        <!--Logger節點用來單獨指定日志的形式,name為包路徑,比如要為org.springframework包下所有日志指定為INFO級別等。 -->
        <logger name="log4j.logger.noModule" level="fatal" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.org.mybatis.jpetstore" level="trace" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.com.opensymphony.xwork2" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.com.ibatis" level="trace" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.com.ibatis.common.jdbc.SimpleDataSource" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.com.ibatis.common.jdbc.ScriptRunner" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.org.mybatis" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.java.sql" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.java.sql.Connection" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.java.sql.Statement" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.java.sql.PreparedStatement" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <logger name="log4j.logger.java.sql.ResultSet" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>

        <!-- Root節點用來指定項目的根日志,如果沒有單獨指定Logger,那么就會默認使用該Root日志輸出 -->
        <!-- 正式環境↓ 改為 info 級別 -->
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileDebug"/>
            <appender-ref ref="RollingFileInfo"/>
            <!--<appender-ref ref="RollingFileWarn"/>-->
            <appender-ref ref="RollingFileError"/>
            <appender-ref ref="TestLog"/>
        </root>
        <!--AsyncLogger :異步日志,LOG4J有三種日志模式,全異步日志,混合模式,同步日志,性能從高到底,線程越多效率越高,也可以避免日志卡死線程情況發生-->
        <!--additivity="false" : additivity設置事件是否在root logger輸出,為了避免重復輸出,可以在Logger 標簽下設置additivity為”false”-->
        <AsyncLogger name="AsyncLogger" level="trace" includeLocation="true" additivity="false">
            <appender-ref ref="RollingFileError"/>
        </AsyncLogger>
    </Loggers>
</configuration>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM