最近在做一个小的项目,是web的应用程序,最近也有点时间,把日志管理来简单的说说.

日志,就是需要记录一些自己感兴趣的信息,把它保存起来,具体保存在哪里?保存多长时间?这些要求都是根据不同的项目需求而定的.

首先说说保存在哪里?一般是服务器,或者客户端上,如果再细分:可以是数据库,系统的log系统中,文件中,再或者session或application中存储,甚至页面的隐藏字段中,或程序的隐藏区域中,个人认为在页面或程序的隐藏区域,你可以使用"彩蛋"的形式比较好,即隐蔽又可以呈现给需要看到的人.

今天只说说其中的一部分,没说的留到以后再慢慢完善.

应用程序肯定用到了数据库,所以把日志写到数据库也就是多一张表的事.如果你可以使用DBSM客户端连接到数据库,就可以查看完整的日志信息。

先创建个表吧!

-- create table
create table t_systemlog
(
id    number(19) not null,--id字段,没什么好说的
userid    varchar2(9) not null,--用户ID,可以知道是那个用户操作的
titleName   varchar2(50) not null,--暂时没用到,可以存标题,或者用户的角色
ipaddress   varchar2(15) not null,--IP地址,一般是用户的IP地址
ipproxy    varchar2(15),--IP代理设置的,一般是用户的IP代理地址
moudle    varchar2(20) not null,--日志是发生在哪个模块的。
submoudle   varchar2(100),--日志发生的子模块
source    varchar2(400) not null,--日志发生源,一般可以追溯到是在哪个文件里发生的日志
event    varchar2(500),--在文件的那个事件中发生的日志,一般日志都是事件驱动型的
comments    varchar2(1300),--日志的具体内容
logtime date default (sysdate) not null--日志的写入时间,一般在数据库中取时间,方便统一,防止不同时区的用户时间不一样
)

字段的说明我在上面都已经标注了,这里就不说了,也许你还有更好的设计字段,你也可以提出来,大家一起讨论。

程序中保存一条记录的功能我就不说了,你做数据库的应用程序肯定知道怎么做。

我前面也说了,由于做的是一个web系统的应用程序,不想每次都去查数据库,所以我想在页面上就可以看的日志信息,所以我又多写个直接输出到页面的功能。

先看看下面的程序:

'**** jack edit : Add Write log
sub jackWriteLog(strMsg,logMod)
select case logMod
case 0 '表示隐藏写到页面
Response.write(vbnewline+vbnewline+"<!-- jack edit log start"+vbnewline+vbnewline)
Response.write(" " & strMsg)
Response.write(vbnewline+vbnewline+"jack edit log end -->"+vbnewline+vbnewline)
case 1 '表示不使用隐藏写到页面上
Response.write(vbnewline+vbnewline+"<!-- jack edit log start -->"+vbnewline+vbnewline)
Response.write(" " & strMsg)
Response.write(vbnewline+vbnewline+"<!-- jack edit log end -->"+vbnewline+vbnewline)
case 2 '表示javascript弹出窗口显示
Response.write(vbnewline+vbnewline+"<!-- jack edit log start -->"+vbnewline+vbnewline)
Response.write(vbnewline+"<script>"+vbnewline)
Response.write(" alert('" & strMsg & "');")
Response.write(vbnewline+"</script>"+vbnewline)
Response.write(vbnewline+vbnewline+"<!-- jack edit log end -->"+vbnewline+vbnewline)
case else '表示写入数据库
Call WriteLog("jack","test","jack edit",strMsg)
end select
End sub

当logMod为0时是隐藏输出到页面,当为1时是可见输出到页面,当为2时用JS弹出提示框,其他就直接写到数据库中。

今天就先说到这里吧,后面还有事要忙,今天写这些主要是告诉大家一个系统有哪些组成,如何方便需要的人查看日志,这里只是希望告诉你一个框架,具体的功能大家都不一样,实现的方式不一样,实现的开发语言不一样,但是记录log的理念是一样的,目的是一样的。所以我们可以举一反三,多从别人的系统中寻求好的东西拿来为我所用。

上面的日志程序可以说是个框架,在这个框架上如何扩展,一般是要看项目的需要,今天我就把我的代码列出来:

<%

Dim j_conn,j_connProvider,j_DbName

