在jsp中直接用log("...");就可以向Servlet引擎的日志中写东西。Tomcat4的默认的日志是每天每个类别一个文件,类别包括几种:
catalina_log:最高层的日志
localhost_access_log:主机连接日志
localhost_log:所有Context的日志
localhost_xxx_log:某个Context的日志,如果你用log("...");就写到这个里面
这些都是在server.xml配置文件中配的,你可以看看。

解决方案 »

  1.   

    在jsp中直接用log("...");这是用来干嘛的,怎么用呢,有什么地方介绍这东东吗?
      

  2.   

    今天不小心调乱server.xml,那个log有98兆,哈哈
      

  3.   

    这个是Servlet的日志方法,在Servlet中调用log("...");就可以把"..."写到Servlet引擎的日志中。JSP最后要编译成Servlet,所以log("...");也可以用,在<%...%>中写就可以了。
      

  4.   

    你自己试验一下就知道了,比如在Tomcat的examples中随便找一个jsp文件,加上
    <%
    log( "This is a test" );
    %>
    然后调用这个页面,你在Tomcat的日志localhost_examples_log.xxx中就会看到This is a test这段话。
      

  5.   

    我的localhost_xxxx_log.2002-05-11.txt中很多如下语句,其中init是什么意思。
    2002-05-11 13:13:12 jsp: init
    2002-05-11 13:13:51 jsp: init
    2002-05-11 13:16:21 jsp: init
    2002-05-11 13:17:58 jsp: init
    2002-05-11 13:17:58 jsp: init
    2002-05-11 13:17:58 jsp: init
    2002-05-11 13:24:58 jsp: init
    2002-05-11 13:28:59 jsp: init
    2002-05-11 13:29:33 jsp: init
    2002-05-11 13:31:19 jsp: init
    2002-05-11 13:32:58 jsp: init
    2002-05-11 13:33:17 jsp: init
    2002-05-11 13:34:03 jsp: init
    2002-05-11 13:40:47 jsp: init
    2002-05-11 13:41:24 jsp: init
    2002-05-11 13:41:51 jsp: init
    2002-05-11 13:53:00 jsp: init
    2002-05-11 14:01:13 jsp: init
    2002-05-11 14:14:40 jsp: init
    2002-05-11 14:17:02 jsp: init
    2002-05-11 14:24:00 jsp: init
    谢谢 jimjxr(宝宝猫),我已经试过了,可以的,
    不过我现在是想分析日志,使其能够在网页上能够看到,并可根据用户名、登陆日期之类的查询日志。这怎么做呢??
      

  6.   

    以前TOMCAT3.2的日志,很乱的,现在我们用4。0。2以后才发现日志文件已改了。本来想在登陆系统时写入数据库的,然后再从数据库分析日志。
      

  7.   

    init应该是jsp页面在做初始化。
    日志的问题,我上面所说的是将程序运行状态记录下来的日志,一般包括时间和一段String。你的要求好像比较具体,似乎是用户行为的日志,能具体说说吗?用数据库记录有什么困难?
      

  8.   

    也不用很复杂的日志,只要能查询一个用户的登录信息(主要是登录时间,离开时间),然后能查询某一段时间有哪些用户登录了,就可以了。
    用数据库做的话,有一个问题就是不能确定用户退出系统的准备时间(即非正常退出系统,如直接关闭浏览器,)并进行相应的一些操作。
    我是最近才看到TOMCAT4的日志与以前不同了,所以想看看是不是用它会更好做些。
      

  9.   

    嗯,Tomcat的日志不能解决用户非正常推出的问题,这个日志主要是Debug用的,用于流量监控也可以,做你要求的我觉得不太合适。非正常推出用Session超时不行吗?
      

  10.   

    用Session超时不太好,我们有别的原因把Session时间设为2小时了。
    这里有个方法:建立一个Application变量  i,记录某一用户名的当前session数。如果用户登陆则通过监听器知道,如果用户退出(不管是怎样退出,只要是该session丢失),也会通过监听器知道。这样就可以在登陆是给i加1,退出时减1了;  
    这里的关键是通过session的建立与取消监听来操作i值
    但临听器怎么做呢????哪位能给个例子。
      

  11.   

    以下是我做的一个测试:
    import  java.util.*; 
    public class UserList {
      //所有的用户名  
      private  HashMap  UserList;  
      
      public  UserList()  
               {  
                           UserList  =  new  HashMap();  
               }  
      /**  
               *取得一个包含当前用户信息的迭代器  
               *@return  包含当前用户名信息的Iterator类型对象  
               *@see  java.util.Iterator  
               */  
      public  Iterator  getUserList()  
               {  
                           //将超时用户踢出列表  
                           //removeOverdue();  
                           //构建一个迭代嚣并返回  
                           HashMap  returnUserList  =  new  HashMap(UserList);  
                           Set  returnUserSet  =  returnUserList.keySet();  
                           Iterator  returnUserIterator  =  returnUserSet.iterator();  
                           return  returnUserIterator;  
               }  
    /**  
               *监测用户是否在用户列表中  
               */  
      public  boolean  isUserOnLine(String  userName)  
               {  
                           //将超时用户踢出列表  
                           //removeOverdue();  
                           return  UserList.containsKey(userName);  
               }
    /**  
               *将用户加入到此用户列表中  
               *@param  userName  需要加入的用户名  
               */  
               public  void  addUser(String  id,String  userName,String  userPic)  
               {  
                           //获得当前时间  
                           Vector  userInfo=new  Vector(3);  
                           Date  dateTimeNow  =  new  Date();  
                           long  longTimeNow  =  dateTimeNow.getTime();  
                           Long  longOTimeNow  =  new  Long(longTimeNow);  
                           userInfo.add(id);  
                           userInfo.add(userPic);  
                           userInfo.add(longOTimeNow);  
                           //将用户最近一次发出的时间存储起来  
                           UserList.put(userName,userInfo);  
               } 
     /*将用户踢出列表  
               
               */  
               public  void  removeOverdue(String username)  
               {       
                   UserList.remove(username);  
                } 
    }不过有问题:(1)在JSP中调用时在一个窗口中能实现,但重开一个窗口登录,就不起作用了,换台机子试就更不用提了,怎么回事呢??
    (2)我在注销页面中用removeOverdue方法怎么提示无此方法呢?
      

  12.   

    对新的Servlet引擎,你实现HttpSessionListener接口,然后把你的接口在配置文件中声明就可以在Session生成和消失时得到提示。但这个Session消失对非正常退出也是用超时的。