Библиотеки Serilog уже входят в дистрибутив приложения Ultima Businessware® и в дополнительной установке не нуждаются.

Базу данных MongoDB 3.0, которая поддерживается встроенным в систему анализатором логов, следует предварительно запустить и настроить:

подготовить пустую папку для базы данных и выполнить команду:

mongod.exe --dbpath D:\Tools\MongoDB30\data

для запуска на движке Wired Tiger потребуется другая пустая папка и дополнительный параметр --storageEngine:

mongod.exe --storageEngine wiredTiger --dbpath D:\Tools\MongoDB30\datawt

пример конфигурирования работающей базы событий:

// ограничить размер коллекции событий объемом в 4 гигабайта

db.runCommand({"convertToCapped""log", size: 4*1024*1024*1024});

 

// проиндексировать интересующие свойства

db.log.createIndex({"Level": 1});

db.log.createIndex({"Timestamp": 1});

db.log.createIndex({"Properties.SourceContext": 1});

db.log.createIndex({"Properties.Application": 1});

db.log.createIndex({"Properties.UserID": 1});

db.log.createIndex({"Properties.SessionID": 1});

db.log.createIndex({"Properties.ServerCallID": 1});

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

// Execute script using

// mongo.exe localhost/logs setupSerilog.js 

// In the interactive shell, type: use logs;

 

// create admin user

db.createUser(

  {

    user: "logAdminUser",

    pwd: "********************",

    roles: [

      { role: "userAdmin", db: "logs" },

      { role: "readWrite", db: "logs"}

    ]

  }

);

 

// create a write-only role for serilog writer

db.runCommand(

  {

    createRole: "logWriter"

    privileges: [

      { resource: {db: "logs", collection: "log"}, actions: ["insert"]}

    ], 

    roles: []

  }

);

 

// create serilog user

db.createUser(

  {

    user: "serilog",

    pwd: "serilog",

    roles: [

      { role: "logWriter", db: "logs" }

    ]

  }

);

после настройки пользователей MongoDB следует перезапустить с ключом --auth для включения авторизации:

mongod.exe --auth --storageEngine wiredTiger --dbpath D:\Tools\MongoDB30\datawt

Подробную информацию o конфигурировании хранилища MongoDB можно найти на сайте проекта link www.mongodb.org.Ниже приведены лишь некоторые замечания:

файлы базы данных могут расти довольно быстро;

MongoDB 3.0 поддерживает упакованный формат хранилища link Wired Tiger;

размеры коллекций link можно ограничивать (новые события перезапишут самые старые);

интересные с точки зрения фильтрации свойства link следует индексировать;

настраивать ограничения и индексировать можно на лету;

для перехода на упакованный формат следует перезапускать сервер MongoDB;

встроенная оболочка Mongo не слишком удобна, возможно стоит обратить внимание на link Robomongo (пока не работает с Wired Tiger) или link MongoChef.

Настройка записи логов осуществляется для каждого из приложений в отдельности в файле его конфигурации. В приведенном примере настроено журналирование в файл, консоль и хранилище MongoDB:

<appSettings>

  <add key="serilog:minimum-level" value="Verbose" />

  <add key="serilog:enrich:with-property:ProjectName" value="ProjectName" />

  <add key="serilog:write-to:Console.restrictedToMinimumLevel" value="Information" />

  <add key="serilog:write-to:File.path" value="ConsoleServer.log" />

  <add key="serilog:write-to:File.restrictedToMinimumLevel" value="Debug" />

  <add key="serilog:using:Mongo" value="Serilog.Sinks.MongoDB" />

  <add key="serilog:write-to:MongoDB.databaseUrl"

    value="mongodb://serilog:serilog@192.168.102.14:27017/logs" />

</appSettings>

Serilog поддерживает концепцию минимального уровня MinimumLevel. Если он задан, события ниже минимального уровня не журналируются. Существуют следующие уровни событий в порядке повышения их критичности:

Verbose;

Debug;

Information;

Warning;

Error;

Fatal.

Если минимальный уровень не задан, журналируются все события уровня Information и выше.

Более подробную информацию o Serilog можно найти на сайте библиотеки link serilog.net.