Unity 6.3
0 онлайн 36 гостей 3 в системе
Вход

Настройка модуля ведения журнала

Встроенные платформы могут иметь ограничения на хранение вывода журнала в файл. В результате, эти платформы собирают события журнала в специальных средах журналирования, таких как DLT и slogger2. Чтобы реализовать эту функциональность в Unity, вы можете создать плагин журналирования с помощью API, предоставленного в файле заголовка, расположенном в <UnityInstallPath>/Editor/Data/PlaybackEngines/<EmbeddedLinux|QNX>/PluginAPI/unity_logging_plugin.h.

#pragma once

#include <stdint.h>

#if __GNUC__
    #define UNITY_LOGGING_PLUGIN_API extern "C" __attribute__ ((visibility ("default")))
#else
    #error "Unsupported compiler/platform"
#endif

/// Increments on changes to the UnityLoggingPluginAPI structure
#define UNITY_LOGGING_PLUGIN_VERSION 1

enum UnityLoggingLevel
{
    kUnityLoggingLevelError = 0,
    kUnityLoggingLevelAssert = 1,
    kUnityLoggingLevelWarning = 2,
    kUnityLoggingLevelLog = 3,
    kUnityLoggingLevelException = 4,
    kUnityLoggingLevelDebug = 5,
    kUnityLoggingLevelNumLevels
};

enum UnityLoggingStatus
{
    kUnityLoggingStatusSuccess = 0,
    kUnityLoggingStatusUnsupportedVersion = 1,
    kUnityLoggingStatusLoadFailure = 2,
    kUnityLoggingStatusUnloadFailure = 3,
    kUnityLoggingStatusDependencyFailure = 4,
};

typedef struct {
    const char* (*const GetString)(const char* key, const char* defaultValue);
    uint64_t (*const GetUInt64)(const char* key, uint64_t defaultValue);
    int64_t (*const GetInt64)(const char* key, int64_t defaultValue);
    uint32_t (*const GetUInt32)(const char* key, uint32_t defaultValue);
    int32_t (*const GetInt32)(const char* key, int32_t defaultValue);
} UnityLoggingPluginConfig;

typedef struct {
    typedef UnityLoggingStatus (*UnityLoggingLoad)(UnityLoggingPluginConfig* config);
    typedef UnityLoggingStatus (*UnityLoggingUnload)();
    typedef void (*UnityLoggingLog)(UnityLoggingLevel, const char*, uint32_t);

    UnityLoggingLoad Load;
    UnityLoggingUnload Unload;
    UnityLoggingLog Log;
} UnityLoggingPluginAPI;

UNITY_LOGGING_PLUGIN_API UnityLoggingStatus unity_logging_plugin_get_api(UnityLoggingPluginAPI* api, uint32_t version);

Вы можете включить плагин для ведения журнала, предоставив аргумент Player -platform-hmi-log-plugin и указав имя общей библиотеки плагина, которая будет загружена из папки Plugins. Общая библиотека должна быть доступна динамическому загрузчику, что позволит загрузить ее с помощью dlopen и инициализировать. Для получения дополнительной информации см. Аргументы командной строки для ведения журнала.

Если аргумент -logfile устанавливается вместе с аргументом модуля журналирования, модуль инициализируется, в журнал записывается одно тестовое сообщение и всегда возникает ошибка модуля. Эти действия регистрируются в журнале для выявления возможных проблем.

Если плагин не инициализируется, Unity по умолчанию возвращает код выхода с ошибкой. В этом случае вы можете использовать аргумент -platform-hmi-log-disable-on-plugin-failure, чтобы проигрыватель продолжал работать без выхода журнала.

Примечание: Образцы плагинов для ведения журналов доступны по запросу в рамках контракта на поддержку встраиваемых платформ. Чтобы запросить доступ, свяжитесь с группой поддержки встраиваемых платформ.

Интеграция плагина с настройкой Logging Player

Вы можете настроить плагин журналирования для интеграции с Лесозаготовки Настройка игрока доступна для встроенный Linux и QNX Для этого рассмотрите следующие шаги и обратитесь к следующему примеру кода:

  1. Используйте SettingsProvider класс, чтобы добавить Лесозаготовки установка.
  2. Используйте имя класса, оканчивающееся на PluginBuildPostProcessor.
  3. Убедитесь, что подпись метода ProcessConfiguration соответствует формату, упомянутому в следующем примере кода.
  4. Установите библиотеку плагинов с помощью аргумента platform-hmi-log-plugin.
namespace MyPluginNamespace
{
    public static class MyPluginBuildPostProcessor
    {
        private const string LoggingPluginKey = "platform-hmi-log-plugin";
        public static void ProcessConfiguration(Action<string, string> setValue)
        {
            // Set the shared library name for the plugin
            setValue(LoggingPluginKey, "mylogplugin.so");

            // (Optional) Set specific key values for the plugin
            setValue("my-plugin-setting", "42");
        }
    }

}

Дополнительные ресурсы