Skip to content

Not declaring logzioType field causes a potential bug #55

@Eli-Golin

Description

@Eli-Golin

Reproduce:
An example logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration file is scanned for changes every 60 seconds -->
<configuration scan="true" scanPeriod="60 seconds">
    <property name="LOGS_DIR_BASE" value="${LOGS_DIR_BASE:-log}"/>
    <property name = "KAFKA_LOG_LEVEL" value = "${KAFKA_LOG_LEVEL:-warn}"/>
    <property name = "ZOOKEEPER_LOG_LEVEL" value = "${ZOOKEEPER_LOG_LEVEL:-warn}"/>

    <define name="IP" class="com.clicktale.pipeline.webrecorder.logging.IpPropertyDefiner"/>
    <define name="SERVER_ID" class="com.clicktale.pipeline.webrecorder.logging.HostIdPropertyDefiner"/>
    <define name="MODULE_VERSION" class="com.clicktale.pipeline.webrecorder.logging.WebrecorderVeresionProvider"/>

    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>

    <appender name="logzio-es" class="ch.qos.logback.classic.AsyncAppender">
        <appender class="io.logz.logback.LogzioLogbackAppender">
            <token>${LOGZIO_ES_TOKEN}</token>
            <logzioUrl>${LOGZIO_URL}</logzioUrl>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>${LOGZ_ES_LEVEL}</level>
            </filter>
            <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                <providers>
                    <timestamp>
                        <timeZone>UTC</timeZone>
                    </timestamp>
                    <message/>
                    <loggerName>
                        <shortenedLoggerNameLength>36</shortenedLoggerNameLength>
                        <fieldName>logger</fieldName>
                    </loggerName>
                    <threadName>
                        <fieldName>thread</fieldName>
                    </threadName>
                    <logLevel>
                        <fieldName>level</fieldName>
                    </logLevel>
                    <stackTrace>
                        <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                            <maxDepthPerThrowable>30</maxDepthPerThrowable>
                            <maxLength>2048</maxLength>
                            <shortenedClassNameLength>20</shortenedClassNameLength>
                            <rootCauseFirst>true</rootCauseFirst>
                        </throwableConverter>
                    </stackTrace>
                    <logstashMarkers/>
                    <arguments/>
                    <pattern>
                        <pattern>
                            {
                            "dc": "${CT_REGION}",
                            "host": "${HOSTNAME}",
                            "module": "webrecorder",
                            "module_version": "${MODULE_VERSION}",
                            "env" : "${ENVIRONMENT}",
                            "ip" : "${IP}",
                            "server_id":"${SERVER_ID}"
                            }
                        </pattern>
                    </pattern>
                </providers>
            </encoder>
            <socketTimeout>10000</socketTimeout>
            <connectTimeout>10000</connectTimeout>
            <compressRequests>true</compressRequests>
            <drainTimeoutSec>5</drainTimeoutSec>
            <debug>true</debug>
            <inMemoryQueue>false</inMemoryQueue>
            <inMemoryQueueCapacityBytes>50000000</inMemoryQueueCapacityBytes>
        </appender>
    </appender>


    <appender name="logzio-s3" class="ch.qos.logback.classic.AsyncAppender">
        <appender class="io.logz.logback.LogzioLogbackAppender">
            <token>${LOGZIO_AUDIT_TOKEN}</token>
            <logzioUrl>${LOGZIO_URL}</logzioUrl>
            <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                <providers>
                    <timestamp>
                        <timeZone>UTC</timeZone>
                    </timestamp>
                    <message/>
                    <loggerName>
                        <shortenedLoggerNameLength>36</shortenedLoggerNameLength>
                        <fieldName>logger</fieldName>
                    </loggerName>
                    <threadName>
                        <fieldName>thread</fieldName>
                    </threadName>
                    <logLevel>
                        <fieldName>level</fieldName>
                    </logLevel>
                    <stackTrace>
                        <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                            <maxDepthPerThrowable>30</maxDepthPerThrowable>
                            <maxLength>2048</maxLength>
                            <shortenedClassNameLength>20</shortenedClassNameLength>
                            <rootCauseFirst>true</rootCauseFirst>
                        </throwableConverter>
                    </stackTrace>
                    <logstashMarkers/>
                    <arguments/>
                    <pattern>
                        <pattern>
                            {
                            "dc": "${CT_REGION}",
                            "host": "${HOSTNAME}",
                            "module": "webrecorder",
                            "module_version": "${MODULE_VERSION}",
                            "env" : "${ENVIRONMENT}",
                            "ip" : "${IP}",
                            "server_id":"${SERVER_ID}"
                            }
                        </pattern>
                    </pattern>
                </providers>
            </encoder>
            <socketTimeout>10000</socketTimeout>
            <connectTimeout>10000</connectTimeout>
            <compressRequests>true</compressRequests>
            <drainTimeoutSec>5</drainTimeoutSec>
            <debug>true</debug>
            <inMemoryQueue>false</inMemoryQueue>
            <inMemoryQueueCapacityBytes>50000000</inMemoryQueueCapacityBytes>
        </appender>
    </appender>

    <appender name="FILE" class="ch.qos.logback.classic.AsyncAppender">
        <appender class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOGS_DIR_BASE}/webrecorder.log</file>
            <encoder>
                <pattern>%d{ISO8601} [%thread] %-5level %logger{36} [%marker] - %msg%n</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOGS_DIR_BASE}/webrecorder%i.log</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>20</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- each file should be at most 50MB, and with rolling window of 20 we keep at most 1GB -->
                <maxFileSize>50MB</maxFileSize>
            </triggeringPolicy>
        </appender>
    </appender>


    <appender name="STATS" class="ch.qos.logback.classic.AsyncAppender">
        <appender class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOGS_DIR_BASE}/statistics.log</file>
            <encoder>
                <pattern>%d{ISO8601} [%thread] %-5level %logger{36} [%marker] - %msg%n</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOGS_DIR_BASE}/Statistics%i.log</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>10</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- each file should be at most 20MB, and with rolling window of 20 we keep at most 200MB -->
                <maxFileSize>20MB</maxFileSize>
            </triggeringPolicy>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>log/statistics%i.log</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>10</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- each file should be at most 20MB, and with rolling window of 20 we keep at most 200MB -->
                <maxFileSize>20MB</maxFileSize>
            </triggeringPolicy>
        </appender>
    </appender>

    <appender name="AUDIT" class="ch.qos.logback.classic.AsyncAppender">
        <appender class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOGS_DIR_BASE}/audit.log</file>
            <encoder>
                <pattern>%d{ISO8601} [%thread] %-5level %logger{36} [%marker] - %msg%n</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${LOGS_DIR_BASE}/audit%i.log</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>10</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- each file should be at most 20MB, and with rolling window of 10 we keep at most 200MB -->
                <maxFileSize>20MB</maxFileSize>
            </triggeringPolicy>
        </appender>
    </appender>


    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{ISO8601} [%level] [%logger{20}]  [%marker]  %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.apache.zookeeper" level="${ZOOKEEPER_LOG_LEVEL}"/>
    <logger name="org.apache.kafka" level="${KAFKA_LOG_LEVEL}"/>
    <logger name="ch.qos.logback" level="WARN"/>


    <logger name="statistics" additivity="false">
        <appender-ref ref="STATS"/>
        <appender-ref ref="logzio-es"/>
    </logger>

    <logger name="auditlog" level="INFO" additivity="false">
        <appender-ref ref="logzio-s3"/>
    </logger>

    <root>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="logzio-es"/>
    </root>
</configuration>

When not declaring logzioType field and enabling the disk caching option (inMemoryQueue = false) for the appenders specified in logback.xml, all logs will go to the same subaccount (regardless of the concrete token defined for each appender).

I guess it is somehow related to the fact that the logzioType has a default value (java in this case) and this field is used in the local folder's structure where the appender is generating it's log data for future sending.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions