2013-11-02 48 views
2

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

这里是我的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文件。任何指针将不胜感激。

+1

你试过'target/logs/clientLog.log'吗? 'project.build.directory',即目标文件夹在运行时不可用。 – Boj

+0

是的,我试过了。似乎没有工作。然而,有效的是{catalina.base}属性(我正在使用tomcat)。 – va1b4av

回答

2

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

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

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


如果相对路径target/logs/clientLog.log不工作,那么机会是什么正在改变“当前目录”的时候,您的应用程序(例如Tomcat服务器)正在启动。但是(AFAIK)对于Tomcat来说是正常的。

2

如果我理解你的问题,那么我想你可以通过将你的路径设置为一个环境变量来实现你的任务。这里有事情,你必须做的:

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

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

  • 在FILE APPENDER中,添加文件路径为:
  • <File>${LOGDIR}/${FILE_NAME}-${bySecond}.log</File>

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

    在Java应用程序,设置app.workdir作为系统变量i,电子

    System.setProperty( “app.workdir”, “YOUR_TARGET_PATH”)

    让我知道如果你感到困惑。

    0

    如果您使用mac,请使用绝对路径,如 $ {catalina.base}/userLog。%d {YYYY-MM-DD}的.log tomcat下

    它不会与像../userLog.%d{yyyy-MM-dd}.log 相对路径工作,所以我认为这是总是很好用一些变量