C# 记录实例数据
我在想除了C# 记录实例数据,c#,c#-4.0,C#,C# 4.0,我在想除了ActionExecutingContextinstance之外,我应该包括哪些字段,我想如果有一个助手,可以生成实例数据的可读文本表示,这不是很好吗 我知道,我并不是在所有情况下都是完美的——我的意思是它可能太深了,它可能无法输出默认情况下需要的所有信息,但在许多情况下,它比只输出没有任何数据的异常消息要好 有没有人在开源项目中写过这样的东西?您可以使用反射轻松获得对象所有属性的值: public static void LogPublicProperties(object obj)
ActionExecutingContext
instance之外,我应该包括哪些字段,我想如果有一个助手,可以生成实例数据的可读文本表示,这不是很好吗
我知道,我并不是在所有情况下都是完美的——我的意思是它可能太深了,它可能无法输出默认情况下需要的所有信息,但在许多情况下,它比只输出没有任何数据的异常消息要好
有没有人在开源项目中写过这样的东西?您可以使用反射轻松获得对象所有属性的值:
public static void LogPublicProperties(object obj)
{
foreach (var propertyInfo in d.GetType().GetProperties())
Console.WriteLine("{0} = {1}",
propertyInfo.Name,
propertyInfo.GetValue(d, null));
}
如果要记录字段,请使用
Type.GetFields()
而不是GetProperties()
它将仅从一级属性获取值,例如在ActionExecutingContext中,用户代理非常深入:filterContext.RequestContext.HttpContext.Request.UserAgents以递归方式执行此操作,这只是一个如何检测复杂属性的问题。@Baboon:我想问题是,您不希望递归到每个属性中,因为这会在日志中产生大量(不需要的)信息。因此,请创建一个属性来放置不应再显示的类型,并且不会递归到该类型的属性上。没有说“递归直到它不再有意义”的内置功能不能将属性放在属于.net framework的类型上。您必须创建一些外部config-/rules文件。