Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 如何在Tomcat中分离web应用程序日志_Java_Tomcat_Logging_Logback_Slf4j - Fatal编程技术网

Java 如何在Tomcat中分离web应用程序日志

Java 如何在Tomcat中分离web应用程序日志,java,tomcat,logging,logback,slf4j,Java,Tomcat,Logging,Logback,Slf4j,我的webapp some-app.war在Tomcat 8.5下运行。我使用Slf4j和Logback在webapp中进行日志记录。当我使用log.info或类似工具进行日志记录时,输出会写入catalina.out,这与Tomcat用于内部日志记录的日志文件相同。我希望将应用程序中的日志写入一个单独的日志文件。但我不想使用logback的FileAppender来实现这一点。我更喜欢使用ConsoleAppender离开Logback,因为我可能会将战争交付给其他没有同样日志需求的人。我认为

我的webapp some-app.war在Tomcat 8.5下运行。我使用Slf4j和Logback在webapp中进行日志记录。当我使用log.info或类似工具进行日志记录时,输出会写入catalina.out,这与Tomcat用于内部日志记录的日志文件相同。我希望将应用程序中的日志写入一个单独的日志文件。但我不想使用logback的FileAppender来实现这一点。我更喜欢使用ConsoleAppender离开Logback,因为我可能会将战争交付给其他没有同样日志需求的人。我认为日志文件的位置是部署环境的一个方面,而不是代码


有没有一种方法可以让我在代码中仍然使用Slf4j和Logback的情况下,通过Tomcat服务器本身的配置来管理每个应用程序的日志文件?

您无法了解其他人的日志记录需求,因此没有一个银弹解决方案。但是我相信最好的选择不是我会让它配置得非常糟糕,因为有人可能会以不同的方式登录

您可以根据自己的意愿,使用FileAppender对其进行配置,并记录重新配置所需的步骤,例如编辑war

您还可以使用更高级的配置,例如使用syslog。现在,其他用户有一个标准化的配置选项,只要他们使用syslog即可


还有其他选择,但这里的共同点是你不知道别人想要什么,所以不要浪费时间去猜测。至少要做对你来说有效的事情。

如果你把logging.properties放在[CATALINA_HOME/conf/logging.properties]上,那么它应该将它用作你的根日志属性文件。将logging.properties或log.xml文件放在应用程序的[MyApp/WEB\u INF/classes/logging.properties]中,并像blow一样进行配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
  xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="stderr" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="Target" value="System.err"/> 
        <param name="ConversionPattern"
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="Target" value="System.out"/> 
        <param name="ConversionPattern"
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>


    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="true" />
        <param name="maxFileSize" value="2MB" />
        <param name="maxBackupIndex" value="100" />
        <param name="file" value="${catalina.base}/logs/MyApp/MyApp.log" />
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="stdout" />
        <appender-ref ref="stderr" />
        <appender-ref ref="file" />
    </root>

</log4j:configuration>

了解ConsolePender将默认为catalina.out。在tomcat/lib/logback.xml中设置FileAppender有什么问题?