完全坚持这个...我有这个问题,我们在Unity项目中使用log4Net来构建Windows商店应用程序。 log4Net需要声明记录器的类类型或名称(作为字符串)。由于Windows商店.NET被修改,它没有像GetCurrentMethod()这样的常用方法......我查了一下,到目前为止它是没有希望的:
通常的方法就是这个
public sealed class SomeClassController : ApiController
{
private static readonly ILog Log =
LoggerManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
...
How to get method name win 8 app - 这里提供的解决方案不起作用,因为属性[CallerMememberName]返回调用者(而不是声明者)。 func(表达式表达式)方法不起作用,因为它只在方法中使用时才有效,但不能作为类字段(在log4Net中就是这种情况)。
另一种可能性是使用StackFrame,但幸运的是" Windows商店也不支持它,进入StackTrace的唯一方法是通过异常,这不是一个选项,因为1.真的很慢2.所有异常抛出都必须在Unity生产中删除。
像GetType()这样的简单解决方案不起作用,因为如果有继承的类,它们会被覆盖。更多信息 - http://rundevrun.blogspot.lt/2012/11/gettype-vs-methodbasegetcurrentmethodde.html
我的选项用完了,在类字段中使用时是否无法获取DeclaringType ???
答案 0 :(得分:1)
只需使用typeof
- 它更简单,并且不需要任何框架支持:
public sealed class SomeClassController : ApiController
{
private static readonly ILog Log =
LoggerManager.GetLogger(typeof(SomeClassController));
...
}
唯一的缺点是,如果您将其复制并粘贴到其他地方,您将最终使用错误的类进行日志记录。您可以通过以下方式缓解这一点:
LoggerManager.GetLogger
的所有来电并查看它们"