ASP写的日志处理方法
类别: ASP教程
一、实现方法
一个书写日志的函数,提供几个参数,用户程序调用这个函数就可以实现日志的记录。日志记录到xml文件中,日志文件按日期生成,每天新建立一个日志文件,文件名为:yyyy_mm_dd.xml,分别用了年月日。而查看日志也日常简单,用户想看哪天的日志,只要直接调用该xml文件即可。因为xml文件已经默认了一个xsl文件来格式化输出。
二、书写日志的方法
\'记录日志的程序
\'作者:塞北的雪
\'日期:2004.11.20
\'username :用户信息(标示进行该操作的人员)
\'operate :操作(标示用户进行了什么操作)
\'userip :用户IP(标示用户用于登录系统的计算机的IP地址)
\'opdate :用户操作发生的日期
\'日志写入一个xml文件,第一次写入时如果xml文件不存在,则创建。
\'返回值:1 表示打开日志文件时出错
\'返回值:9 表示正确完成写入日志文件
function WriteSysLog(sys_userid,sys_username,operate)
dim op_username
if trim(sys_userid)="" and trim(sys_username)="" then
op_username="匿名"
else
op_username = sys_userid & "/" & sys_username
end if
xmlPath="/" & getRoot() & "/log/SysLog/"
xmlFile=replace(cstr(ConvertDate(date())),"-","_") & ".xml"
RootNode="syslog" \'日志文件根节点名字
LogFile=server.mappath(xmlPath & xmlFile) \'日志文件路径
set fso=server.CreateObject("scripting.filesystemobject")
\'如果日志文件不存在,就创建一个,并写入头信息和根信息
if not fso.FileExists(LogFile) then
fso.CreateTextFile LogFile
set fff=fso.GetFile(LogFile)
set mmm=fff.openastextstream(2)
mmm.write "<?xml version=""1.0"" encoding=""gb2312"" ?>" & vbcrlf & "<?xml-stylesheet type=\'text/xsl\' href=\'../logInfo.xsl\'?>" & vbcrlf & "<" & rootnode & "></" & rootnode & ">"
set mmm=nothing
set fff=nothing
end if
set fso=nothing
Set xd = Server.CreateObject("msxml2.domdocument")
xd.async = false
xd.load(LogFile)
if xd.parseError.errorcode<>0 then
WriteSysLog=1 \'打开日志文件出错
exit function
end if
\'创建新节点信息
set et=xd.documentElement
set cnode=xd.createElement("log")
et.appendchild(cnode)
set node2=xd.createElement("username")
node2.text=op_username
cnode.appendchild(node2)
set node2=xd.createElement("operate")
node2.text=operate
cnode.appendchild(node2)
set node2=xd.createElement("userip")
node2.text=Request.ServerVariables("Remote_Addr")
cnode.appendchild(node2)
set node2=xd.createElement("opdate")
node2.text=cstr(now())
cnode.appendchild(node2)
xd.save LogFile \'写入日志文件
set cnode=nothing
set node2=nothing
set xd=nothing
writeSysLog=9 \'说明正常写入了日志信息
end function
\'获得当前虚拟目录的名字
function getRoot()
url=Request.ServerVariables("URL")
url=right(url,len(url)-1)
getRoot= mid(url,1,instr(url,"/")-1)
end function
\'将一个一位的数字前面加零
function FillZero(str)
ttt=str
if len(str)=1 then
ttt="0" & str
end if
FillZero=ttt
end function
\'转化日期,将 一位补上零 2003-1-2 --> 2003-01-02
function ConvertDate(tDate)
ttt=tDate
if isdate(tDate) then
ttt=year(tDate) & "-" & FillZero(month(tDate)) & "-" & FillZero(day(tDate))
end if
ConvertDate=ttt
end function
三、用户格式化的xsl文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.cccar.com.cn/"
exclude-result-prefixes="msxsl user">
<!-- localized strings -->
<xsl:variable name=\'ColumnHeader_UserName\'>用户</xsl:variable>
<xsl:variable name=\'ColumnHeader_Time\'>时间</xsl:variable>
<xsl:variable name=\'ColumnHeader_Operate\'>操作</xsl:variable>
<xsl:variable name=\'ColumnHeader_Address\'>IP地址</xsl:variable>
<!-- variables -->
<xsl:variable name=\'TableStyle\'>background-color:#DAE6D8;font-family:Simsun, Verdana; font-size:75%; text-align:left; vertical-align:top</xsl:variable>
<xsl:variable name=\'HeaderStyle\'>background:a0b0a8;color:#000000;border-bottom:1 solid black;border-top:1 solid black</xsl:variable>
<msxsl:script language="javascript" implements-prefix="user">
function xmlDateTime(nodelist) {
return Date.parse(nodelist.replace(/-/g,"/"));
}
</msxsl:script>
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="syslog">
<html>
<head>
<title>
日志查看
</title>
</head>
<body style=\'margin:10;background-color:#DAE6D8\'>
<div align="center">
<table style="{$TableStyle}" width="100%" align="center" cellspacing=\'0\'>
<thead>
<tr height="23">
<th width="15%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_UserName"/>
</th>
<th width="20%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Time"/>
</th>
<th width="50%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Operate"/>
</th>
<th width="15%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Address"/>
</th>
</tr>
</thead>
<tbody style=\'vertical-align:top\'>
<tr ><td colspan="4" height="5"></td></tr>
<xsl:for-each select="log">
<xsl:sort order=\'ascending\' select="user:xmlDateTime(string(opdate))" data-type="number"/>
<tr height="23">
<td valign="bottom"><xsl:value-of select="username"/></td>
<td valign="bottom" ><xsl:value-of select="opdate"/></td>
<td valign="bottom" ><xsl:value-of select="operate"/></td>
<td valign="bottom" ><xsl:value-of select="userip"/></td>
</tr>
<tr bgcolor="#999999"><td colspan="4" height="1"></td></tr>
</xsl:for-each>
<tr><td colspan="4" align="right">合计:<xsl:value-of select="count(log)"/> 条 </td></tr>
</tbody>
</table>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
一个书写日志的函数,提供几个参数,用户程序调用这个函数就可以实现日志的记录。日志记录到xml文件中,日志文件按日期生成,每天新建立一个日志文件,文件名为:yyyy_mm_dd.xml,分别用了年月日。而查看日志也日常简单,用户想看哪天的日志,只要直接调用该xml文件即可。因为xml文件已经默认了一个xsl文件来格式化输出。
二、书写日志的方法
\'记录日志的程序
\'作者:塞北的雪
\'日期:2004.11.20
\'username :用户信息(标示进行该操作的人员)
\'operate :操作(标示用户进行了什么操作)
\'userip :用户IP(标示用户用于登录系统的计算机的IP地址)
\'opdate :用户操作发生的日期
\'日志写入一个xml文件,第一次写入时如果xml文件不存在,则创建。
\'返回值:1 表示打开日志文件时出错
\'返回值:9 表示正确完成写入日志文件
function WriteSysLog(sys_userid,sys_username,operate)
dim op_username
if trim(sys_userid)="" and trim(sys_username)="" then
op_username="匿名"
else
op_username = sys_userid & "/" & sys_username
end if
xmlPath="/" & getRoot() & "/log/SysLog/"
xmlFile=replace(cstr(ConvertDate(date())),"-","_") & ".xml"
RootNode="syslog" \'日志文件根节点名字
LogFile=server.mappath(xmlPath & xmlFile) \'日志文件路径
set fso=server.CreateObject("scripting.filesystemobject")
\'如果日志文件不存在,就创建一个,并写入头信息和根信息
if not fso.FileExists(LogFile) then
fso.CreateTextFile LogFile
set fff=fso.GetFile(LogFile)
set mmm=fff.openastextstream(2)
mmm.write "<?xml version=""1.0"" encoding=""gb2312"" ?>" & vbcrlf & "<?xml-stylesheet type=\'text/xsl\' href=\'../logInfo.xsl\'?>" & vbcrlf & "<" & rootnode & "></" & rootnode & ">"
set mmm=nothing
set fff=nothing
end if
set fso=nothing
Set xd = Server.CreateObject("msxml2.domdocument")
xd.async = false
xd.load(LogFile)
if xd.parseError.errorcode<>0 then
WriteSysLog=1 \'打开日志文件出错
exit function
end if
\'创建新节点信息
set et=xd.documentElement
set cnode=xd.createElement("log")
et.appendchild(cnode)
set node2=xd.createElement("username")
node2.text=op_username
cnode.appendchild(node2)
set node2=xd.createElement("operate")
node2.text=operate
cnode.appendchild(node2)
set node2=xd.createElement("userip")
node2.text=Request.ServerVariables("Remote_Addr")
cnode.appendchild(node2)
set node2=xd.createElement("opdate")
node2.text=cstr(now())
cnode.appendchild(node2)
xd.save LogFile \'写入日志文件
set cnode=nothing
set node2=nothing
set xd=nothing
writeSysLog=9 \'说明正常写入了日志信息
end function
\'获得当前虚拟目录的名字
function getRoot()
url=Request.ServerVariables("URL")
url=right(url,len(url)-1)
getRoot= mid(url,1,instr(url,"/")-1)
end function
\'将一个一位的数字前面加零
function FillZero(str)
ttt=str
if len(str)=1 then
ttt="0" & str
end if
FillZero=ttt
end function
\'转化日期,将 一位补上零 2003-1-2 --> 2003-01-02
function ConvertDate(tDate)
ttt=tDate
if isdate(tDate) then
ttt=year(tDate) & "-" & FillZero(month(tDate)) & "-" & FillZero(day(tDate))
end if
ConvertDate=ttt
end function
三、用户格式化的xsl文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.cccar.com.cn/"
exclude-result-prefixes="msxsl user">
<!-- localized strings -->
<xsl:variable name=\'ColumnHeader_UserName\'>用户</xsl:variable>
<xsl:variable name=\'ColumnHeader_Time\'>时间</xsl:variable>
<xsl:variable name=\'ColumnHeader_Operate\'>操作</xsl:variable>
<xsl:variable name=\'ColumnHeader_Address\'>IP地址</xsl:variable>
<!-- variables -->
<xsl:variable name=\'TableStyle\'>background-color:#DAE6D8;font-family:Simsun, Verdana; font-size:75%; text-align:left; vertical-align:top</xsl:variable>
<xsl:variable name=\'HeaderStyle\'>background:a0b0a8;color:#000000;border-bottom:1 solid black;border-top:1 solid black</xsl:variable>
<msxsl:script language="javascript" implements-prefix="user">
function xmlDateTime(nodelist) {
return Date.parse(nodelist.replace(/-/g,"/"));
}
</msxsl:script>
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="syslog">
<html>
<head>
<title>
日志查看
</title>
</head>
<body style=\'margin:10;background-color:#DAE6D8\'>
<div align="center">
<table style="{$TableStyle}" width="100%" align="center" cellspacing=\'0\'>
<thead>
<tr height="23">
<th width="15%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_UserName"/>
</th>
<th width="20%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Time"/>
</th>
<th width="50%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Operate"/>
</th>
<th width="15%" style="{$HeaderStyle}">
<xsl:value-of select="$ColumnHeader_Address"/>
</th>
</tr>
</thead>
<tbody style=\'vertical-align:top\'>
<tr ><td colspan="4" height="5"></td></tr>
<xsl:for-each select="log">
<xsl:sort order=\'ascending\' select="user:xmlDateTime(string(opdate))" data-type="number"/>
<tr height="23">
<td valign="bottom"><xsl:value-of select="username"/></td>
<td valign="bottom" ><xsl:value-of select="opdate"/></td>
<td valign="bottom" ><xsl:value-of select="operate"/></td>
<td valign="bottom" ><xsl:value-of select="userip"/></td>
</tr>
<tr bgcolor="#999999"><td colspan="4" height="1"></td></tr>
</xsl:for-each>
<tr><td colspan="4" align="right">合计:<xsl:value-of select="count(log)"/> 条 </td></tr>
</tbody>
</table>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
- 上一篇: ADO之COMMAND对象全解
- 下一篇: 实现可动态改变宽度的表格简单方法
-= 资 源 教 程 =-
文 章 搜 索