Package railo.runtime.tag

Source Code of railo.runtime.tag.Log

package railo.runtime.tag;

import java.io.IOException;

import railo.commons.io.log.LogConsole;
import railo.commons.io.log.LogResource;
import railo.commons.io.res.Resource;
import railo.commons.lang.StringUtil;
import railo.runtime.config.Config;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.PageException;
import railo.runtime.ext.tag.TagImpl;
import railo.runtime.op.Caster;
import railo.runtime.tag.util.DeprecatedUtil;

/**
* Writes a message to a log file.
*
*
*
**/
public final class Log extends TagImpl {

    private final static short LOG_APPLICATION=10;
    private final static short LOG_SCHEDULER=11;
    private final static short LOG_CONSOLE=12;
   
   

  /** If you omit the file attribute, specifies the standard log file in which to write the message.
  **     Ignored if you specify a file attribute */
  private short log=LOG_APPLICATION;

  /** The message text to log. */
  private String text;

  /** The type or severity of the message. */
  private short type=railo.commons.io.log.Log.LEVEL_INFO;
  /**  */
  private String file;

  /** Specifies whether to log the application name if one has been specified in a application tag. */
  private boolean application;
  private String charset=null;
 
  @Override
  public void release()  {
    super.release();
    log=LOG_APPLICATION;
    type=railo.commons.io.log.Log.LEVEL_INFO;
    file=null;
    application=false;
    charset=null;
  }

  /** set the value log
  *  If you omit the file attribute, specifies the standard log file in which to write the message.
  *     Ignored if you specify a file attribute
  * @param log value to set
   * @throws ApplicationException
  **/
  public void setLog(String log) throws ApplicationException  {
    if(StringUtil.isEmpty(log,true)) return;
      log=log.toLowerCase().trim();
      if(log.equals("application")) this.log=LOG_APPLICATION;
      else if(log.equals("scheduler")) this.log=LOG_SCHEDULER;
      else if(log.equals("console")) this.log=LOG_CONSOLE;
    else
        throw new ApplicationException("invalid value for attribute log ["+log+"]","valid values are [application, scheduler,console]");
  }

  /** set the value text
  *  The message text to log.
  * @param text value to set
  **/
  public void setText(String text)  {
    this.text=text;
  }

  /** set the value type
  *  The type or severity of the message.
  * @param type value to set
   * @throws ApplicationException
  **/
  public void setType(String type) throws ApplicationException  {
      type=type.toLowerCase().trim();
      if(type.equals("information")) this.type=railo.commons.io.log.Log.LEVEL_INFO;
      else if(type.equals("info")) this.type=railo.commons.io.log.Log.LEVEL_INFO;
      else if(type.equals("warning")) this.type=railo.commons.io.log.Log.LEVEL_WARN;
      else if(type.equals("warn")) this.type=railo.commons.io.log.Log.LEVEL_WARN;
      else if(type.equals("error")) this.type=railo.commons.io.log.Log.LEVEL_ERROR;
        else if(type.startsWith("fatal")) this.type=railo.commons.io.log.Log.LEVEL_FATAL;
        else if(type.startsWith("debug")) this.type=railo.commons.io.log.Log.LEVEL_DEBUG;
    else
        throw new ApplicationException("invalid value for attribute type ["+type+"]",
          "valid values are [information,warning,error,fatal,debug]");

  }

  /** set the value time
  *  Specifies whether to log the system time.
  * @param time value to set
   * @throws ApplicationException
  **/
  public void setTime(boolean useTime) throws ApplicationException  {
    if(useTime) return;
    DeprecatedUtil.tagAttribute(pageContext,"Log", "time");
      throw new ApplicationException("attribute [time] for tag [log] is deprecated, only the value true is allowed");
  }

  /** set the value file
  * 
  * @param file value to set
   * @throws ApplicationException
  **/
  public void setFile(String file) throws ApplicationException  {
    if(StringUtil.isEmpty(file))return;
   
      if(file.indexOf('/')!=-1 || file.indexOf('\\')!=-1)
          throw new ApplicationException("value ["+file+"] from attribute [file] at tag [log] can only contain a filename, file separators like [\\/] are not allowed");
    if(!file.endsWith(".log"))file+=".log";
    this.file=file;
  }

  /** set the value date
  *  Specifies whether to log the system date.
  * @param date value to set
   * @throws ApplicationException
  **/
  public void setDate(boolean useDate) throws ApplicationException  {
    if(useDate) return;
    DeprecatedUtil.tagAttribute(pageContext,"Log", "date");
      throw new ApplicationException("attribute [date] for tag [log] is deprecated, only the value true is allowed");
  }

  /** set the value thread
  *  Specifies whether to log the thread ID. The thread ID identifies which internal service thread logged a
  *     message. Since a service thread normally services a CFML page request to completion, then moves on to
  *     the next queued request, the thread ID serves as a rough indication of which request logged a message.
  *     Leaving thread IDs turned on can help diagnose patterns of server activity.
  * @param thread value to set
   * @throws ApplicationException
  **/
  public void setThread(boolean thread) throws ApplicationException  {
    if(thread) return;
    DeprecatedUtil.tagAttribute(pageContext,"Log", "thread");
      throw new ApplicationException("attribute [thread] for tag [log] is deprecated, only the value true is allowed");
  }

  /** set the value application
  *  Specifies whether to log the application name if one has been specified in a application tag.
  * @param application value to set
  **/
  public void setApplication(boolean application)  {
    this.application=application;
  }


  @Override
  public int doStartTag() throws PageException  {
      railo.commons.io.log.Log logger;
      Config config =pageContext.getConfig();
      if(file==null) {
        if(log==LOG_SCHEDULER)logger=config.getScheduleLogger();
        else if(log==LOG_CONSOLE)logger=LogConsole.getInstance(config, railo.commons.io.log.Log.LEVEL_INFO);
          else logger=config.getApplicationLogger();
         
      }
      else {
        if(charset==null) charset=pageContext.getConfig().getResourceCharset();
        Resource logDir=config.getConfigDir().getRealResource("logs");
          if(!logDir.exists())logDir.mkdirs();
          try {
            Resource f = logDir.getRealResource(file);
                logger=new LogResource(f,railo.commons.io.log.Log.LEVEL_INFO,charset);
            } catch (IOException e) {
                throw Caster.toPageException(e);
            }
      }
     
     
      String contextName = pageContext.getApplicationContext().getName();
      if(contextName==null || !application)contextName="";
      logger.log(type,contextName,text);
        //logger.write(toStringType(type),contextName,text);
    return SKIP_BODY;
  }

  /**
   * @param charset the charset to set
   */
  public void setCharset(String charset) {
    if(StringUtil.isEmpty(log,true)) return;
      this.charset = charset;
  }
}
TOP

Related Classes of railo.runtime.tag.Log

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.