如何在Cuba Framework中将slf4j日志记录到文件中

3

我将尝试配置Cuba框架以便将日志写入文件,但目前还无法实现。

在Java文件中,我有:

private static final Logger LOG = LoggerFactory.getLogger(BlisterauftragServiceImpl.class);
LOG.info("This is a, info log");

在 build.gradle 文件中,我有以下内容:

logbackConfigurationFile = 'etc/war-logback.xml'

然后在etc文件夹中,我有war-logback.xml文件。

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="false" packagingData="true">

    <property name="logDir" value="${app.home}/logs"/>

    <appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logDir}/app.log</file>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${logDir}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread%X{cubaApp}%X{cubaUser}] %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root>
        <appender-ref ref="Console"/>
        <appender-ref ref="File"/>
    </root>

    <!-- Begin CUBA -->

    <logger name="com.haulmont.cuba" level="DEBUG"/>

    <logger name="com.haulmont.cuba.core.sys" level="INFO"/>

    <logger name="com.haulmont.cuba.core.sys.CubaDefaultListableBeanFactory" level="WARN"/>

    <logger name="com.haulmont.cuba.core.app.scheduling" level="INFO"/>

    <logger name="com.haulmont.cuba.web.sys" level="INFO"/>

    <logger name="com.haulmont.cuba.portal" level="INFO"/>

    <logger name="com.haulmont.restapi.sys" level="INFO"/>

    <logger name="com.haulmont.cuba.core.app.LockManager" level="INFO"/>

    <!-- End CUBA -->

    <logger name="eclipselink" level="WARN"/>

    <logger name="eclipselink.sql" level="INFO"/>

    <logger name="org.springframework" level="WARN"/>

    <logger name="org.activiti" level="INFO"/>

    <logger name="freemarker" level="INFO"/>

    <logger name="org.thymeleaf.TemplateEngine" level="INFO"/>

    <logger name="org.docx4j" level="WARN"/>

    <logger name="org.xlsx4j" level="WARN"/>

    <logger name="org.hibernate" level="WARN"/>

    <logger name="sun" level="INFO"/>

    <logger name="com.sun" level="INFO"/>

    <logger name="javax" level="INFO"/>

    <logger name="org.apache" level="INFO"/>

    <logger name="org.atmosphere" level="INFO"/>

    <logger name="org.docx4j.utils.ResourceUtils" level="ERROR"/>

    <logger name="org.docx4j.Docx4jProperties" level="ERROR"/>

    <logger name="org.xlsx4j.jaxb.Context" level="ERROR"/>

    <!-- Begin Perf4J  -->

    <appender name="PerfStatFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logDir}/perfstat.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logDir}/perfstat.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="CoalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
        <param name="TimeSlice" value="60000"/>
        <appender-ref ref="PerfStatFile"/>
    </appender>

    <appender name="UIPerfStatFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logDir}/perfstat-ui.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logDir}/perfstat-ui.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <appender name="UICoalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
        <param name="TimeSlice" value="120000"/>
        <appender-ref ref="UIPerfStatFile"/>
    </appender>

    <logger name="org.perf4j.TimingLogger" additivity="false" level="INFO">
        <appender-ref ref="CoalescingStatistics"/>
    </logger>

    <logger name="com.haulmont.cuba.gui.logging.UIPerformanceLogger" additivity="false" level="INFO">
        <appender-ref ref="UICoalescingStatistics"/>
    </logger>

    <!-- End Perf4J  -->

</configuration>

如果我在这个文件中更改了任何内容,它不会做任何事情。例如,我尝试更改以下内容:
<file>${logDir}/app.log</file>

to:

<file>${logDir}/app1.log</file>

然后在文件夹deploy/tomcat/conf中,我找到了一个名为logback.xml的文件。在文件夹deploy/tomcat/logs中,我会找到所有的日志记录。我可以更改conf文件,并且这将正常工作。但是我的war-logback文件没有被考虑进来。

那么我的问题是,每次新生成代码时都会创建deploy文件夹并覆盖它。那么我必须每次重写logback.xml文件。

有什么想法吗?

谢谢 最好的问候

2个回答

0

logback 会按照以下步骤查找配置文件:

  1. Logback 会在类路径中查找名为 logback-test.xml 的文件。
  2. 如果没有找到该文件,则 Logback 会在类路径中查找名为 logback.groovy 的文件。
  3. 如果还是没有找到,它会检查类路径中是否存在名为 logback.xml 的文件。
  4. 如果还是没有找到,就会使用服务提供程序加载工具(JDK 1.6 中引入)来解析 com.qos.logback.classic.spi.Configurator 接口的实现,方法是在类路径中查找 META-INF\services\ch.qos.logback.classic.spi.Configurator 文件。该文件的内容应指定所需 Configurator 实现的完全限定类名。
  5. 如果上述所有步骤都失败了,Logback 将自动使用 BasicConfigurator 进行配置,这将导致日志输出被定向到控制台。

你可以在 这里 找到它。

因此,请确保您的 war 包中的配置文件命名为 "logback-test.xml"、"logback.groovy" 或 "logback.xml",也许这就是为什么 "war-logback.xml" 被忽略的原因。


0
如果您需要永久覆盖开发日志配置,可以创建一个文件<project_name>/etc/logback.xml并将配置放入其中。在运行deploy任务后,该文件将被复制到<project_folder>/deploy/app_home/logback.xml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接