Настройка модуля ведения журнала
Встроенные платформы могут иметь ограничения на хранение вывода журнала в файл. В результате, эти платформы собирают события журнала в специальных средах журналирования, таких как 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 Для этого рассмотрите следующие шаги и обратитесь к следующему примеру кода:
- Используйте SettingsProvider класс, чтобы добавить Лесозаготовки установка.
- Используйте имя класса, оканчивающееся на
PluginBuildPostProcessor. - Убедитесь, что подпись метода
ProcessConfigurationсоответствует формату, упомянутому в следующем примере кода. - Установите библиотеку плагинов с помощью аргумента
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");
}
}
}