当前位置: 首页 > 知识库问答 >
问题:

Spring引导和Log4j

韩朝斑
2023-03-14

是否可以根据我使用的Spring Boot配置文件加载不同的log4j配置。

假设我在application.properties中

log.level=DEBUG
log.path=/opt/tomcat/logs/blabla.log
log.appender=CONSOLE

在application-live.properties中,我为所有3个都有不同的值

log.level=WARN
log.path=/crazy/tomcat/logs/blabla.log
log.appender=FILE
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log.path}" />
        <param name="maxFileSize" value="8MB"/>
        <param name="maxBackupIndex" value="50"/>
        <param name="Append" value="true"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [${project.artifactId}-${project.version}] %p [SearchID - %X{searchID}] %c{1}.%M(%L) %m%n" />
        </layout>
    </appender>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [${project.artifactId}-${project.version}] %p [SearchID - %X{searchID}] %c{1}.%M(%L) %m%n" />
        </layout>
    </appender>

<logger name="com.mchange" >
        <level value="${log.level}" />
        <appender-ref ref="${log.appender}" />
    </logger>

    <logger name="java.sql" >
        <level value="${log.level}" />
        <appender-ref ref="${log.appender}" />
    </logger>

    <logger name="org.springframework">
        <level value="${log.level}" />
        <appender-ref ref="${log.appender}"/>
    </logger>
<root>
        <level value="${log.level}"/>
        <appender-ref ref="${log.appender}"/>
    </root>

共有1个答案

阎丰羽
2023-03-14

您可以根据环境对不同的配置使用src/main/environment中的单独文件夹。

那么如果您像这样使用gradlebuild,

./gradlew build -Penv=prod

然后,要捕捉环境,在build.gradle中添加以下内容,

 project.ext {
 environment = "dev"
 }

 loadConfiguration()

 def loadConfiguration() {
    project.environment = hasProperty('env') ? env : 'dev'
 }

然后在生成时使用follows复制配置。(将此移动到一个名为copy.gradle的单独文件中,并在生成文件的顶部使用apply from:'copy.gradle'),

task copyConfiguration << {
println "Target environment: $environment"
  copy {
    from "src/main/environment/$project.environment"
    into "src/main/resources"
    include "*/"
  }
}

对于maven来说,它似乎比gradle容易,

<profiles>
<profile>
    <id>dev</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources/dev</directory>
            </resource>
        </resources>
    </build>
</profile>
<profile>
    <id>prod</id>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources/prod</directory>
            </resource>
        </resources>
    </build>
</profile>
</profiles>

和构建类似mvn安装-pdev,我从这里获取了它,阅读这里获得更多信息。

 类似资料:
  • 我正在tomcat(Servlet2.5)中运行一个传统的Spring启动战。虽然CharacterEncodingFilter默认配置为spring boot 1.2.0,但请求没有任何编码集。我可以在自动配置和日志中看到它的配置。这可能不是由SpringBootLegacy(1.0.1)配置的?我将过滤器添加到web。xml和我的请求现在采用utf-8编码。但是,这不适用于请求参数。我认为这是

  • 当我在项目中包括spring boot时,它有其他spring组件的预定义版本。带有spring boot starter web的spring boot 1.3.5自动包含spring mvc 4.2.6。如果我想使用WebMVC4.3中的一些功能,我怎么知道它们是兼容的?是否存在兼容性矩阵?还是我应该把它当作一个单一的版本,永远不改变版本?

  • 我希望Hibernate创建一个基于实体类的模式,然后Flyway填充表。现在Flyway在创建表之前启动v1__init.sql并抛出异常。我该如何改变这个顺序或者我能做什么解决方案? pom.xml:

  • 我试图从我的Spring启动服务向IBMMQ队列发送消息。配置如下: 一个pplication.properties 菜豆 IBM MQ浏览器图片 当我尝试发送消息时,我收到错误: 我错过了什么?我的chammel类型所显示的错误与我的请求不符,但我不知道这意味着什么。 提前谢谢。

  • 当运行undertow和spring-boot1.4时,我得到了NullPointerException。 未激活StartupServletContextListener时可能会发生此错误。它是由UndertowMyFacesSpringBootaUtoConfiguration创建的。Debug表示它已激活: 上面的堆栈跟踪:

  • 我已经调试了一整天,几乎尝试了互联网上所说的所有方法,但我仍然没有正确理解。 我使用Spring Boot和log4j2进行日志记录,因为我希望将日志写入文件而不是控制台。当我启动Spring Boot时,日志文件被成功创建,但我看不到文件上写着“Hello Philippine”。我希望你们能帮我。 这是我的Spring Boot应用程序: 我的log4j2。xml 我的POM: 我的申请表上没