log4net中的方法名称C#

Y.S*_*Y.S 4 .net c# log4net

我为log4net创建了ac #wrapper.

它有Debug()和Error()方法.

我想记录记录记录的方法名称,但是如果我尝试使用%方法转换模式,它只打印Debug,它是包装器方法名称.

有没有办法打印完整的方法堆栈?

例如

而不是Debug - > SomeLoggingActionInSomeClass.Debug?

包装类代码:

public static class Logger
{
    private static ILog _log;

    static Logger()
    {
        log4net.Config.XmlConfigurator.Configure();

        _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    }

    public static void Init()
    {
    }

    public static void Debug(string message)
    {
        _log.Debug(message);
    }
Run Code Online (Sandbox Code Playgroud)

调用类代码:

W6CustomizationLogger.Logger.Debug("Backup(): START");
Run Code Online (Sandbox Code Playgroud)

jga*_*fin 6

报废包装.

组态

要初始化日志记录,您可以在启动项目中轻松配置它.

  1. 单击解决方案资源管理器中启动项目上"属性"旁边的箭头
  2. 双击装配信息

在此输入图像描述

3添加以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

截图:

在此输入图像描述

用法

现在在您的课程中添加:

public class YourClass
{
    private ILog _logger = LogManager.GetLogger(typeof(YourClass));

    // [....]
}
Run Code Online (Sandbox Code Playgroud)

log4net.config现在,您可以logger在输出中使用该属性:

<layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-7level %-40logger %message%newline" />
</layout>
Run Code Online (Sandbox Code Playgroud)

这将在每个日志行上打印命名空间和类型名称(-7-40填充名称,以便我得到直列).

另一件好事是你也可以在命名空间上使用过滤器(使所有数据库类都记录到"databases.log"等).

<appender name="DatabaseAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\Logs\MyApp\Database.log" />
  <rollingStyle value="Composite" />
  <datePattern value=".yyyy-MM-dd'.log'" />
  <appendToFile value="true" />
  <maximumFileSize value="50MB" />
  <maxSizeRollBackups value="5" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %level@%thread [%logger] %message%newline" />
  </layout>

  <!-- Namespace/Type filter -->
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="CompanyName.DatabaseNamespace"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>
Run Code Online (Sandbox Code Playgroud)

您也可以使用%type{1}if %logger来获取类名.