如何实现用户日志跟踪

来源:互联网 发布:三菱plcq系列伺服编程 编辑:程序博客网 时间:2024/05/19 11:46

前两年,我曾经参加过一个金融项目的开发,虽然只是在项目中没做多少事情,但当时的一个客户(银行)的功能需求给我留下了深刻印象。

需求如下:

为每个访问的用户单独建立一个日志文件,保证用户的所有操作流程都保存在这个日志文件中。也就是说,有一个用户访问就要为他建立一个日志文件,有十个、百个、千个、万个用户访问,就要创建十个、百个、千个、万个日志文件,并且相互之间是不能互相影响的。

说明一下,这个系统是web(J2EE)的

 

这个需求看起来很简单,不就是给每个用户建立单独的日志文件嘛!现在想起来感觉其实也不是很难,呵呵……可当时自己就是没能解决(只能说我的水平不够)。下面我把思路写出来,有朋友过来看过,烦请留个脚印,告诉我你的看法和认识,以此来交流一下。

 

首先,要做的就是如何生成一个日志文件。使用log4j可以生成日志文件,而且这个开源项目已经做的很成熟了,当然是首选。使用log4j,可以通过xml或者properties的方式定制日志产生,比如定制文件名称、文件大小限制、输出的格式等等。我们的需要是要为每个用户生成日志,显然通过配置文件是无法实现该功能的,只能通过手动写代码来控制、动态生成日志文件。

 

部分代码如下:

        layout = new PatternLayout(pattrenlayput);
        // log文件设置
        fileAppendar = new RollingFileAppender(layout, FileName, true);
        fileAppendar.setMaximumFileSize(10240);//设置文件最大容量
        fileAppendar.setMaxBackupIndex(10);//
        // 控制台设置
        consoleAppendar = new ConsoleAppender(layout, "System.out");

        MainLogger = Logger.getLogger(logName);
        // // 设置级别
        MainLogger.setLevel(Level.INFO);
        MainLogger.addAppender(fileAppendar);
        MainLogger.addAppender(consoleAppendar);

 

代码设置log4j和使用xml配置log4j基本相同,这里唯一不同的就是logName可以自由指定,而配置文件是写死的,固定的;

 

其次,设定好log了,那么就是该如何使用log4j了。我们需要考虑的是日志文件名字要唯一,而且日志logName也要唯一(如果logName相同的话,就会产生日志内容没有区分开的结果)。日志文件名和日志名均可采用用户ID,在一个系统中,用户ID是唯一的。

 

再者,在任何一个JAVA系统中,不可能将所有的代码写在一个class中,这是不现实的事情。那么在不同类中使用同一个log,怎么才能做的到呢?可以考虑使用session存储log名。在每一个business logical block中,都可以获得session,那么这样就可以解决了log名的问题。

 

总结:好的系统设计,会产生更少的系统问题以及后续的维护问题。

原创粉丝点击