Почему все мои уровни log4net ложные? - PullRequest
30 голосов
/ 28 декабря 2011

Я использую log4net в моем проекте ASP.NET MVC3, но все свойства журналирования, такие как IsDebugEnabled == false

В моем AssemblyInfo у меня есть:

[assembly: XmlConfigurator(Watch = true)]

Вмой класс журнала у меня есть

public Log4NetLogger()
{
    log4net.Config.XmlConfigurator.Configure();
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}

Мои связанные настройки в Web.Config:

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
       </sectionGroup>
  </configSections>

    <log4net debug="false">
      <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="100" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="{removed}" />
        <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
        <parameter>
          <parameterName value="@log_date" />
          <dbType value="DateTime" />
          <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
          <parameterName value="@thread" />
          <dbType value="String" />
          <size value="255" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@log_level" />
          <dbType value="String" />
          <size value="50" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@logger" />
          <dbType value="String" />
          <size value="255" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@message" />
          <dbType value="String" />
          <size value="4000" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@exception" />
          <dbType value="String" />
          <size value="2000" />
          <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
      </appender>
      <!--Possible levels:-->
      <!--DEBUG-->
      <!--INFO-->
      <!--WARN-->
      <!--ERROR-->
      <!--FATAL-->
      <root>
        <level value="All" />
        <appender-ref ref="AdoNetAppender" />
      </root>
    </log4net>

  </applicationSettings>

</configuration>

Я уже разочаровался до такой степени, что просто хотел сделать

public Log4NetLogger()
{
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);


    Logger.IsDebugEnabled = true;
}

Однако, конечно, Logger.IsDebugEnabled не имеет никаких сеттеров: /

Что мне нужно сделать, чтобы эта чертова штука заработала?

Ответы [ 13 ]

0 голосов
/ 24 августа 2017

если файл журнала класса (Log4NetLogger) находится в отдельной библиотеке классов, то код: [assembly: log4net.Config.XmlConfigurator (C .... должен находиться в той же библиотеке классов.

дляпример: lib 1: my.web (проект mvc) lib 2: my.common (проект библиотеки классов)

если вы оберните код logmanager в my.common, то "[Assembly: log4net.Config.XmlConfigurator (C ... "ДОЛЖЕН БЫТЬ В my.common, если вы поместите его в my.web, он не будет работать!

Редактировать:

Использованиевсех файлов конфигурации (app.config, web.config, log4net.config и т. д.) основаны на контексте. Поэтому, если у вас есть приложение, вызывающее библиотеку классов, файл конфигурации, который будет использоваться, будет .Config в проекте приложения, а небиблиотека классов.

Другой пример, если вы тестируете приложение в качестве модуля, контекстом является проект модульного тестирования, и именно этот файл конфигурации будет использоваться, а не конфигурация приложения.

0 голосов
/ 06 декабря 2016

Вам не хватает открывающего тега для applicationSettings.Это может быть причиной

0 голосов
/ 10 февраля 2014

Для IsDebugEnabled нет установщика, так как он доступен только для чтения ..

Использовать log4net.Config.XmlConfigurator.Configure (); любым способом перед использованием журнала

и в app.Config значение должно быть:

    <root>
      <level value="ALL" />
      <appender-ref ref="AppenderName" />
    </root>
...