001    package railo.runtime.exp;
002    
003    import java.io.PrintWriter;
004    
005    import railo.commons.io.log.Log;
006    import railo.commons.lang.ExceptionUtil;
007    import railo.commons.lang.StringUtil;
008    import railo.runtime.PageContext;
009    import railo.runtime.config.Config;
010    import railo.runtime.engine.ThreadLocalPageContext;
011    import railo.runtime.op.Caster;
012    
013    /**
014     * Handle Excpetions
015     */
016    public final class ExceptionHandler {
017    
018            public static void log(Config config, Throwable t) {
019                    
020                    PageException pe=Caster.toPageException(t);
021                    pe.printStackTrace(config.getErrWriter()); 
022                    
023                    // apllication Log
024                    StringBuffer message=new StringBuffer(pe.getMessage());
025                    if(!StringUtil.isEmpty(pe.getDetail())) message.append("; ").append(pe.getDetail());
026                    config.getApplicationLogger().log(Log.LEVEL_ERROR, "",message.toString());
027                    
028                    // exception.log
029                    String st = ExceptionUtil.getStacktrace(pe,true);
030                    config.getExceptionLogger().log(Log.LEVEL_ERROR, "",st);
031                    
032                    
033            }
034    
035            public static void printStackTrace(PageContext pc, Throwable t) {
036                    PrintWriter pw = (pc.getConfig()).getErrWriter();
037                    t.printStackTrace(pw);
038                    pw.flush();
039            }
040    
041            public static void printStackTrace(Throwable t) {
042                    PageContext pc = ThreadLocalPageContext.get();
043                    if(pc!=null)printStackTrace(pc,t);
044                    else t.printStackTrace();
045            }
046    }