【问题标题】:Location of logback default file appenderlogback 默认文件 appender 的位置
【发布时间】:2015-04-22 16:52:28
【问题描述】:

我有一个带有 logback 作为日志功能的 J2EE Web 应用程序 并使用 Tomcat 7 作为服务器。 我现在正在使用 logback ConsoleAppender,所以我可以去 /var/log/tomcat7/catalina.out 查看日志。

现在,我想将日志移动到文件中。我将使用 RollingFileAppender 来保存日志。

我不想使用绝对路径,例如:

<appender name="FILE" class="xxx.RollingFileAppender">
    <file>/var/log/testFile1.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

我也不想使用系统环境变量,例如:

<appender name="FILE" class="xxx.RollingFileAppender">
    <file>{LOG_LOCATION}\testFile2.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

如果我只在标签中写日志文件名,比如:

<appender name="FILE" class="xxx.RollingFileAppender">
    <file>testFile3.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

我会收到错误:

21:29:45,265 |-ERROR in ch.qos.logback.core.FileAppender[TEST_LOG] - openFile(testFile3.log,true) call failed. java.io.FileNotFoundException: testFile3.log (Permission denied)
        at java.io.FileNotFoundException: testFile3.log (Permission denied)
        at      at java.io.FileOutputStream.open(Native Method)
        at      at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
        at      at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:28)
        at      at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:149)
        at      at ch.qos.logback.core.FileAppender.start(FileAppender.java:108)
        at      at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:96)
        at      at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317)
        at      at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196)
        at      at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182)
        at      at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
        at      at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at      at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148)
        at      at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
        at      at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at      at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
        at      at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
        at      at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
        at      at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
        at      at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
        at      at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657)
        at      at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:282)
        at      at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
        at      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)
        at      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)
        at      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
        at      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
        at      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
        at      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
        at      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
        at      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at      at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at      at java.lang.Thread.run(Thread.java:744)

我可以只用它的名字创建一个日志文件吗? 如果是这样,Tomcat 7 服务器中 logback 日志文件的默认位置在哪里?

【问题讨论】:

  • 我们的团队在比较了不同的解决方案后,决定使用系统环境变量 ${LOG_HOME} 来保存日志文件的位置。

标签: java configuration tomcat7 logback


【解决方案1】:

您想要一个相对路径。指定&lt;file&gt;./testFile3.log&lt;/file&gt; 通过运行一次来​​检查它的创建位置。

请注意,这可能与用于启动应用程序的位置有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2013-07-18
    相关资源
    最近更新 更多