Set j_conn = Server.CreateObject("ADODB.Connection")
j_connProvider = "Provider=OraOLEDB.Oracle;User Id='dbuser';Password='dbpass';PLSQLRSet=1;Persist Security Info=true;data Source="
j_DbName = "(description=(address_list= (address=(host=3.3.8.8) (protocol=tcp)(port=1521))(address=(host=3.3.8.9)(protocol=tcp)(port=1521)) (failover=true))(connect_data=(service_name=dbName)))"
j_conn.Open(j_connProvider & j_DbName) '**************************************************************************
' Parameters: None
' Author: Sun Feng
' Return Value: Client IP Address
' Non-local Variables: Request.ServerVariables
' Description: Get client IP
'**************************************************************************
Function GetIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),"unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
GetIP = Trim(Mid(strIPAddr, 1, 30))
End Function '**************************************************************************
' Parameters: None
' Author: Sun Feng
' Return Value: Client Proxy IP Address
' Non-local Variables: Request.ServerVariables
' Description: Get client Proxy IP
'**************************************************************************
Function GetProxyIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr="unknown"
Else
strIPAddr=Request.ServerVariables("REMOTE_ADDR")
End if
GetProxyIP=Trim(Mid(strIPAddr, 1, 30))
End Function '**************************************************************************
' Parameters: Moudle name, Sub Moudle name, Event, Comments
' Author: Sun Feng
' Return Value: None
' Non-local Variables: Request.ServerVariables
' Description: Record data modify
'**************************************************************************
Sub WriteLog(strMdl,strSubMdl,strEvent,strCmt)
Dim sql,strURL
strURL=replace(Request.ServerVariables("PATH_INFO"),"'","''")
strMdl=replace(strMdl,"'","''")
strSubMdl=replace(strSubMdl,"'","''")
strEvent=replace(strEvent,"'","''")
strCmt=replace(strCmt,"'","''")
sql="insert into sys_SystemLog (UserID,TrackTime,TitleName,IPAddress,Proxy,Moudle,SubMoudle,Source,Event,Comments)" & _
" values (NVL('" & session("gessouid") & "',' '),'" & now() & "',NVL('" & session("titleName") & "',' ')," & _
"'" & GetIP() & "','" & GetProxyIP() & "'," & _
"'" & strMdl & "','" & strSubMdl & "','" & strURL & "','" & strEvent & "','" & strCmt & "')"
j_conn.execute(sql) End Sub '**************************************************************************
' Parameters:
' strMsg: Output message or Database Comments
' logMod: log mode,the values is :0,1,2,other
' Author: Jack Meng
' Return Value: None
' Non-local Variables: Request.ServerVariables
' Description: Test Write log, can be used for breakpoint execution,
' but need to modify stopDebug=1 and logMod = 1
'**************************************************************************
sub jackWriteLog(strMsg,logMod)
Dim stopDebug
stopDebug=0 select case logMod
case 0 '表示信息是隐藏写到页面
Response.write(vbnewline & vbnewline & "<!-- jack edit log start" & vbnewline & vbnewline)
Response.write(" " & strMsg)
Response.write(vbnewline & vbnewline & "jack edit log end -->" & vbnewline & vbnewline)
case 1 '表示信息是直接写到页面上显示出来
Response.write(vbnewline & vbnewline & "<!-- jack edit log start -->" & vbnewline & vbnewline)
Response.write(" " & strMsg)
Response.write(vbnewline & vbnewline & "<!-- jack edit log end -->" & vbnewline & vbnewline)
If stopDebug then
Response.End
End if
case 2 '表示信息是通过javascript的弹出窗口显示出来
Response.write(vbnewline & vbnewline & "<!-- jack edit log start -->" & vbnewline & vbnewline)
Response.write(vbnewline & "<script language=""javascript"">" & vbnewline)
Response.write(" alert(""" & strMsg & """);")
Response.write(vbnewline & "</script>" & vbnewline)
Response.write(vbnewline & vbnewline & "<!-- jack edit log end -->" & vbnewline & vbnewline)
case else '表示信息写入数据库,并在页面隐藏提示"日志信息已写到数据库"
Call WriteLog("jack","jack edit","jack test",strMsg)
Call jackWriteLog(strMsg & vbnewline & " The log has been saved to the database!",0)
end select
End sub %>

另外,我自己写了个.NET的文件记录日志的类,使用多线程、堆栈等相关技术,可参考下载:LogFileHelper.rar(已上传)

声明:文件下载链接已被我取消。本文章只是自己的记录方便自己使用,但被某些人作它用。

也许你认为我的程序都是从书上或网上很多地方都可以找到。最起码我把所有代码整合,可以正常工作。你也可以去其他网上找,没人强求。


如果想要程序的提供邮箱,根据文章下面的 “打赏”  并备注打赏账号,金额随意!1元不闲少1千不算多,算是对我劳动的肯定与支持。

以上文章纯属自己手动输入,个人所写,如转载,请注明出处!

web应用程序 ---- 日志系统的设计的更多相关文章

  1. Linux下一个简单的日志系统的设计及其C代码实现

    1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...

  2. 利用生产者消费者模型和MQ模型写一个自己的日志系统-并发设计里一定会用到的手段

    一:前言 写这个程序主要是用来理解生产者消费者模型,以及通过这个Demo来理解Redis的单线程取原子任务是怎么实现的和巩固一下并发相关的知识:这个虽然是个Demo,但是只要稍加改下Appender部 ...

  3. Filebeat7 Kafka Gunicorn Flask Web应用程序日志采集

    本文的内容 如何用filebeat kafka es做一个好用,好管理的日志收集工具 放弃logstash,使用elastic pipeline gunicron日志格式与filebeat/es配置 ...

  4. 基于Web在线考试系统的设计与实现

    这是一个课程设计的文档,源码及文档数据库我都修改过了,貌似这里复制过来的时候图片不能贴出,下载地址:http://download.csdn.net/detail/sdksdk0/9361973   ...

  5. PHP框架中的日志系统

    现在在一家公司做PHP后台开发程序猿(我们组没有前端,做活动时会做前端的东西),刚开始到公司的时候花2个周赶出了一个前端加后台的活动(记得当时做不出来周末加了两天班...),到现在过去4个多月了,可以 ...

  6. 基于B/S架构的在线考试系统的设计与实现

    前言 这个是我的Web课程设计,用到的主要是JSP技术并使用了大量JSTL标签,所有代码已经上传到了我的Github仓库里,地址:https://github.com/quanbisen/online ...

  7. cocos creator主程入门教程(五)—— 日志系统

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍日志系统的设计.一般我们开发一个demo,只会简单的用cocos提供的cc.log打印下日志, ...

  8. 中小型WEB系统权限日志数据表设计

    中小型WEB系统权限日志数据表设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc1MDU3OA==/font/5a6L5L2T/fontsi ...

  9. Java日志系统框架的设计与实现

    推荐一篇好的文章介绍java日志系统框架的设计的文章:http://soft.chinabyte.com/database/438/11321938.shtml 文章内容总结: 日志系统对跟踪调试.程 ...

随机推荐

  1. java基础(1)-比较jdk5,jdk6,jdk7的新特性

    jdk8已经出来好长时间了,这里自己学习时简单总结的jdk5,jdk6和jdk7的新特性:本文提纲: 一.jdk5的新特性 二.jdk6的新特性 三.jdk7的新特性 一.jdk5的新特性 首先简单介 ...

  2. operator

    /*  * 由SharpDevelop创建.  * 用户: jinweijie  * 日期: 2015/10/28  * 时间: 9:15  *   * 要改变这种模板请点击 工具|选项|代码编写|编 ...

  3. iOS 1 到 iOS 10 ,我都快老了

    iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...

  4. oracle 用户的管理<二>

    oracle 用户的管理 创建用户 概述:在 oracle 中要创建一个新的用户使用 create user 语句,一般是具有 dba(数据库管理员)的权限才能使用. create user 用户名 ...

  5. Spring 4 官方文档学习(十一)Web MVC 框架之异常处理

    1.HandlerExceptionResolver Spring HandlerExceptionResolver的实现们会处理controller执行过程中发送的unexpected except ...

  6. CDN在中国的发展的九个年头的点点滴滴

    对于发展快速的互联网行业来说,8年时间已经足够让一个产业跌宕起伏.但CDN在国内的发展却没有大红大紫,直到2005... 对于发展快速的互联网行业来说,8年时间已经足够让一个产业跌宕起伏.但CDN在国 ...

  7. Contacts群组添加成员,多选列表过滤已添加数据

    Group添加联系人时,Contacts默认设计不会过滤已分组的联系人.之前看到小米,oppo都做过过滤,一直懒得改. 最近客户要求group添加成员时,不显示已分组的联系人,故记录一下实现过程. p ...

  8. css3之边框新属性

    border属性 属性 描述 border-image 图片边框 border-radius 圆角 box-shadow 矩形阴影

  9. umask函数

    umask函数为进程设置文件模式创建屏蔽字,并返回以前的值. #include <sys/stat.h> mode_t umask( mode_t cmask); 返回值:以前的文件模式创 ...

  10. Happymenu新的开始

    1. 2014年10月28日入职happymenu,希望能和公司一起成长.年轻的时候就得多折腾! 2. 第一个任务:安装,配置ubuntu14环境,尽快熟悉操作.目前基本工作操作已经掌握. 安装好Ub ...