巧为tomcat插件配置log4j日志,解决未报错启动不成功

在Maven项目中整合SSM后,启动Tomcat失败且无报错。通过配置log4j获取详细日志,从StackOverflow找到解决方案,在Maven插件的systemProperties中指定log4j配置文件,最终在日志中发现mybatis XML命名空间错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情摘要

源于Maven项目中整合SSM框架后,运行一个根据商品id查询商品信息的Demo来测试是否整合成功。

在pom文件中配置好Tomcat插件,启动tomcat,如果成功,输出信息如下:

May 07, 2017 11:30:01 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 07, 2017 11:30:01 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
May 07, 2017 11:30:01 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
May 07, 2017 11:30:04 AM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
May 07, 2017 11:30:04 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
-------------------这是分割线-----------------------------------------
May 07, 2017 11:30:06 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'e3-manager'
May 07, 2017 11:30:07 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]

而我碰到的问题是,分割线以下的信息没有输出,也就是启动失败。

但是没有报错信息,tomcat的日志文件夹内也没有文件存在,这就有点像谜之bug。

解决办法

受到一篇博客的启发,在tomcat中配置log4j,查看更详细的日志。
博文地址:http://ycgit.blog.51cto.com/8590215/1852863

但是我使用的是tomcat的Maven插件,找到的资料较少,最终在万能的stackoverflow找到配置方法。
StackOverFlow地址:http://stackoverflow.com/questions/31658993/tomcat7-maven-plugin-log4j-no-appender-could-be-found-for-logger-org-apache-ca

<!--配置tomcat插件-->
<plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                    <!--log4j配置文件位置-->
                    <systemProperties>
                        <log4j.configuration>file:src/main/resources/log4j.properties</log4j.configuration>
                    </systemProperties>
                </configuration>
            </plugin>

但是最后一个问题,我不懂配置文件怎么写的,就找了这篇博文,复制了其文中贴出的配置内容。
博文地址:http://blog.youkuaiyun.com/cfydaniel/article/details/41348449
log4j.properties内容

log4j.rootLogger = INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
INFO, HOST-MANAGER

后记

最终在日志文件内找到了错误原因,mybatis逆向工程生成的xml文件命名空间错了。

这件事告诉我们,文件生成之后要去看一眼,确认一下。

同时也发现,tomcat的官方文档,为tomcat配置log4j的内容:
http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j

不过Maven插件的配置我第一次看的话,也不会想到是在那里配置,其中systemProperties标签就是指定配置文件,好奇为啥他们能知道那里就算配置log4j文件的。
http://tomcat.apache.org/maven-plugin-2.2/run-mojo-features.html
官方示例节选

<configuration>
      <!-- http port -->
      <port>9090</port>
      <!-- application path always starts with /-->
      <path>/</path>
      <!-- optional path to a context file -->
      <contextFile>${tomcatContextXml}</contextFile>
      <!-- optional system propoerties you want to add -->
      <systemProperties>
        <appserver.base>${project.build.directory}/appserver-base</appserver.base>
        <appserver.home>${project.build.directory}/appserver-home</appserver.home>
        <derby.system.home>${project.build.directory}/appserver-base/logs</derby.system.home>
        <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
      </systemProperties>
      <!-- if you want to use test dependencies rather than only runtime -->
      <useTestClasspath>false</useTestClasspath>
      <!-- optional if you want to add some extra directories into the classloader -->
      <additionalClasspathDirs>
        <additionalClasspathDir></additionalClasspathDir>
      </additionalClasspathDirs>
    </configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值