Hi guys,
I am using logback for my application logs. I have logback.xml as a part of
my fat jar that I submit to flink via command line flink run "...". When I
run my application from IDE , the appenders are what I have set in my
logback but when I run from command line the appender defaults to the root
in the flink installation directory. How can I make sure that my
application logs go to the correct appender. Here is my logback.xml file
which is available in the classpath.

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

<configuration debug="true">

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>

    <!-- To enable JMX Management -->
    <jmxConfigurator />

    <!-- Application Logger -->
    <appender name="applogfile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${APP_LOG_ROOT}service.log</file>
        <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
<fileNamePattern>${APP_LOG_ROOT}Archive/service.%d{yyyy-MM-dd_HH}.log.gz</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} %p %c | %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="ASYNC_APPLOG" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>50000</queueSize>
        <appender-ref ref="applogfile" />
    </appender>
    <logger name="com.visa.flink" level="INFO"
            additivity="false">
        <appender-ref ref="ASYNC_APPLOG" />
    </logger>


    <!-- Error Report Logger -->
    <appender name="serviceerrorfile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${APP_LOG_ROOT}service-error.log</file>
        <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
<fileNamePattern>${APP_LOG_ROOT}Archive/service-error.%d{yyyy-MM-dd_HH}.log.gz</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} %p %c %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="ASYNC_STREAMING_ERROR"
class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>50000</queueSize>
        <appender-ref ref="serviceerrorfile" />
    </appender>
    <logger name="streaming.error" level="ERROR" additivity="false">
        <appender-ref ref="ASYNC_STREAMING_ERROR" />
    </logger>



    <!-- STDOUT -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} [%thread] %-5level %logger{5} -
                %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>


Thanks,
Vishwas

Reply via email to