Android Open Source - ironcontrol-for-android Log File Appender






From Project

Back to project page ironcontrol-for-android.

License

The source code is released under:

Apache License

If you think the Android project ironcontrol-for-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * #%L//  ww w.jav a  2 s  .  c  om
 * =====================================================
 *   _____                _     ____  _   _       _   _
 *  |_   _|_ __ _   _ ___| |_  / __ \| | | | ___ | | | |
 *    | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
 *    | | | |  | |_| \__ \ |_| | (_| |  _  |\__ \|  _  |
 *    |_| |_|   \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
 *                             \____/
 * 
 * =====================================================
 * 
 * Hochschule Hannover
 * (University of Applied Sciences and Arts, Hannover)
 * Faculty IV, Dept. of Computer Science
 * Ricklinger Stadtweg 118, 30459 Hannover, Germany
 * 
 * Email: trust@f4-i.fh-hannover.de
 * Website: http://trust.f4.hs-hannover.de/
 * 
 * This file is part of ironcontrol for android, version 1.0.1, implemented by the Trust@HsH research group at the Hochschule Hannover.
 * %%
 * Copyright (C) 2013 Trust@HsH
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package de.hshannover.f4.trust.ironcontrol.logger.appander;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Locale;

import android.os.Environment;
import de.hshannover.f4.trust.ironcontrol.logger.Level;
import de.hshannover.f4.trust.ironcontrol.logger.Logger;
import de.hshannover.f4.trust.ironcontrol.logger.LoggerFactory;

/**
 * Appender to log on the SDCard.
 * 
 * @author Marcel Reichenbach
 * 
 */
public class LogFileAppender implements Appender {

  private static final Logger logger = LoggerFactory.getLogger(LogFileAppender.class);

  private static final String IRONCONTROL_PATH = "/ironcontrol/logs/";

  private static String fileName = "ironcontrol-log_";

  private PrintWriter writer;

  private static final int INITIAL_BUFFER_SIZE = 64;

  public static final String DEFAULT_DELIMITER = "-";

  private boolean append = true;

  /**
   * The logging file will be placed in the root/IRONCONTROL_PATH folder.
   * 
   * @throws IOException
   */
  public LogFileAppender() throws IOException {
    File logFile = getLogFile();

    if (logFile != null) {
      if (!logFile.exists()) {
        if(!logFile.createNewFile()) {
          logger.log(Level.ERROR, "Unable to create new log file");
        }
      }

      FileOutputStream fileOutputStream = new FileOutputStream(logFile, append);

      writer = new PrintWriter(fileOutputStream);
    }
  }

  @Override
  public void clear() {
    throw new UnsupportedOperationException();
  }

  public synchronized void close() throws IOException {
    logger.log(Level.INFO, "Closing the FileAppender");
    if (writer != null) {
      writer.close();
    }
  }

  @Override
  public synchronized void log(String name, long time, Level level, Object message, Throwable throwable) {
    if (writer != null) {
      writer.println(toString(name, time, level, message, throwable));
      writer.flush();
    }
  }

  /**
   * Return the message and the Throwable object as a String.
   * 
   * @param time    The log-time.
   * @param level    The logging level. If null, it is not appended to the String.
   * @param message  The message. If null, it is not appended to the String.
   * @param throwable  The exception. If null, it is not appended to the String.
   * @return       The log-String, that is not null.
   */
  public String toString(String name, long time, Level level, Object message, Throwable throwable) {
    StringBuffer buffer = new StringBuffer(INITIAL_BUFFER_SIZE);

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM", Locale.GERMANY);
    buffer.append(dateFormat.format(time));

    buffer.append(DEFAULT_DELIMITER);

    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss", Locale.GERMANY);
    buffer.append(timeFormat.format(time));

    buffer.append(" [");
    buffer.append(Thread.currentThread().getName());
    buffer.append("] [");

    if(name != null){
      int index = name.lastIndexOf(".");
      buffer.append(name.substring(index+1));
    }

    buffer.append("] [");

    if(level != null){
      buffer.append(level.toString());
    }

    buffer.append("] ");

    if(message != null){
      buffer.append(message.toString());
    }

    buffer.append(' ');

    if(throwable != null){
      buffer.append(throwable.toString());
      StackTraceElement[] stackTrace = throwable.getStackTrace();
      for (int i = 0; i < stackTrace.length; i++) {
        StackTraceElement element = stackTrace[i];
        buffer.append(System.getProperty("line.separator"));
        buffer.append("\tat ");
        buffer.append(element.toString());
      }
    }

    return buffer.toString();
  }


  @Override
  public long getLogSize() {
    File logFile = getLogFile();

    if (logFile != null) {
      if (!logFile.exists()) {
        return logFile.length();
      }
    }

    return 0;
  }

  /**
   * Android 1.6-2.1 used {@link Environment#getExternalStorageDirectory()}
   *  to return the (root)
   * external storage directory.  Folders in this subdir were shared by all applications
   * and were not removed when the application was deleted.
   * Starting with andriod 2.2, Context.getExternalFilesDir() is available.
   * This is an external directory available to the application which is removed when the application
   * is removed.
   * 
   * This implementation uses Context.getExternalFilesDir() if available, if not available uses
   * {@link Environment#getExternalStorageDirectory()}.
   * 
   * @return a File object representing the external storage directory
   * used by this device or null if the subdir could not be created or proven to exist
   */
  protected synchronized File getExternalStorageDirectory() {

    File externalStorageDirectory = new File(Environment.getExternalStorageDirectory().getPath() + IRONCONTROL_PATH);

    if( externalStorageDirectory != null) {
      if(!externalStorageDirectory.exists()) {
        if(!externalStorageDirectory.mkdirs()) {
          externalStorageDirectory = null;
          logger.log(Level.ERROR, "mkdirs failed on externalStorageDirectory " + externalStorageDirectory);
        }
      }
    }
    return externalStorageDirectory;
  }

  /**
   * @return the log file used to log to external storage
   */
  public synchronized File getLogFile() {
    File mSdCardLogFile = null;
    long time = System.currentTimeMillis();
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM", Locale.GERMANY);

    if( mSdCardLogFile == null ) {
      String externalStorageState = Environment.getExternalStorageState();
      if(externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
        File externalStorageDirectory = getExternalStorageDirectory();

        if (externalStorageDirectory != null) {
          mSdCardLogFile = new File(externalStorageDirectory, fileName + dateFormat.format(time) + ".txt");
        }
      }

      if(mSdCardLogFile == null) {
        logger.log(Level.ERROR, "Unable to open log file from external storage");
      }
    }

    return mSdCardLogFile;
  }

}




Java Source Code List

de.hshannover.f4.trust.ironcontrol.asynctask.ConnectionTask.java
de.hshannover.f4.trust.ironcontrol.asynctask.PDP.java
de.hshannover.f4.trust.ironcontrol.asynctask.PublishTask.java
de.hshannover.f4.trust.ironcontrol.asynctask.PublishTestTask.java
de.hshannover.f4.trust.ironcontrol.asynctask.PurgePublisherTask.java
de.hshannover.f4.trust.ironcontrol.asynctask.SearchTask.java
de.hshannover.f4.trust.ironcontrol.asynctask.SubscriptionTask.java
de.hshannover.f4.trust.ironcontrol.database.DBContentProvider.java
de.hshannover.f4.trust.ironcontrol.database.DatabaseHelper.java
de.hshannover.f4.trust.ironcontrol.database.entities.AbstractEntity.java
de.hshannover.f4.trust.ironcontrol.database.entities.Attributes.java
de.hshannover.f4.trust.ironcontrol.database.entities.Connections.java
de.hshannover.f4.trust.ironcontrol.database.entities.IdentifierAttributes.java
de.hshannover.f4.trust.ironcontrol.database.entities.Identifier.java
de.hshannover.f4.trust.ironcontrol.database.entities.MetaAttributes.java
de.hshannover.f4.trust.ironcontrol.database.entities.Requests.java
de.hshannover.f4.trust.ironcontrol.database.entities.Responses.java
de.hshannover.f4.trust.ironcontrol.database.entities.ResultItems.java
de.hshannover.f4.trust.ironcontrol.database.entities.ResultMetaAttributes.java
de.hshannover.f4.trust.ironcontrol.database.entities.ResultMetadata.java
de.hshannover.f4.trust.ironcontrol.database.entities.VendorMetadata.java
de.hshannover.f4.trust.ironcontrol.exceptions.IronControlUncaughtExceptionHandler.java
de.hshannover.f4.trust.ironcontrol.logger.Level.java
de.hshannover.f4.trust.ironcontrol.logger.LogData.java
de.hshannover.f4.trust.ironcontrol.logger.LogReceiver.java
de.hshannover.f4.trust.ironcontrol.logger.LoggerFactory.java
de.hshannover.f4.trust.ironcontrol.logger.Logger.java
de.hshannover.f4.trust.ironcontrol.logger.appander.Appender.java
de.hshannover.f4.trust.ironcontrol.logger.appander.LogCatAppender.java
de.hshannover.f4.trust.ironcontrol.logger.appander.LogFileAppender.java
de.hshannover.f4.trust.ironcontrol.logger.appander.LogListAppender.java
de.hshannover.f4.trust.ironcontrol.logger.appander.LogToastAppender.java
de.hshannover.f4.trust.ironcontrol.logic.Connection.java
de.hshannover.f4.trust.ironcontrol.logic.KeystoreManager.java
de.hshannover.f4.trust.ironcontrol.logic.RequestsController.java
de.hshannover.f4.trust.ironcontrol.logic.ResultNotificationManager.java
de.hshannover.f4.trust.ironcontrol.logic.StoredResponses.java
de.hshannover.f4.trust.ironcontrol.logic.SubscriptionPoller.java
de.hshannover.f4.trust.ironcontrol.logic.data.BuildIdetifiers.java
de.hshannover.f4.trust.ironcontrol.logic.data.Operation.java
de.hshannover.f4.trust.ironcontrol.logic.data.PollReceiver.java
de.hshannover.f4.trust.ironcontrol.logic.data.PollSender.java
de.hshannover.f4.trust.ironcontrol.logic.data.PublishRequestData.java
de.hshannover.f4.trust.ironcontrol.logic.data.RequestData.java
de.hshannover.f4.trust.ironcontrol.logic.data.SearchRequestData.java
de.hshannover.f4.trust.ironcontrol.logic.data.SubscribeRequestData.java
de.hshannover.f4.trust.ironcontrol.view.AdvancedRequestFragment.java
de.hshannover.f4.trust.ironcontrol.view.ConnectionFragmentActivity.java
de.hshannover.f4.trust.ironcontrol.view.MainActivity.java
de.hshannover.f4.trust.ironcontrol.view.MetadataBuilderActivity.java
de.hshannover.f4.trust.ironcontrol.view.PublishActivity.java
de.hshannover.f4.trust.ironcontrol.view.SearchButtonFragment.java
de.hshannover.f4.trust.ironcontrol.view.SearchFragmentActivity.java
de.hshannover.f4.trust.ironcontrol.view.SettingsActivity.java
de.hshannover.f4.trust.ironcontrol.view.SimpleRequestFragment.java
de.hshannover.f4.trust.ironcontrol.view.SubscribeButtonFragment.java
de.hshannover.f4.trust.ironcontrol.view.SubscribeFragmentActivity.java
de.hshannover.f4.trust.ironcontrol.view.TabFragment.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceDialogEvent.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceDialog.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceListDialog.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceListEvent.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoicePublishDialog.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceRemoveDialog.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceSearchDialog.java
de.hshannover.f4.trust.ironcontrol.view.dialogs.MultichoiceSubscribeDialog.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListHierarchyActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListOverviewActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListResponsesActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListResultItemsActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListResultMetaActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListResultMetaAttributesActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListSavedConnectionsActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListSavedPublishsActivity.java
de.hshannover.f4.trust.ironcontrol.view.list_activities.ListVendorMetadataActivity.java
de.hshannover.f4.trust.ironcontrol.view.logger.LoggerListActivity.java
de.hshannover.f4.trust.ironcontrol.view.logger.LoggerListArrayAdapter.java
de.hshannover.f4.trust.ironcontrol.view.logger.LoggerPopUp.java
de.hshannover.f4.trust.ironcontrol.view.util.MetaDataEditText.java
de.hshannover.f4.trust.ironcontrol.view.util.MetaDataLinearLayout.java
de.hshannover.f4.trust.ironcontrol.view.util.MetadataValueFieldsBuilder.java
de.hshannover.f4.trust.ironcontrol.view.util.Node.java
de.hshannover.f4.trust.ironcontrol.view.util.PopUpEvent.java
de.hshannover.f4.trust.ironcontrol.view.util.PopUp.java
de.hshannover.f4.trust.ironcontrol.view.util.PromptSpinnerAdapter.java
de.hshannover.f4.trust.ironcontrol.view.util.RequiredSpinnerAdapter.java
de.hshannover.f4.trust.ironcontrol.view.util.SavePopUp.java
de.hshannover.f4.trust.ironcontrol.view.util.Util.java
de.hshannover.f4.trust.ironcontrol.view.util.ValidSpinnerAdapter.java