如何实现用户日志跟踪
2010-01-04 10:44
411 查看
前两年,我曾经参加过一个金融项目的开发,虽然只是在项目中没做多少事情,但当时的一个客户(银行)的功能需求给我留下了深刻印象。
需求如下:
为每个访问的用户单独建立一个日志文件,保证用户的所有操作流程都保存在这个日志文件中。也就是说,有一个用户访问就要为他建立一个日志文件,有十个、百个、千个、万个用户访问,就要创建十个、百个、千个、万个日志文件,并且相互之间是不能互相影响的。
说明一下,这个系统是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名的问题。
总结:好的系统设计,会产生更少的系统问题以及后续的维护问题。
需求如下:
为每个访问的用户单独建立一个日志文件,保证用户的所有操作流程都保存在这个日志文件中。也就是说,有一个用户访问就要为他建立一个日志文件,有十个、百个、千个、万个用户访问,就要创建十个、百个、千个、万个日志文件,并且相互之间是不能互相影响的。
说明一下,这个系统是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名的问题。
总结:好的系统设计,会产生更少的系统问题以及后续的维护问题。
相关文章推荐
- 在.NET下如何用WebService实现身份认证,及如何跟踪用户的访问[链接]
- asp.net如何实现跟踪检查用户知否查看了邮件。
- 在.NET下如何用WebService实现身份认证,及如何跟踪用户的访问,如类似Possport的功能,不会还是用Session吧?
- 实现友盟在线统计--日志跟踪
- 如何实现Windows系统Users组用户可修改IP属性和限制Users组用户访问文件的权限!
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
- 【整理】如何使用C#实现网易博客中圈子用户数据的采集
- 如何安全的存储用户密码?(下)代码实现pbkdf2算法加密
- unity数据持久化-如何保存多个帐号密码并切换任意用户实现登陆
- 如何在Excel或sqlserver中写用户函数实现数字货币向英文转换集锦
- 如何实现任务栏浏览器图标闪烁,提示用户
- Python高级编程-如何实现用户的历史记录功能?
- 美国国安局如何实现海量用户数据的监控
- Easyui Datagrid 如何实现后台交互显示用户数据列表
- 如何编程实现删除一个sap的在线用户
- Docker时代——如何实现日志数据一键上云
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能