使Logback在本地写入控制台,但在服务器上记录日志文件

Ste*_*ies 10 logging log4j logback maven

在使用Maven 3构建的Web应用程序中,是否有一种方法可以让Logback使用ConsoleAppenderRollingFileAppender依赖应用程序运行的位置/方式?

在生产中,.war文件部署在Tomcat 7上.在本地,我正在运行Jetty Maven插件,以便在开发过程中进行测试.

我想让日志工作像这样:

  • 当我在mvn jetty:run本地运行时:使用ConsoleAppender
  • *.war文件被部署在生产(Tomcat的7):使用RollingFileAppender

在本地开发期间,在控制台上显示所有日志输出似乎非常舒服.在生产中,我宁愿登录到文件:CATALINA_BASE/logs/myApp.log.

显然,你可以只使用一个双方ConsoleAppenderRollingFileAppenderlogback.xml.但对我而言,将生产中的所有日志输出写入STDOUTAND并将其写入日志文件似乎是不必要的冗余.此外,从Tomcat文档中可以看出,在生产中登录STDOUT通常是一种不好的做法.

我在网上找不到任何好的解决方案.这有一个很好的解决方案吗?

这是我的当前logback.xml总是登录到STDOUT所需的日志文件:

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/myApp.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/myApp.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.myDomain.myApp" level="DEBUG" />

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Kar*_*sad 8

您可以使用配置文件在环境之间切换.假设您有本地和prod的两个不同的logback.xml文件.在资源目录中创建一个logback目录.在资源目录中,创建特定于环境的目录.目录名称和属性内的envName应匹配.这是一个例子.

<profiles>
        <profile>
            <id>local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <envName>local</envName>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <envName>prod</envName>
            </properties>
        </profile>
</profiles>

<build>
    <finalName>kp-prj</finalName>
    <outputDirectory>${project.build.directory}/classes</outputDirectory>
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <resources>
        <resource>
            <directory>${basedir}/src/main/java</directory>
            <includes>
                <include>**/*.class</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources/logback/${envName}</directory>
        </resource>
    </resources>
</build>
Run Code Online (Sandbox Code Playgroud)

在使用running maven命令时,您可以指定配置文件.

mvn run -Plocal
Run Code Online (Sandbox Code Playgroud)