Logback:如何将日志目录从 "tomcat/bin" 更改为与应用程序相关?
Logback: how to change log directory from "tomcat/bin" to application related?
我想使用 slf4j 和 logback 进行日志记录。
你可以在下面看到我的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>
问题是:当我将应用程序部署到 Tomcat 时,日志文件存储在 tomcat/bin 文件夹中,我想将其存储在myapp 文件夹 (tomcat/webapp/myapp).
我该怎么做?
嗯,我解决了我的问题,但它不是很好的解决方案(在我看来)。
首先,我将日志文件的绝对路径放在 .属性 文件中。例如:
logback.log.location=d:\Tomcat\tomcat_8.0.0-RC5\webapps\module\logs
然后我在 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>
更多细节你可以看here. This is an example,我用的。
但在上面的解决方案中,我们有特定于环境的日志绝对路径。这太丑了。当然我们可以使用系统变量CATALINA_HOME来避免绝对路径。但是,据我所知,CATALINA_HOME 可以是未定义的。或者,我们可以使用 tomcat 的另一个实例,它不在 CATALINA_HOME.
中
也许有人有更好的独立于环境的解决方案?
更新
另一个解决方案:
只需在 logback.xml 中使用相对(到 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>
这是我尝试实现的第一个想法。我不知道,为什么它以前不起作用。也许还有其他问题。此外 this and this 篇文章让我感到困惑。
但现在这个解决方案工作正常。这正是我要找的 =)
如果您不想将日志保存在 Tomcat 的 bin 文件夹中,请使用 ${catalina.base}
作为 logback.xml[=17= 中的文件路径前缀] 文件。
<file>${catalina.base}/logs/log.log</file>
此处的日志文件将保存在 Tomcat 的现有日志文件夹中,而不是 bin。
我想使用 slf4j 和 logback 进行日志记录。
你可以在下面看到我的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>
问题是:当我将应用程序部署到 Tomcat 时,日志文件存储在 tomcat/bin 文件夹中,我想将其存储在myapp 文件夹 (tomcat/webapp/myapp).
我该怎么做?
嗯,我解决了我的问题,但它不是很好的解决方案(在我看来)。
首先,我将日志文件的绝对路径放在 .属性 文件中。例如:
logback.log.location=d:\Tomcat\tomcat_8.0.0-RC5\webapps\module\logs
然后我在 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>
更多细节你可以看here. This is an example,我用的。
但在上面的解决方案中,我们有特定于环境的日志绝对路径。这太丑了。当然我们可以使用系统变量CATALINA_HOME来避免绝对路径。但是,据我所知,CATALINA_HOME 可以是未定义的。或者,我们可以使用 tomcat 的另一个实例,它不在 CATALINA_HOME.
中也许有人有更好的独立于环境的解决方案?
更新
另一个解决方案:
只需在 logback.xml 中使用相对(到 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>
这是我尝试实现的第一个想法。我不知道,为什么它以前不起作用。也许还有其他问题。此外 this and this 篇文章让我感到困惑。
但现在这个解决方案工作正常。这正是我要找的 =)
如果您不想将日志保存在 Tomcat 的 bin 文件夹中,请使用 ${catalina.base}
作为 logback.xml[=17= 中的文件路径前缀] 文件。
<file>${catalina.base}/logs/log.log</file>
此处的日志文件将保存在 Tomcat 的现有日志文件夹中,而不是 bin。