Mono в Linux: регистрация событий - PullRequest
0 голосов
/ 28 января 2019

Я работаю над тем, чтобы приложения C #, написанные для Windows, работали в Linux с использованием Mono.Я использую Mono 5.18.0.240 из репозитория Mono в Ubuntu 18.04.1.

Насколько я понимаю, Mono включает в себя локальный файловый регистратор событий.Если для переменной среды MONO_EVENTLOG_TYPE задать значение local (за которым следует необязательный путь), события будут записываться в журнал на основе файлов.Однако зарегистрированные события, кажется, не сортируются в правильный исходный каталог, который создается.Это позволяет регистрировать все события в одном и том же каталоге, что затрудняет навигацию по файлам, если регистрируется много событий.

Рассмотрим эту программу на C #, которая просто регистрирует два события каждое для трех источников событий.:

using System;
using System.Diagnostics;

namespace EventLogTest
{
    class Program
    {
        public static void Main()
        {
            var sources = new string[] { "source1", "source2", "source3" };

            foreach(var source in sources){
                if(! EventLog.SourceExists(source)) EventLog.CreateEventSource(source, "Application");

                EventLog log = new EventLog();
                log.Source = source;

                log.WriteEntry("some event");
                log.WriteEntry("another event");
            }
        }
    }
}

Мы можем встроить программу в исполняемый файл, а затем запустить его:

$ csc events.cs
Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
Copyright (C) Microsoft Corporation. All rights reserved.
$ MONO_EVENTLOG_TYPE=local:./eventlog mono ./events.exe

Полученная структура каталога журнала событий выглядит следующим образом:

$ tree ./eventlog
./eventlog
└── Application
    ├── 1.log
    ├── 2.log
    ├── 3.log
    ├── 4.log
    ├── 5.log
    ├── 6.log
    ├── Application
    ├── source1
    ├── source2
    └── source3

5 directories, 6 files

Обратите внимание, что каталоги source1, source2 и source3 были созданы, но шесть файлов журнала были помещены в каталог Application верхнего уровня вместо исходных каталогов.Если мы посмотрим на поле источника каждого файла журнала, то увидим, что источник указан правильно:

$ grep -a Source ./eventlog/Application/*.log
eventlog/Application/1.log:Source: source1
eventlog/Application/2.log:Source: source1
eventlog/Application/3.log:Source: source2
eventlog/Application/4.log:Source: source2
eventlog/Application/5.log:Source: source3
eventlog/Application/6.log:Source: source3

Я ожидаю, что приведенная выше структура каталогов должна выглядеть следующим образом, учитывая, что каждый источник журнала событийбыло записано два события (и я не вижу смысла во втором каталоге приложений):

./eventlog
└── Application
    ├── source1
    │   ├── 1.log
    │   └── 2.log
    ├── source2
    │   ├── 1.log
    │   └── 2.log
    └── source3
        ├── 1.log
        └── 2.log

Теперь я знаю, что очевидным решением может быть использование решения для ведения журналов, отличного от встроенного в Mono.регистрация событий.Однако на этом этапе важно придерживаться доступных встроенных инструментов.

Существует ли способ настройки встроенной локальной регистрации событий Mono для сохранения событий в файлах журналов в соответствующем источнике?каталог, или это возможно ошибка в Mono?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...