前言:
本篇将使用2.N系列版本,在不改动原来留言版系统一行代码的情况下,实现其数据库操作日志功能。
正文步骤:
一:建表
1:增加一个日志操作表[ActionLogs],这个少不了,表结构如下:
2:创建表的数据库脚本如下:

[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NULL,
[Msg] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[LogTime] [datetime] NULL CONSTRAINT [DF_ActionLogs_LogTime] DEFAULT (getdate()),
CONSTRAINT [PK_ActionLogs] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
二:建类库项目独立实现操作日志
1:新建一个项目类库起名就叫:AopLog,同时添加对CYQ.Data.DLL的引用[2.N系列版本]
2:新建一个类,继承自CYQ.Data.Aop.IAop接口,并实现之如:

{
#region IAop 成员
public void Begin(AopEnum action, string objName, params object[] aopInfo)
{
//这里先没用到,用于权限判断
}
public void End(AopEnum action, bool success, object id, params object[] aopInfo)
{
//这里等会要实现
}
public IAop GetFromConfig()
{
return null;//默认这样就行了
}
public void OnError(string msg)
{
//这里先没用到,数据库操作异常时引发
}
#endregion
}
3:我们将具体实现分流到另一个类处理:新建类:ActionLog.cs,并预先留下方法接口:

{
public void WriteFill(object id)
{
}
public void WriteInsert(object id)
{
}
#region 其它方法
private int GetUserID()
{
}
private void Write(object id, string msg)
{
}
private bool ContainUrl(string key)
{
}
#endregion
}
4:回到AopLog实现方法

{
ActionLog log;
public AopLog()
{
log = new ActionLog();
}
#region IAop 成员
public void Begin(AopEnum action, string objName, params object[] aopInfo)
{
}
public void End(AopEnum action, bool success, object id, params object[] aopInfo)
{
if (success)
{
switch (action)
{
case AopEnum.Fill:
log.WriteFill(id);
break;
case AopEnum.Insert:
log.WriteInsert(id);
break;
default:
break;
}
}
}
public IAop GetFromConfig()
{
return null;//这个默认返回null就行了
}
public void OnError(string msg)
{
//在数据库操作异常时引发
}
#endregion
}
5:实现ActionLog方法
a:从Session获取用户ID

{
int id=0;
if (HttpContext.Current.Session["ID"] != null)
{
int.TryParse(Convert.ToString(HttpContext.Current.Session["ID"]), out id);
}
return id;
}
b:插入表数据方法封装

{
int userID = GetUserID();
if (userID == 0)
{
int.TryParse(Convert.ToString(id), out userID);
}
if (userID > 0)
{
MAction action = new MAction(TableNames.ActionLogs);
action.SetNoAop();//写日志时,注意关掉Aop功能。
action.Set(ActionLogs.UserID, userID);
action.Set(ActionLogs.Msg, msg);
action.Insert();
action.Close();
}
}
c:检测Url是否包含指定字符
{
return System.Web.HttpContext.Current.Request.Url.ToString().ToLower().Contains(key);
}
d:实现登陆日志记录
{
if (ContainUrl("login.aspx"))
{
Write(id,"登陆成功!");
}
}
e:实现注册日志与留言日志记录

{
if (ContainUrl("reg.aspx"))
{
Write(id,"注册成功!");
}
else
{
Write(id,string.Format("添加一行留言[id={0}]!",id));//需要启用更多分支时,请使用"params object[] aopInfo信息[这个需要修改界面参数代码]"
}
}
三:切入原有留言版系统
1:将类库生成的AopLog.dll放到留言系统的Bin目录下
2:升级原来CYQ.Data.DLL的1.2版本到最新版本。[完全兼容,直接复盖升级]
3:配置文件appSettings项增加一行配置:<add key="Aop" value="AopLog,AopLog.AopLog"/>
四:运行结果
1:操作登陆、注册、留言!!!数据库记录结果如下图:
五:示例下载
点击下载 [为节省空间,删除了生成的dll,请重新引用dll编绎运行]
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号![]() |
Donation(扫码支持作者):支付宝:![]() |
Donation(扫码支持作者):微信:![]() |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)