All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.snowflake.client.log.SFFormatter Maven / Gradle / Ivy

There is a newer version: 3.18.0
Show newest version
/*
 * Copyright (c) 2012-2019 Snowflake Computing Inc. All rights reserved.
 */
package net.snowflake.client.log;

import net.snowflake.client.jdbc.SnowflakeDriver;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.LogRecord;

/**
 * SFFormatter
 */
public class SFFormatter extends Formatter
{
  private static final DateFormat df = new SimpleDateFormat(
      "yyyy-MM-dd HH:mm:ss.SSS");

  static
  {
    df.setTimeZone(TimeZone.getTimeZone("UTC"));
  }

  public static final String CLASS_NAME_PREFIX =
      SnowflakeDriver.class.getPackage().getName().substring(0,
                                                             SnowflakeDriver.class.getPackage().getName().lastIndexOf('.'));

  public static final String INFORMATICA_V1_CLASS_NAME_PREFIX =
      "com.snowflake";

  @Override
  public String format(LogRecord record)
  {
    int lineNumber = -1;
    String className = record.getSourceClassName();
    final String methodName = record.getSourceMethodName();
    StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace();
    for (StackTraceElement ste : stackTraces)
    {
      if (className.equals(ste.getClassName())
          && methodName.equals(ste.getMethodName()))
      {
        lineNumber = ste.getLineNumber();
        break;
      }
    }
    if (className.startsWith(CLASS_NAME_PREFIX))
    {
      className = "n.s.c" + className.substring(CLASS_NAME_PREFIX.length());
    }
    else if (className.startsWith(INFORMATICA_V1_CLASS_NAME_PREFIX))
    {
      className = "c.s" + className.substring(
          INFORMATICA_V1_CLASS_NAME_PREFIX.length());
    }

    StringBuilder builder = new StringBuilder(1000);
    builder.append(df.format(new Date(record.getMillis()))).append(" ");
    builder.append(className).append(" ");
    builder.append(record.getLevel()).append(" ");
    builder.append(methodName).append(":");
    builder.append(lineNumber).append(" - ");
    builder.append(formatMessage(record));
    builder.append("\n");
    return builder.toString();
  }

  @Override
  public String getHead(Handler h)
  {
    return super.getHead(h);
  }

  @Override
  public String getTail(Handler h)
  {
    return super.getTail(h);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy