Configuration 如何在log4net中记录没有路径的类文件
我希望能够在我的日志文件中记录类文件和行号,因此我使用以下配置Configuration 如何在log4net中记录没有路径的类文件,configuration,logging,log4net,Configuration,Logging,Log4net,我希望能够在我的日志文件中记录类文件和行号,因此我使用以下配置 <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--etc--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--etc-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level (%file:%line) %logger => %message%newline" />
</layout>
</appender>
有没有办法只显示类文件('Controller.cs')而不是文件的完整路径
Michael开箱即用,PatternLayout仅支持%文件标记。您可以做的是子类PatternLayout并添加您自己的模式,例如%filename,并且对于此令牌,只输出文件名。尽管您询问的是文件名,但我相信您可以使用%type获得完全限定的类型名(a.b.className)。如果只需要类名,请使用%type{1} 请注意,任何生成调用方信息(%file和%type)的方法都会产生与其相关联的性能代价 另一方面,您可以通过使用类型名命名记录器来绕过性能影响
namespace MyNamespace
{
public class Foo
{
private static ILog log = LogManager.GetLogger(typeof(Foo));
}
}
您的转换模式如下所示:
"%date [%thread] %-5level %logger %message"
您的记录器将是“MyNameSpace.Foo”。同样,如果只需要类名,请使用“%logger{1},它将解析为“Foo”
这种方法的最大优点之一是,您可以利用log4net的分层存储库系统来调整每种类型的日志记录级别:
<!-- all classes in MyNamespace are warn -->
<logger name="MyNamespace">
<level value="WARN" />
</logger>
<!-- only Foo is in debug -->
<logger name="MyNamespace.Foo">
<level value="DEBUG" />
</logger>
谢谢Peter,我真的不想在Log4Net中搞混子类化,但我想我会尝试一下。在那里,我可能会尝试自定义RollingLogFileAppender的stoopid文件命名选项。试试吧。将您自己的模式添加到Patternlayout实际上很容易…让我们都知道它是如何进行的。我没有尝试过,但是我想知道%file{1}的工作方式与%type{1}的工作方式相同吗?感谢Bryan。我正在使用类型名称作为记录器名称,这可以正常工作。我发现类和行号信息与我的'Release'配置文件不起作用(我没有发布pdb文件)所以我跳过这些完全是为了我的产品发布。
<!-- all classes in MyNamespace are warn -->
<logger name="MyNamespace">
<level value="WARN" />
</logger>
<!-- only Foo is in debug -->
<logger name="MyNamespace.Foo">
<level value="DEBUG" />
</logger>