之前很少用到log日志,一方面是jdev的内置服务器调试非常方便,不用log来检查错误,另一面是自己比较懒,也懒的去动它.. 不过今天工作中遇到 一问题,让我不得不去看下log,然后去用它. 结果,引出了好些技术点,有些懂,有些不懂,反正似懂非懂, 记录下来,以后慢慢品味.
1,
程序要从开发环境搬到测试环境,oc4j到tomcat,本来本地ok的一个功能在tomcat上就挂了。所以要用log来调试了。凭着<servlet >书籍上的印象,我记得servletContext有一log方法,可以记录日志.于是往这上面靠~
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext eContext=FacesContext.getCurrentInstance().getExternalContext();
//((FacesServlet)this).getServletConfig().getServletContext().log("/cos"+url+"?init=true");
eContext.log("/cos"+url+"?init=true"+"helloo----------------------------------");
本来以为jsf中facescontext应该也是个servletContext,于是把它强制转化,结果class转换错误;后来又看了一下api,发现ExternalContext 类有那log函数,幸喜,估计是实现了servletcontext中log. 在看一原码,
public void log(String message) {
_servletContext.log(message);
}
果然,,, 但是新的问题又出来了,
public ServletExternalContextImpl(ServletContext servletContext,
ServletRequest servletRequest,
ServletResponse servletResponse)
{
_servletContext = servletContext;
.......
}
这里的servletContext应该一具体类的实现,那么这个具体类应该在哪里给出了呢。我找来找去找不到. 且当他是容器本身实现了servletContext吧,而没有表达给我们看。
2,
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
private static final Log log = LogFactory.getLog(ServletExternalContextImpl.class);
在log的时候,一般都用了这个包,估计web中的log方法,应该都是这个包来实现的吧.包括log4j等等。..
所以自己在程序中,也可以采用Log 或Logger类来记录日志信息.