【问题标题】:How log spring boot jar file exceptions如何记录spring boot jar文件异常
【发布时间】:2018-01-14 17:02:04
【问题描述】:

当你创建Tomcat嵌入JAR文件并安装在服务器上时,如何访问异常?最近我的服务器和进程突然停止,我不知道发生了什么。我检查了 Windows 事件查看器,但找不到任何东西。 有没有异常写在文件上的地方?

【问题讨论】:

  • 查看你的 TOMCAT_HOME/logs 目录下的 catalina.out 文件
  • @Jens TOMCAT_HOME 在哪里?
  • 这取决于你安装它的位置
  • 我在我的 jar 文件中嵌入了 TomCat。所以我真的不知道它在哪里。
  • 在你的电脑上搜索文件名

标签: java spring tomcat logging executable-jar


【解决方案1】:

默认情况下,Spring Boot 只会登录到控制台,不会 写日志文件。如果你想写日志文件除了 控制台输出您需要设置 logging.filelogging.path 属性 (例如在您的 application.properties 中)。

java -Dlogging.file=target/my_logfile.log -jar spring_boot_app.jar
or 
java -Dlogging.path=target/logs -jar spring_boot_app.jar
(Will create spring.log file inside target/logs)

参考:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logging-file-output

为了让生活更轻松,您可以使用 logback.xmllogback-spring.xml

以下是 logback.xml 的示例。将其包含在 src/main/resources 目录中。

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

<!-- The FILE and ASYNC appenders are here as examples for a production configuration -->

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>utf-8</charset>
            <Pattern>%d %-5level [%thread] %logger{0}: %msg%n</Pattern>
        </encoder>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <queueSize>512</queueSize>
        <appender-ref ref="FILE"/>
    </appender>


    <!-- your project package -->
    <logger name="com.test" level="INFO"/>

    <!-- <logger name="javax.activation" level="WARN"/>
    <logger name="javax.mail" level="WARN"/>
    <logger name="javax.xml.bind" level="WARN"/>
    <logger name="ch.qos.logback" level="WARN"/>
    <logger name="com.codahale.metrics" level="WARN"/>
    <logger name="com.ryantenney" level="WARN"/>
    <logger name="com.sun" level="WARN"/>
    <logger name="com.zaxxer" level="WARN"/>
    <logger name="io.undertow" level="WARN"/>
    <logger name="io.undertow.websockets.jsr" level="ERROR"/>
    <logger name="org.apache" level="WARN"/>
    <logger name="org.apache.catalina.startup.DigesterFactory" level="OFF"/>
    <logger name="org.bson" level="WARN"/>
    <logger name="org.hibernate.validator" level="WARN"/>
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.hibernate.ejb.HibernatePersistence" level="OFF"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="org.springframework.web" level="WARN"/>
    <logger name="org.springframework.security" level="WARN"/>
    <logger name="org.springframework.cache" level="WARN"/>
    <logger name="org.thymeleaf" level="WARN"/>
    <logger name="org.xnio" level="WARN"/>
    <logger name="springfox" level="WARN"/>
    <logger name="sun.rmi" level="WARN"/>
    <logger name="liquibase" level="WARN"/>
    <logger name="LiquibaseSchemaResolver" level="INFO"/>
    <logger name="sun.rmi.transport" level="WARN"/> -->

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>

以上配置将生成日志到 JAR 文件的工作目录,名称如 logFile.yyyy.MM.dd.log

【讨论】:

  • 我得到了第一部分,它是有效的。为了更好的生活,我想使用您答案的第二部分。如果在资源中有 logback.xml 命名文件的这段代码可以吗?
  • 是的,我用最新的 spring boot 1.5.6 对其进行了测试。它应该工作。请将com.test 替换为您项目的基础包。
  • 使用 logback.xml 与 @mike adamenko 的答案有什么好处。我的意思是在属性中简单地放 3 行?
  • 在当前配置中,日志文件会与JAR文件在同一目录下产生。可以编辑fileNamePattern 标签以包含类似logs/logFile... 的路径。 logback.xml 的好处是它将集中日志配置。你可以在这里设置可以指定log4j,如rolling appender和其他配置。
  • 感谢亲爱的 Mike Adamenko,您的回答更有效率。
【解决方案2】:

您应该在类路径中添加 application.properties 文件并在那里设置日志记录属性。

如果您需要对日志记录进行的唯一更改是设置 各种记录器,然后您可以在 application.properties 中使用 “logging.level”前缀,例如

logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
logging.file=C:\myapplication.log

您还可以设置要登录的文件的位置(除了 控制台)使用“logging.file”。

here

【讨论】:

  • 如何将文件放在 jar 文件的根目录下?
  • jar 是一个简单的 zip 存档。顺便说一句,您可以将它添加到您的类路径中。更新了答案。
  • 它应该是 logging.file=mylogfile.log 并且会保存在 JAR 根目录中。谢谢你的回答很有用。
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多