62

新しい Web サービス プロジェクトのロガーとしてlog4netを使用することにしました。すべて正常に動作していますが、.log で使用している log4net タグごとに、以下のようなメッセージがたくさん表示されますweb.config

要素「log4net」のスキーマ情報が見つかりませんでした...

以下は、 my の関連部分ですweb.config

  <configSections>
    <section name="log4net" 
        type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level: %message%newline" />
      </layout>
    </appender>
    <logger name="TIMServerLog">
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </logger>
  </log4net>

解決済み:

  1. すべての log4net 固有のタグを個別のxml-file にコピーします。必ず.xmlファイル拡張子として使用してください。
  2. 次の行を に追加しますAssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

ネモは次のように付け加えました。

このスレッドの回答のアドバイスに従ってください。Web サービスのルートから離れた xml に log4net 構成を配置すると、デフォルトで誰でもアクセスできるようになるため、セキュリティ上のリスクが生じる可能性があります。構成に機密データが含まれている場合は、別の場所に配置することをお勧めします。


@wcm: 別のファイルを使用してみました。次の行を追加しましたAssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

log4net を扱うすべてのものをそのファイルに入れますが、それでも同じメッセージが表示されます。

4

13 に答える 13

76

log4netスキーマで要素にバインドできます。いくつか浮かんでいますが、ほとんどは利用可能なさまざまなオプションを完全には提供していません. 可能な限り多くの検証を提供するために、次の xsd を作成しました: http://csharptest.net/downloads/schema/log4net.xsd

log4net要素を変更することで、xml に簡単にバインドできます。

<log4net 
     xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
于 2008-11-08T20:59:55.873 に答える
17

私は別の見方をしており、次の構文が必要でした。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]

これは xsl の最後の投稿とは異なりますが、私にとっては違いがありました。このブログ投稿をチェックしてください、それは私を助けました.

于 2008-10-06T20:43:56.507 に答える
11

このスレッドの回答のアドバイスに従ってください。Web サービスのルートから離れた xml に log4net 構成を配置すると、デフォルトで誰でもアクセスできるようになるため、セキュリティ上のリスクが生じる可能性があります。構成に機密データが含まれている場合は、別の場所に配置することをお勧めします。

于 2008-11-24T20:07:50.990 に答える
5

Visual Studio は構成ファイルの log4net セクションを検証する方法を認識していないため、このメッセージが表示されていると思います。log4net XSD を C:\Program Files\Microsoft Visual Studio 8\XML\Schemas (または Visual Studio がインストールされている場所) にコピーすることで、これを修正できるはずです。追加のボーナスとして、log4net の IntelliSense サポートを取得する必要があります

于 2008-10-06T14:33:14.537 に答える
4

彼がスキーマを提供したRogerの回答では、コメント投稿者が言及した場合を除いて、これは私にとって非常にうまく機能しました

このXSDは、カスタムアペンダーの使用について不平を言っています。これを単に文字列フィールドにするのではなく、デフォルトセット(列挙型として定義)からのアペンダーのみを許可します

xs:simpletype名前付きの元のスキーマを変更しlog4netAppenderTypes、列挙を削除しました。代わりに、基本的な.NETタイピングパターンに制限しました( typenameのみ、またはtypenameアセンブリをサポートしているため、基本と言いますが、誰かが拡張できます。

log4netAppenderTypesXSDで定義を次のように置き換えるだけです。

<xs:simpleType name="log4netAppenderTypes">
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)+)?"/>
  </xs:restriction>
</xs:simpleType>

彼が公式バージョンにそれを含めたいのであれば、私はこれを元の作者に戻します。それまでは、xsdをダウンロードして変更し、相対的な方法で参照する必要があります。次に例を示します。

<log4net
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="../../../Dependencies/log4net/log4net.xsd">
  <!-- ... -->
</log4net>
于 2012-08-02T15:23:15.440 に答える
3

実際には、.xml 拡張子に固執する必要はありません。ConfigFileExtension 属性で他の拡張子を指定できます。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension=".config", Watch = true)]
于 2009-07-24T09:16:56.837 に答える
2

@steve_mtl: ファイル拡張子を から.configに変更する.xmlと問題が解決しました。ありがとうございました。

@Wheelie: 変更されていない Visual Studio インストールで動作するソリューションが必要だったため、あなたの提案を試すことができませんでした。


要約すると、問題を解決する方法は次のとおりです。

  1. すべての log4net 固有のタグを個別のxml-file にコピーします。必ず.xmlファイル拡張子として使用してください。
  2. 次の行を に追加しますAssemblyInfo.cs

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

于 2008-10-07T07:37:57.543 に答える
1

別の log4net.config ファイルを使用してみましたか?

于 2008-10-06T14:21:32.423 に答える
0

少し遅れて気づきましたが、log4net が提供するサンプルを調べると、すべての構成データが app.config に入れられていることがわかります。1 つの違いは、configsection の登録です。

<!-- Register a section handler for the log4net section -->
<configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>

タイプ「System.Configuration.IgnoreSectionHandler」としての定義は、Visual Studioがlog4netに関する警告/エラーメッセージを表示しない理由でしょうか?

于 2015-02-15T17:07:15.130 に答える
0

Visual Studio のインストールを変更せずに、適切なバージョン管理などを考慮してください。チームの他のメンバーと一緒に、.xsd ファイルをソリューションに (「ソリューション アイテム」として) 追加するか、特定のプロジェクトにのみ必要な場合は、そこに埋め込むだけです。

于 2011-03-07T23:16:49.430 に答える