How to log StreamBase events to different files

How to log StreamBase events to different files

book

Article ID: KB0074742

calendar_today

Updated On:

Products Versions
TIBCO Streaming 7

Description

Given an EMS Consumer named "Consumer" and an EMS Producer named "Producer" (adapters) and a JDBC data-source (a platform feature), how should the custom logging configuration file look to capture INFO and DEBUG level logs to different log files?

Issue/Introduction

How to log StreamBase events to different files

Resolution

Logback is the default platform logger, so is easiest to configure. If you need to use Log4J for StreamBase 7.x, please see the "Using StreamBase Logging" page in the "Administration Guide" section of the TIBCO StreamBaseĀ® Help documentation. TIBCO Streaming version 10 or later uses Logback exclusively.

This logback.xml configuration separates the JMS and JDBC messages into their own files and leaves the remainder to go to the console:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">

  <appender name="JMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logJMS-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
    </rollingPolicy>
    <encoder>
      <pattern>%date{yyyy-MM-dd HH:mm:ss} [LogBack %level] %logger{0} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="JDBC" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logJDBC-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
    </rollingPolicy>
    <encoder>
      <pattern>%date{yyyy-MM-dd HH:mm:ss} [LogBack %level] %logger{0} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="RootConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>info</level>
    </filter>
    <encoder>
      <pattern>%d{yyyy-MM-dd-HH:mm:ss.SSS} [%-5level] %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="Consumer" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JMS"/> 
  </logger>
  <logger name="Producer" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JMS"/> 
  </logger>

  <!-- JDBC -->
  <logger name="com.streambase.sb.expr.DataSourceInfoImpl" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.eventflow.JDBCTypechecker" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.jdbc.activevoice.Evaluator" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.typecheck.JDBCTypecheckInfo" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.jdbc.activevoice.JdbcBase" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.expr.DataSourceInfoImpl" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>
  <logger name="com.streambase.sb.jdbc.activevoice.TimeoutConnection" additivity="false">
    <level value="debug"/>
    <appender-ref ref="JDBC"/> 
  </logger>

  <root>
    <level value="debug"/>
    <appender-ref ref="RootConsoleAppender"/>
  </root>
</configuration>

Note 1: The logger name for most operators and adapters is the given simple name of that element.

Note 2: If you want any platform-level debug messages to go to any appender, the root logger must be at "DEBUG" level. The other platform DEBUG messages can then be discarded in the console appender. In this example, setting the root logger to INFO level will suppress JDBC logging.

Note 3: If you create any logger for class "com.streambase.sb.adapter.jms2" or its sub-classes, this will interact and override the other JMS loggers.

In order to find what classes to reference for the loggers, enable global DEBUG logging and examine the console. Things with prefix "c.s.sb.*" become "com.streambase.sb.*" for the logger name.

Ā