• 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>
  • 相关阅读:
    软件工程结对第二次作业
    软件工程结对第一次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    实验九:根据材料编程
    实验五:编写、调试具有多个段的程序
    实验4:[bx]和loop的使用
    《汇编语言》实验三——编程、编译、连接、跟踪
    《汇编语言》实验二——用机器指令和汇编指令编程
  • 原文地址:https://www.cnblogs.com/aaronRhythm/p/12094527.html
Copyright © 2020-2023  润新知