【解決方法】Log4net は、指定されたファイルの代わりに app.config を使用しようとし続けます

[ad_1]

私はしばらくの間この問題を抱えています。 コンソール アプリを起動すると、log4net が同じエラーを数回スローし続けます。 この問題を回避するためにさまざまな方法を試しましたが、常に発生します。

コード:

C#
public class Announcer
{
    private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    static void Main()
    {
        _ = XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetEntryAssembly()), new FileInfo("log4net.config"));
        _ = Log4NetUtility.SetLoggingLevel(DefaultLoggingLevel, LogManager.GetRepository());
    ...
    }
}

アプリ構成ファイル:

XML
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <appSettings>
    <add key="log4net.Internal.Debug" value="false" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

構成ファイル (「log4net.config」):

XML
<?xml version = "1.0" encoding = "utf-8" ?>
<!-- Log4net Logging Setup -->
  <log4net update="Overwrite">
    <appender name="console" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red" />
      </mapping>
      <mapping>
        <level value="INFO" />
        <foreColor value="Green" />
      </mapping>
      <mapping>
        <level value="DEBUG" />
        <backColor value="Cyan" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5level %-35logger{2} [%thread] %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
      </filter>
    </appender>
    <appender name="logfile" type="log4net.Appender.RollingFileAppender">
      <file value="TestFiles\NewsAnnouncer.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="yyyyMMdd" />
      <maxSizeRollBackups value="5" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %-35logger{2} [%thread] %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
      </filter>
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <immediateFlush value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5level %-35logger{2} [%thread] %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="console" />
      <appender-ref ref="logfile" />
    </root>
  </log4net>

エラー(への呼び出し直後に発生します LogManager.GetRepository() 作られています):

「ターミナル」
log4net:ERROR Exception while reading ConfigurationSettings. Check your .config file is well formed XML.
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize
 ---> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section system.web. (C:\Programming\NewsAnnouncer-System\NewsAnnouncer\NewsAnnouncer\bin\Debug\net6.0\NewsAnnouncer.dll.config line 10)
   at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
   at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
   at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
   --- End of inner exception stack trace ---
   at System.Configuration.ConfigurationManager.PrepareConfigSystem()
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.get_AppSettings()
   at log4net.Util.SystemInfo.GetAppSetting(String key)

注: NewsAnnouncer はアプリケーションのアセンブリ名であるため、 NewsAnnouncer.dll.config.
奇妙なことは、log4net が log4net.config ファイルを正しく使用して終了することです。 ロギング メッセージは、必要な場所に移動し、必要に応じてフォーマットされます。 しかし、アプリを起動するたびに、そのエラー メッセージが 5 回繰り返されます。

私が試したこと:

私はありとなしで試しました

XML
<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

の第一子として <configuration> アプリ構成の要素。
私は log4net のドキュメントを見て、その例を試し、ネットで問題を検索しました。
ほとんどの答えは、 [assembly:…] 属性(私は役に立たなかった)、またはlog4net構成をapp.configファイルに直接含めます。 しかし、これらは私が追求したい手段ではありません。最終的には、ログファイルの場所を構成可能にしたいと考えています。そのため、実行時にファイルの場所を設定できるこの形式を選択しました。
報告されたエラーが表示される理由は誰にも分かりますか?

解決策 1

引用:

認識されない構成セクション system.web.

問題は、あなたが持っているということです <system.web> アプリ構成ファイルのセクション。

そのセクションは、.NET Framework で ASP.NET を構成するために使用されました。 .NET 6 アプリケーションやコンソール アプリケーションには適用されません。

サポートされていないセクションを削除して、エラーを取り除きます。

注意: また、削除する必要がある場合があります。 <runtime> これは、.NET 6 アプリケーションにも当てはまらないためです。

[ad_2]

コメント

タイトルとURLをコピーしました