0

私はWebアプリを構築しており、Log4Mongoを使用してアプリのログをMongoデータベースの「ログ」コレクションに保存しています。

これがweb.configのMongoDBAppenderです

<appender name="MongoDBAppender" type="Log4Mongo.MongoDBAppender, Log4Mongo">
  <connectionString value="mongodb://localhost/insurancegrader?safe=true" />
  <collectionName value="Logs" />
  <field>
    <name value="timestamp" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </field>
  <field>
    <name value="level" />
    <layout type="log4net.Layout.PatternLayout" value="%level" />
  </field>
  <field>
    <name value="thread" />
    <layout type="log4net.Layout.PatternLayout" value="%thread" />
  </field>
  <field>
    <name value="logger" />
    <layout type="log4net.Layout.PatternLayout" value="%logger" />
  </field>
  <field>
    <name value="message" />
    <layout type="log4net.Layout.PatternLayout" value="%message" />
  </field>
  <field>
    <name value="mycustomproperty" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="mycustomproperty" />
    </layout>
  </field>
</appender>

このようなJSON形式

{ "_id" : ObjectId("51921692a777da8788faa22c"), "timestamp" : ISODate("2013-05-14T10:48:50.018Z"), "レベル" : "エラー", "スレッド" : "100", "ロガー" : "クラスのタイプ", "メッセージ" : "ここにいくつかの情報" }

逆シリアル化後にオブジェクトを格納するクラスを作成します

public class LogEntry
{
    public ObjectId Id { get; set; }

    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    [JsonProperty("timestamp")]
    public DateTime TimeStamp { get; set; }

    [JsonProperty("level")]
    public string Level { get; set; }

    [JsonProperty("logger")]
    public string Logger { get; set; }

    [JsonProperty("message")]
    public string Message { get; set; }
}

ただし、ログの JSON を LogEntry オブジェクトに逆シリアル化するとエラーが発生しますが、その理由はわかりません。どんな助けやアドバイスも大歓迎です!

要素 'timestamp' は、クラスのどのフィールドまたはプロパティとも一致しません


簡単な解決策は、LogEntry クラスのすべてのプロパティを JSON 形式と同じに修正することです (JsonProperty(...) を削除しますが、規則コードの問題につながります)。

パブリック クラス LogEntry {

public ObjectId Id { get; set; }

public DateTime timestamp{ get; set; }

public string level{ get; set; }

public string logger{ get; set; }

public string message{ get; set; }

}

4

1 に答える 1

0

なぜあなたは変わらないのですか

<name value="timestamp" />

<name value="TimeStamp" />

?

于 2013-05-16T05:30:55.590 に答える