Библиотеки 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 можно найти на сайте проекта www.mongodb.org.Ниже приведены лишь некоторые замечания:
•файлы базы данных могут расти довольно быстро;
•MongoDB 3.0 поддерживает упакованный формат хранилища Wired Tiger;
•размеры коллекций можно ограничивать (новые события перезапишут самые старые);
•интересные с точки зрения фильтрации свойства следует индексировать;
•настраивать ограничения и индексировать можно на лету;
•для перехода на упакованный формат следует перезапускать сервер MongoDB;
•встроенная оболочка Mongo не слишком удобна, возможно стоит обратить внимание на Robomongo (пока не работает с Wired Tiger) или
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 можно найти на сайте библиотеки serilog.net.