2017-02-23 109 views
0

我正在将一个项目移植到.Net Core,我想使用log4net登录.net核心。我在.NET代码:.net核心log4net静态日志字段

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

在.NET的核心问题是 “methodbase不包含定义getCurrentMethod()”

我想这应该工作(不是100%肯定):

private static readonly ILog log = LogManager.GetLogger(typeof("MyClassName")) ; 

但我想要的东西,可以复制/粘贴到任何类,而不必关心类名...任何人都知道的东西是行得通的?

+1

首先不要复制,但使用依赖注入? – CodeCaster

+1

CodeCaster说什么,但看看这里https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging – DavidG

+0

值得注意的是,你的原始代码[应该在.NET标准2下正常工作](https ://github.com/dotnet/corefx/issues/12496) –

回答

-1

它应该工作,请检查Loger Static Class Name如何获得静态块中的类的全限定名?

您可以使用语句typeof(X).Name轻松地检索类X的静态块中类的全限定名。请注意,X是类名称并跨越一个实例。但是因为LogManager.GetLogger方法被重载以获取Type和字符串的实例,通常只需要该类的类型。

这里是建议使用的模板:

public class Foo 
{ 
private static readonly ILog log = LogManager.GetLogger(typeof(Foo)); 
... other code 
} 

一个等价的和更便携的解决方案,虽然稍长,就是用静态构造函数的声明类型。

public class Foo 
{ 
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
... other code 
} 

注意:.NET Compact Framework 1.0不支持System.Reflection.MethodBase.GetCurrentMethod()。

+0

最后1个不能工作。 NET核心1.1和第一个不被认为是“有效”(在我的训练...)选项,除非没有其他选项可用 –

+0

你正在使用哪个版本 – AKN

+0

版本是什么?project.json dependecies:“log4net” :“2.0.7”,global.json:“version”:“1.0.0-preview2-003131” –