c # Используйте NLog с Mongo - PullRequest
       7

c # Используйте NLog с Mongo

0 голосов
/ 14 декабря 2018

Я бы записывал свои данные в NLog и MongoDB.Я настроил свой NLog.config следующим образом:

<extensions>
  <add assembly="NLog.Mongo"/>
</extensions>
...
 <target xsi:type="Mongo"
        name="mongo"
        includeDefaults="false"
        connectionString="mongodb://localhost"
        collectionName="myCollection"
        databaseName="logs"
        cappedCollectionSize="26214400">
  <field name="_id" layout="${Id}"/>
  <field name="ts" layout="${Timestamp}" bsonType="DateTime"/>
  <field name="cap" layout="${ApplicationCaller}" />
</target>

Но как я могу передать значение ID, метку времени, ApplicationCaller в моем журнале ??Я пытаюсь этот код:

public void LogExceptionOnMongo(string callIdentifier, string applicationCaller)
{
     var _myLogger = LogManager.GetLogger("mongo");
     var logEventInfo = new LogEventInfo(LogLevel.Fatal, "", "Exception");
     logEventInfo.Properties["CallIdentifier"] = callIdentifier;
     logEventInfo.Properties["TimeStamp"] = DateTime.UtcNow;
     logEventInfo.Properties["ApplicationCaller"] = applicationCaller;

     _myLogger.Log(logEventInfo);
}

и эту конфигурацию:

<target xsi:type="Mongo"
        name="mongo"
        includeDefaults="false"
        connectionString="mongodb://localhost"
        collectionName="myCollection"
        databaseName="logs"
        cappedCollectionSize="26214400">
  <field name="_id" layout="${event-properties:item=CallIdentifier}"/>
  <field name="ts" layout="${event-properties:item=TimeStamp}" bsonType="DateTimeUtc"/>
  <field name="cap" layout="${event-properties:item=ApplicationCaller}" />
</target>

Но я получаю этот журнал в Монго (я не буду обводить данные):

enter image description here

Пожалуйста, кто-нибудь может мне помочь ??Спасибо и извините за мой английский

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Этим утром я попытался использовать новую версию библиотеки, это новая конфигурация:

   <target xsi:type="Mongo"
        name="mongo"
        includeDefaults="false"
        connectionString="mongodb://localhost"
        collectionName="myCollection"
        databaseName="logs"
        cappedCollectionSize="26214400"
        includeEventProperties="false">
  <field name="_id" layout="${event-properties:item=CallIdentifier}"/>
  <field name="ts" layout="${event-properties:item=TimeStamp}" bsonType="DateTime"/>
  <field name="cap" layout="${event-properties:item=ApplicationCaller}" />
</target>

с новым тегом includeEventProperties = false и с его новым свойством в классеMongoTarget и он отлично работает.Вот результат: enter image description here Большое спасибо, отличная работа

0 голосов
/ 18 декабря 2018

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

Теперь можно настроить новое свойство includeEventProperties:

<target xsi:type="Mongo"
        name="mongo"
        includeDefaults="false"
        includeEventProperties="false"
        connectionString="mongodb://localhost"
        collectionName="myCollection"
        databaseName="logs"
        cappedCollectionSize="26214400">
  <field name="_id" layout="${event-properties:item=CallIdentifier}"/>
  <field name="ts" layout="${event-properties:item=TimeStamp}" bsonType="DateTimeUtc"/>
  <field name="cap" layout="${event-properties:item=ApplicationCaller}" />
</target>

Просто используйте версию.4.6.0.68 от nuget: https://www.nuget.org/packages/NLog.Mongo

...