logback-android/src/main/java/ch/qos/logback/classic/android/SQLiteAppender.java
private void bindCallerData(SQLiteStatement stmt, StackTraceElement[] callerDataArray) throws SQLException {
    if (callerDataArray != null && callerDataArray.length > 0) {
      StackTraceElement callerData = callerDataArray[0];
      if (callerData != null) {
        bindString(stmt, CALLER_FILENAME_INDEX, callerData.getFileName());
        bindString(stmt, CALLER_CLASS_INDEX, callerData.getClassName());
        bindString(stmt, CALLER_METHOD_INDEX, callerData.getMethodName());
        bindString(stmt, CALLER_LINE_INDEX, Integer.toString(callerData.getLineNumber()));
      }
    }
  }
private void bindCallerData(SQLiteStatement stmt, StackTraceElement[] callerDataArray) throws SQLException {
    if (callerDataArray != null && callerDataArray.length > 0) {
      StackTraceElement callerData = callerDataArray[0];
      if (callerData != null) {
        bindString(stmt, CALLER_FILENAME_INDEX, callerData.getFileName());
        bindString(stmt, CALLER_CLASS_INDEX, callerData.getClassName());
        bindString(stmt, CALLER_METHOD_INDEX, callerData.getMethodName());
        bindString(stmt, CALLER_LINE_INDEX, Integer.toString(callerData.getLineNumber()));
      }
    }
  }
Binds the calling function's details (filename, line, etc.) to a SQLite statement's arguments

@param stmt the SQLite statement to modify
@param callerDataArray the caller's stack trace
@throws SQLException