Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LOGBACK:将日志写入类路径中的文件_Java_Maven_Classpath_Logback - Fatal编程技术网

Java LOGBACK:将日志写入类路径中的文件

Java LOGBACK:将日志写入类路径中的文件,java,maven,classpath,logback,Java,Maven,Classpath,Logback,我最近刚开始使用Logback,正在浏览官方文档。在我的一个项目中实现它时,我想知道是否有办法将日志写入类路径上的文件或目标文件夹/logs/myapp.log中的某个位置?我在官方文档中找不到太多信息(是的,我读过变量替换) 这是我的logback.xml: <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>clientLog.log</file>

我最近刚开始使用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>


clientLog.log
真的
%-4相对[%thread]-5级别%logger{35}-%msg%n

现在,我希望在目标文件夹(MAVEN项目)中创建clientLog.log文件。任何指针都将受到欢迎。

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

类似地,在构建环境的某个位置(例如“目标”目录)也找不到明确支持日志的机制。应用程序通常不在生成环境中运行

因此,最实际的解决方案可能是有两个单独的日志配置文件;i、 e.一个用于开发平台,另一个用于部署平台。在不同的日志配置文件中使用不同的日志文件路径名



如果相对路径名
target/logs/clientLog.log
不起作用,则在应用程序(例如tomcat服务器)启动时,可能有什么东西正在更改“当前目录”。但是(好吧)这对Tomcat来说是正常的。

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

  • 在logback.xml文件中创建一个变量,比如“LOGDIR”
  • 在文件追加器中,将文件路径添加为:
  • ${LOGDIR}/${FILE_NAME}-${bySecond}.log

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

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

    System.setProperty(“app.workdir”、“您的目标路径”)


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

    如果您使用mac,请使用以下绝对路径 ${catalina.base}/userLog.%d{yyyy-MM-dd}.log 雄猫之下

    它不能使用相对路径,如../userLog.%d{yyyy-MM-dd}.log
    因此,我认为使用一些变量总是好的

    您是否尝试过
    target/logs/clientLog.log
    project.build.directory
    ,即目标文件夹在运行时不可用。是的,我已经尝试过了。似乎不起作用。然而,有效的是{catalina.base}属性(我使用的是tomcat)。