【发布时间】:2012-11-10 06:18:51
【问题描述】:
我正在编写一个审计日志系统,以集成到现有的软件中,并且数据库结构包含一个字段,用于记录有关正在记录的操作的详细信息。不必花哨;它不需要太多,当它需要时,在大多数情况下,开发人员会读取它以找出调用了哪个方法以及使用了哪些参数,诸如此类。这意味着虽然它可能应该是人类可读的,但它不需要被任何东西解析。因此,与其有很多重载,或者使用可怕的 switch case 字符串替换,我想一个写细节 blob 的好方法是进行日志调用,以获取正在记录的操作所需的参数的名称,以及值传递给他们的。我进行了一些研究,并在反射方法中发现了一些有希望的东西,但我还没有找到任何可以清楚地解释如何做到这一点的东西。
这是我所追求的粗略模拟:
Dictionary<string,string> parameters = new Dictionary<string,string>();
foreach (Parameter p in MethodCall)
{
parameters.Add(p.Name, p.Value.ToString());
}
LogEvent(EventType.Something, userID = thisUser, details = parameters);
我知道它在实践中可能比这更复杂,但它为您提供了总体思路。在我的 LogEvent 方法中,有一些东西可以添加时间戳,为用户端日志查看器构建描述性句子(技术细节比我们向管理员和开发人员展示的要少,以免暴露我们的程序/数据库结构)和 - 理论上 - 构建参数详细信息字典中的某种 blob(可能是 JSON 或类似的)。
【问题讨论】:
标签: c# reflection