2

我最近开始使用 Logback 并且正在阅读官方文档。在我的一个项目中实现它时,我想知道是否有办法将日志写入类路径上的文件或目标文件夹/logs/myapp.log 中的某个位置?我在官方文档中找不到太多信息(是的,我已经阅读了变量替换)。

这是我的 logback.xml:

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>clientLog.log</file>
        <append>true</append>
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
            by default -->
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>


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

    </root>

</configuration>

现在我希望在目标文件夹(MAVEN 项目)中创建 clientLog.log 文件。任何指针将不胜感激。

4

3 回答 3

3

我怀疑您是否会找到一种标准机制来写入应用程序类路径上的文件。类路径上的东西通常是只读的。

同样,您不会在构建环境中的某个位置(例如“目标”目录)中找到显式支持日志的机制。应用程序通常不在构建环境中运行。

所以最实用的解决方案可能是拥有两个独立的日志配置文件;即一个用于您的开发平台,另一个用于您的部署平台。在不同的日志记录配置文件中使用不同的日志文件路径名。


如果相对路径名target/logs/clientLog.log不起作用,那么当您的应用程序(例如,tomcat 服务器)启动时,很可能是某些东西正在改变“当前目录”。但是(AFAIK)这对于 Tomcat 来说是正常的。

于 2013-11-02T06:23:30.430 回答
2

如果我理解您的问题,那么我想您可以通过将路径设置为环境变量来完成您的任务。以下是您必须做的事情:

  1. 创建一个变量,在 logback.xml 文件中说“LOGDIR”

<property name="LOGDIR" value="${app.workdir}/log" />

  1. 在 FILE APPENDER 中,将文件路径添加为:

<File>${LOGDIR}/${FILE_NAME}-${bySecond}.log</File>

在这里,您的文件将在 $LOGDIR 目录下创建。现在的问题是如何设置“LOGDIR”值。

在您的 JAVA 应用程序中,将 app.workdir 设置为系统变量,即

System.setProperty("app.workdir", "YOUR_TARGET_PATH")

如果您感到困惑,请告诉我。

于 2013-12-31T07:07:18.710 回答
0

如果你使用mac,请使用tomcat下的${catalina.base}/userLog.%d{yyyy-MM-dd}.log之类的绝对路径

它不适用于 ../userLog.%d{yyyy-MM-dd}.log 这样的相对路径,所以我认为使用一些变量总是好的

于 2016-02-23T22:29:33.767 回答