Package anvil.server.basic

Source Code of anvil.server.basic.BasicLogLayout

/*
* $Id: BasicLogLayout.java,v 1.8 2002/09/16 08:05:06 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.server.basic;

import java.util.TimeZone;
import java.util.Calendar;
import java.util.ArrayList;

import anvil.Log;
import anvil.LogEvent;
import anvil.LogLayout;
import anvil.server.LoggingPreferences;
import anvil.server.Zone;
import anvil.server.LoggingPreferences;
import anvil.server.ConfigurationError;


/**
* class BasicLogLayout
*
* @author  Jani Lehtim�ki
*/
public class BasicLogLayout implements LogLayout
{

  private static final String DEFAULT_FORMAT = "{date}  {time} {thread}\t\t{message}\\n{exception}";
  private static final String _lineSeparator = System.getProperty("line.separator");
  private static final int FMT_TEXT     = 0;
  private static final int FMT_DATE     = 1;
  private static final int FMT_TIME     = 2;
  private static final int FMT_MS       = 3;
  private static final int FMT_THREAD   = 4;
  private static final int FMT_SEVERITY = 5;
  private static final int FMT_ZONE     = 6;
  private static final int FMT_MESSAGE  = 7;
  private static final int FMT_EXCEPTION = 8;
 
  private TimeZone _timezone = TimeZone.getDefault();
  private String _formatstr = null;
  private Object[] _format = null;


  public BasicLogLayout(LoggingPreferences prefs)
  {
    String tz = (String)prefs.getPreference("timezone");
    if (tz != null) {
      _timezone = TimeZone.getTimeZone(tz);
    }
    String fmt = (String)prefs.getPreference("formatting");
    if (fmt == null) {
      fmt = DEFAULT_FORMAT;
    }
    init(fmt);
  }


  public BasicLogLayout()
  {
    init(DEFAULT_FORMAT);
  }
 

  public void init(String fmt)
  {
    ArrayList list = new ArrayList();
    int n = fmt.length();
    int i = 0;
    StringBuffer text = new StringBuffer();
    while(i<n) {
      char ch = fmt.charAt(i++);
      if (ch == '\\') {
        if (i<n) {
          switch(ch = fmt.charAt(i++)) {
          case 't':
            text.append('\t');
            break;
          case 'r':
            text.append('\r');
            break;
          case 'n':
            text.append('\n');
            break;
          case '\\':
            text.append('\\');
            break;
          default:
            text.append(ch);
          }
        } else {
          text.append('\\');
        }

      } else if (ch == '{') {
        if (i<n) {
          if (text.length()>0) {
            list.add(new Integer(FMT_TEXT));
            list.add(text.toString());
          }
          text.setLength(0);
          while(i<n) {
            ch = fmt.charAt(i++);
            if (ch=='}') {
              break;
            }
            text.append(ch);
          }
          String tag = text.toString();
          if (tag.equals("date")) {
            list.add(new Integer(FMT_DATE));
          } else if (tag.equals("time")) {
            list.add(new Integer(FMT_TIME));
          } else if (tag.equals("ms")) {
            list.add(new Integer(FMT_MS));
          } else if (tag.equals("thread")) {
            list.add(new Integer(FMT_THREAD));
          } else if (tag.equals("severity")) {
            list.add(new Integer(FMT_SEVERITY));
          } else if (tag.equals("zone")) {
            list.add(new Integer(FMT_ZONE));
          } else if (tag.equals("message")) {
            list.add(new Integer(FMT_MESSAGE));
          } else if (tag.equals("exception")) {
            list.add(new Integer(FMT_EXCEPTION));
          } else {
            throw new ConfigurationError("Invalid log format tag '{"+tag+"}'");
          }
          text.setLength(0);
        }
      } else {
        text.append(ch);
      }
    }
    if (text.length()>0) {
      list.add(new Integer(FMT_TEXT));
      list.add(text.toString());
    }
    _format = list.toArray(new Object[list.size()]);
    _formatstr = fmt;
    list.clear();
  }


  public String toString()
  {
    return "BasicLogLayout("+_formatstr+")";
  }



  public String format(LogEvent event)
  {
    Calendar date = null;
    Log log = event.getLog();
    StringBuffer buffer = new StringBuffer(100);
    Object[] fmt = _format;
    int n = fmt.length;
    int i = 0;
    while(i<n) {
      switch(((Integer)fmt[i++]).intValue()) {
      case FMT_TEXT:
        {
          buffer.append(fmt[i++]);
        }
        break;

      case FMT_DATE:
        {
          if (date == null) {
            date = Calendar.getInstance(_timezone);
          }
          int j = date.get(Calendar.YEAR);
          buffer.append(j);
          buffer.append('-');

          j = date.get(Calendar.MONTH) + 1;
          if (j<10) {
            buffer.append('0');
          }
          buffer.append(j);
          buffer.append('-');

          j = date.get(Calendar.DAY_OF_MONTH);
          if (j<10) {
            buffer.append('0');
          }
          buffer.append(j);
        }
        break;

      case FMT_TIME:
        {
          if (date == null) {
            date = Calendar.getInstance(_timezone);
          }
          int j = date.get(Calendar.HOUR_OF_DAY);
          if (j<10) {
            buffer.append('0');
          }
          buffer.append(j);
          buffer.append(':');
          j = date.get(Calendar.MINUTE);
          if (j<10) {
            buffer.append('0');
          }
          buffer.append(j);
          buffer.append('.');
          j = date.get(Calendar.SECOND);
          if (j<10) {
            buffer.append('0');
          }
          buffer.append(j);
        }
        break;
       
      case FMT_MS:
        {
          buffer.append(System.currentTimeMillis() - log.getStartTime());
        }
        break;
       

      case FMT_THREAD:
        {
          buffer.append(event.getThread().getName());
        }
        break;

      case FMT_SEVERITY:
        {
          buffer.append(anvil.Log.SEVERITY[event.getSeverity()]);
        }
        break;
       
      case FMT_ZONE:
        {
          buffer.append(log.getName());
        }
        break;

      case FMT_MESSAGE:
        {
          buffer.append(event.getMessage());
        }
        break;
       
      case FMT_EXCEPTION:
        {
          Throwable throwable = event.getThrowable();
          if (throwable != null) {
            java.io.StringWriter stringWriter = new java.io.StringWriter();
            java.io.PrintWriter printWriter = new java.io.PrintWriter(stringWriter);  
            throwable.printStackTrace(printWriter);
            buffer.append(stringWriter.getBuffer());
            buffer.append(_lineSeparator);
          }
        }
        break;
      }
    }
    return buffer.toString();
  }

  
}
TOP

Related Classes of anvil.server.basic.BasicLogLayout

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.