Logback:如何将日志目录从"tomcat/bin"更改为与应用程序相关的?

Ser*_*gey 6 java logging tomcat logback slf4j

我想使用slf4jlogback进行日志记录.

您可以在下面看到我的logback.xml:

<configuration>
    <appender name="FILE-MODULE" class="ch.qos.logback.core.FileAppender">
        <file>module.log</file>
        <encoder>
            <pattern>
                %date %level [%thread] %logger{10} [%file:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="module" level="debug" additivity="false">
        <appender-ref ref="FILE-MODULE" />
    </logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)

问题是:当我将我的应用程序部署到Tomcat时,日志文件存储在tomcat/bin文件夹中,我想将它存储在myapp文件夹(tomcat/webapp/myapp)中.

我怎样才能做到这一点?

Ser*_*gey 8

好吧,我解决了我的问题,但这不是很好的解决方案(根据我的意见).

首先,我将绝对路径放在.property文件中的日志文件中.例如:

logback.log.location=d:\Tomcat\tomcat_8.0.0-RC5\webapps\module\logs
Run Code Online (Sandbox Code Playgroud)

然后我在logback.xml中使用该属性:

<configuration>
    <property file="src\main\resources\system_config.properties" />
    <appender name="FILE-MODULE" class="ch.qos.logback.core.FileAppender">
        <file>${logback.log.location}\module.log</file>
        <encoder>
            <pattern>
                %date %level [%thread] %logger{10} [%file:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="module" level="debug" additivity="false">
        <appender-ref ref="FILE-MODULE" />
    </logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看更多详情.这是我使用的一个例子.

但在上面的解决方案中,我们有特定于环境的日志绝对路径.这很难看.当然,我们可以使用系统变量CATALINA_HOME来避免绝对路径.但是,据我所知,CATALINA_HOME可能是未定义的.或者,我们可以使用另一个tomcat实例,它不在CATALINA_HOME中.

也许有人有更好的解决方案,将与环境无关?


UPDATE

另一种方案:

只需在logback.xml中使用relative(到tomcat\bin)路径而不是绝对路径:

<configuration>
    <appender name="FILE-MODULE" class="ch.qos.logback.core.FileAppender">
        <file>..\webapps\module\module.log</file>
        <encoder>
            <pattern>
                %date %level [%thread] %logger{10} [%file:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <logger name="module" level="debug" additivity="false">
        <appender-ref ref="FILE-MODULE" />
    </logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这是我尝试实施的第一个想法.我不知道,为什么之前没有用.也许还有其他问题.此外,这篇这篇文章让我困惑.

但现在这个解决方案工作正常.这正是我要找的=)


Pra*_*rma 6

如果您不想将日志保存在 Tomcat 的 bin 文件夹中,请在logback.xml${catalina.base}文件中使用文件路径前缀。

<file>${catalina.base}/logs/log.log</file>
Run Code Online (Sandbox Code Playgroud)

这里日志文件将保存在Tomcat现有的logs文件夹中,而不是bin中。