如何在没有log4net路径的情况下记录Class文件

Mic*_*ann 3 configuration logging log4net

我希望能够在我的日志文件中记录类文件和行号,所以我使用以下配置...

<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>
Run Code Online (Sandbox Code Playgroud)

但是,%file属性使我的日志文件条目太长,无法轻松阅读....

2009-08-07 16:41:55,271 [7] INFO  (O:\mystream\aevpallsrv\DotNet\com.mycompany.au\myapp\Myappp\Controller.cs:75) MyApp.Controller => Controller.EnqueueWorkerThreads() - START
Run Code Online (Sandbox Code Playgroud)

有没有办法只显示类文件('Controller.cs')而不是文件的完整路径???

迈克尔

bry*_*ook 5

虽然您询问文件名,但我相信您可以使用%type来获取完全限定的类型名称(abclassName).如果您只想要类名,请使用%type {1}

请注意,生成调用者信息(%文件和%类型)的任何方法都具有与之关联的性能成本.

另外,您可以通过使用类型名称命名Logger来绕过性能损失.

namespace MyNamespace
{     
    public class Foo
    {
        private static ILog log = LogManager.GetLogger(typeof(Foo));
    }
}
Run Code Online (Sandbox Code Playgroud)

您的转换模式如下所示:

"%date [%thread] %-5level %logger %message"
Run Code Online (Sandbox Code Playgroud)

你的记录器将是" 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>
Run Code Online (Sandbox Code Playgroud)