Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Логирование в файл является необязательной функцией для Speech SDK. На стадии разработки ведение журнала предоставляет дополнительные сведения и средства диагностики основных компонентов SDK для распознавания речи. Логирование осуществляется статическими классами в родной библиотеке Speech SDK. Все экземпляры программ в одном процессе записывают лог-записи в один и тот же файл журнала.
Использование API ведения журнала
Рекомендуемый способ включения ведения журнала — использовать классы статического средства ведения журнала, доступные в пакете SDK службы "Речь" версии 1.43.0 и более поздних версий. API ведения журнала предоставляет три типа средств ведения журнала:
- Средство ведения журнала: записывает сообщения журнала непосредственно в файл. Это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве.
- Средство ведения журнала памяти: хранит сообщения журнала в фиксированном буфере кольца размером 2 МБ в памяти. Содержимое буфера можно дампать в файл или поток в любое время. Это подходит для диагностики проблем, возникающих в течение короткого периода времени.
- Средство ведения журнала событий: отправляет сообщения журнала в предоставленный обработчик событий. Это подходит, если необходимо интегрировать лог-файлы платформы SDK для распознавания речи с существующей системой сбора лог-файлов.
Эти логгеры — это конструкции для всего процесса. Если у вас несколько объектов распознавателя речи, работающих параллельно, существует один общий журнал, содержащий чередуемые строки журналов со всех распознавателей. Вы можете использовать средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий одновременно в одном процессе.
При использовании пакета SDK для речи версии 1.43.0, механизм ведения журнала расширяется с новыми типами логгеров: File logger, Memory logger и Event logger.
File logger— это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве при работе с пакетом SDK "Речь".Memory logger— это решение для ведения журнала, в которое хранятся сообщения журнала в памяти. Он подходит для диагностики проблем, возникающих в течение короткого периода времени. Например, если вы используете распознаватель речи, возможно, потребуется сбросить журнал памяти по получении события, которое указывает, что распознавание было отменено из-за какой-то ошибки. Размер буфера памяти фиксирован в 2 МБ и не может быть изменен. Это "кольцевой" буфер, т. е. новые строки журнала заменяют самые старые в буфере.Event logger— это решение для ведения журнала, которое отправляет сообщения журнала обработчику событий, предоставленному разработчиком. Он подходит для диагностики проблем, как только некоторые новые строки журнала становятся доступными и нуждаются в дальнейшей обработке. Например, интеграция логов Speech SDK с вашей существующей системой сбора данных.
Средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий имеют механизм фильтрации только путем ведения журнала определенных строковых сообщений. Кроме того, эти логгеры являются процессно-ориентированными конструкциями. Это означает, что если (например), у вас есть несколько объектов распознавателя речи, работающих параллельно, существует один файл журнала, содержащий чередующиеся строки журналов со всех распознавателей. Вы не можете получить отдельный файловый журнал для каждого распознавателя. Аналогичным образом существует один буфер памяти, содержащий чередующиеся журналы со всех распознавателей, и вы можете зарегистрировать только один обработчик событий в качестве функции обратного вызова для получения чередуемых журналов от всех распознавателей. Вы не можете получить отдельный средство ведения журнала памяти для каждого распознавателя, и вы не можете зарегистрировать обработчик событий для каждого распознавателя.
File logger, memory logger and event logger Однако объект может сосуществовать в одном процессе или в том же распознавателе.
Samples
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Diagnostics.Logging;
class Program
{
public static void FileLoggerWithoutFilters()
{
FileLogger.Start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger.Stop();
}
public static void FileLoggerWithFilters()
{
string[] filters = { "YourFirstString", "YourSecondString" };
FileLogger.SetFilters(filters);
FileLogger.Start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger.Stop();
FileLogger.SetFilters();
}
public static void MemoryLoggerWithoutFilters()
{
MemoryLogger.Start();
// Other Speech SDK calls
// At any time (whether logging is stopped) you can dump the traces in memory to a file
MemoryLogger.Dump("LogfilePathAndName");
// Or dump to any object that is derived from System.IO.TextWriter. For example, System.Console.Out
MemoryLogger.Dump(System.Console.Out);
// Or dump to a vector of strings
List<string> messages = MemoryLogger.Dump().ToList<string>();
MemoryLogger.Stop();
}
// These variables and method are used by the EvenLogger sample below.
private static readonly object lockObject = new object();
private static List<string> eventMessages = new List<string>();
private static void OnMessageEvent(object sender, string message)
{
lock (lockObject)
{
// Store the message for later processing. Better not processing it in the event thread
eventMessages.Add(message);
}
}
public static void EventLoggerWithoutFilters()
{
// Subscribe an event that will get invoked by Speech SDK on every new log message
EventLogger.OnMessage += OnMessageEvent;
// Other Speech SDK calls
// Unsubscribe to stop getting events
EventLogger.OnMessage -= OnMessageEvent;
}
}
При использовании пакета SDK для речи версии 1.43.0, механизм ведения журнала расширяется с новыми типами логгеров: File logger, Memory logger и Event logger.
File logger— это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве при работе с пакетом SDK "Речь".Memory logger— это решение для ведения журнала, в которое хранятся сообщения журнала в памяти. Он подходит для диагностики проблем, возникающих в течение короткого периода времени. Например, если вы используете распознаватель речи, возможно, потребуется сбросить журнал памяти по получении события, которое указывает, что распознавание было отменено из-за какой-то ошибки. Размер буфера памяти фиксирован в 2 МБ и не может быть изменен. Это "кольцевой" буфер, т. е. новые строки журнала заменяют самые старые в буфере.Event logger— это решение для ведения журнала, которое отправляет сообщения журнала обработчику событий, предоставленному разработчиком. Он подходит для диагностики проблем, как только некоторые новые строки журнала становятся доступными и нуждаются в дальнейшей обработке. Например, интеграция логов Speech SDK с вашей существующей системой сбора данных.
Средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий имеют механизм фильтрации только путем ведения журнала определенных строковых сообщений. Кроме того, эти логгеры являются процессно-ориентированными конструкциями. Это означает, что если (например), у вас есть несколько объектов распознавателя речи, работающих параллельно, существует один файл журнала, содержащий чередующиеся строки журналов со всех распознавателей. Вы не можете получить отдельный файловый журнал для каждого распознавателя. Аналогичным образом существует один буфер памяти, содержащий чередующиеся журналы со всех распознавателей, и вы можете зарегистрировать только один обработчик событий в качестве функции обратного вызова для получения чередуемых журналов от всех распознавателей. Вы не можете получить отдельный средство ведения журнала памяти для каждого распознавателя, и вы не можете зарегистрировать обработчик событий для каждого распознавателя.
File logger, memory logger and event logger Однако объект может сосуществовать в одном процессе или в том же распознавателе.
Samples
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Diagnostics::Logging;
void FileLoggerWithoutFilters()
{
FileLogger::Start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger::Stop();
}
void FileLoggerWithFilters()
{
std::initializer_list<std::string> filters = { "YourFirstString", "YourSecondString" };
FileLogger::SetFilters(filters);
FileLogger::Start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger::Stop();
FileLogger::SetFilters();
}
void MemoryLoggerWithoutFilters()
{
MemoryLogger::Start();
// Other Speech SDK calls
// At any time (whether logging is stopped) you can dump the traces in memory to a file
MemoryLogger::Dump("LogfilePathAndName");
// Or dump to any stream object that is derived from std::ostream. For example, std::cout
MemoryLogger::Dump(std::cout);
// Or dump to a vector of strings
std::vector<std::string> messages = MemoryLogger::Dump();
MemoryLogger::Stop();
}
void EventLoggerWithoutFilters()
{
std::mutex mtx;
std::vector<std::string> messages;
// Register a callback that will get invoked by Speech SDK on every new log message
EventLogger::SetCallback([&messages, &mtx](std::string message) {
// Store the message for later processing. Better not processing it in the event thread
std::unique_lock<std::mutex> lock(mtx);
messages.push_back(message);
});
// Other Speech SDK calls
// Stop logging by setting an empty callback
EventLogger::SetCallback();
}
При использовании пакета SDK для речи версии 1.43.0, механизм ведения журнала расширяется с новыми типами логгеров: File logger, Memory logger и Event logger.
File logger— это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве при работе с пакетом SDK "Речь".Memory logger— это решение для ведения журнала, в которое хранятся сообщения журнала в памяти. Он подходит для диагностики проблем, возникающих в течение короткого периода времени. Например, если вы используете распознаватель речи, возможно, потребуется сбросить журнал памяти по получении события, которое указывает, что распознавание было отменено из-за какой-то ошибки. Размер буфера памяти фиксирован в 2 МБ и не может быть изменен. Это "кольцевой" буфер, т. е. новые строки журнала заменяют самые старые в буфере.Event logger— это решение для ведения журнала, которое отправляет сообщения журнала обработчику событий, предоставленному разработчиком. Он подходит для диагностики проблем, как только некоторые новые строки журнала становятся доступными и нуждаются в дальнейшей обработке. Например, интеграция логов Speech SDK с вашей существующей системой сбора данных.
Средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий имеют механизм фильтрации только путем ведения журнала определенных строковых сообщений. Кроме того, эти логгеры являются процессно-ориентированными конструкциями. Это означает, что если (например), у вас есть несколько объектов распознавателя речи, работающих параллельно, существует один файл журнала, содержащий чередующиеся строки журналов со всех распознавателей. Вы не можете получить отдельный файловый журнал для каждого распознавателя. Аналогичным образом существует один буфер памяти, содержащий чередующиеся журналы со всех распознавателей, и вы можете зарегистрировать только один обработчик событий в качестве функции обратного вызова для получения чередуемых журналов от всех распознавателей. Вы не можете получить отдельный средство ведения журнала памяти для каждого распознавателя, и вы не можете зарегистрировать обработчик событий для каждого распознавателя.
File logger, memory logger and event logger Однако объект может сосуществовать в одном процессе или в том же распознавателе.
Samples
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.diagnostics.logging.EventLogger;
import com.microsoft.cognitiveservices.speech.diagnostics.logging.FileLogger;
import com.microsoft.cognitiveservices.speech.diagnostics.logging.MemoryLogger;
public class SpeechLoggingSamples {
public static void fileLoggerWithoutFilters()
{
FileLogger.start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger.stop();
}
public static void FileLoggerWithFilters()
{
String[] filters = { "YourFirstString", "YourSecondString" };
FileLogger.setFilters(filters);
FileLogger.start("LogfilePathAndName");
// Other Speech SDK calls
FileLogger.stop();
FileLogger.setFilters();
}
public static void memoryLoggerWithoutFilters()
{
MemoryLogger.start();
// Other Speech SDK calls
// At any time (whether logging is stopped) you can dump the traces in memory to a file
MemoryLogger.dump("LogfilePathAndName");
// Or dump to any object that is derived from java.io.Writer. For example, System.out
MemoryLogger.dump(System.out);
// Or dump to a list of strings
List<String> messages = MemoryLogger.dump();
MemoryLogger.stop();
}
public static void eventLoggerWithoutFilters()
{
final Object lockObject = new Object();
List<String> messages = new ArrayList<>();
// Register a callback that will get invoked by Speech SDK on every new log message
EventLogger.setCallback((message) -> {
// Store the message for later processing. Better not processing it in the event thread
synchronized (lockObject) {
messages.add(message);
}
});
// Other Speech SDK calls
// Stop logging by setting an empty callback
EventLogger.setCallback();
}
}
При использовании пакета SDK для речи версии 1.43.0, механизм ведения журнала расширяется с новыми типами логгеров: File logger, Memory logger и Event logger.
File logger— это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве при работе с пакетом SDK "Речь".Memory logger— это решение для ведения журнала, в которое хранятся сообщения журнала в памяти. Он подходит для диагностики проблем, возникающих в течение короткого периода времени. Например, если вы используете распознаватель речи, возможно, потребуется сбросить журнал памяти по получении события, которое указывает, что распознавание было отменено из-за какой-то ошибки. Размер буфера памяти фиксирован в 2 МБ и не может быть изменен. Это "кольцевой" буфер, т. е. новые строки журнала заменяют самые старые в буфере.Event logger— это решение для ведения журнала, которое отправляет сообщения журнала обработчику событий, предоставленному разработчиком. Он подходит для диагностики проблем, как только некоторые новые строки журнала становятся доступными и нуждаются в дальнейшей обработке. Например, интеграция логов Speech SDK с вашей существующей системой сбора данных.
Средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий имеют механизм фильтрации только путем ведения журнала определенных строковых сообщений. Кроме того, эти логгеры являются процессно-ориентированными конструкциями. Это означает, что если (например), у вас есть несколько объектов распознавателя речи, работающих параллельно, существует один файл журнала, содержащий чередующиеся строки журналов со всех распознавателей. Вы не можете получить отдельный файловый журнал для каждого распознавателя. Аналогичным образом существует один буфер памяти, содержащий чередующиеся журналы со всех распознавателей, и вы можете зарегистрировать только один обработчик событий в качестве функции обратного вызова для получения чередуемых журналов от всех распознавателей. Вы не можете получить отдельный средство ведения журнала памяти для каждого распознавателя, и вы не можете зарегистрировать обработчик событий для каждого распознавателя.
File logger, memory logger and event logger Однако объект может сосуществовать в одном процессе или в том же распознавателе.
Samples
- (void)fileLoggerWithoutFilters {
NSString *logFileName = @"speech_sdk.log";
NSString *logFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
stringByAppendingPathComponent:logFileName];
[SPXFileLogger start:logFile];
// Other Speech SDK calls
[SPXFileLogger stop];
}
- (void)fileLoggerWithFilters {
NSString *logFileName = @"speech_sdk.log";
NSString *logFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
stringByAppendingPathComponent:logFileName];
NSArray *filters = @[@"YourFirstString", @"YourSecondString"];
[SPXFileLogger setFilters:filters];
[SPXFileLogger start:logFile];
// Other Speech SDK calls
[SPXFileLogger stop];
[SPXFileLogger setFilters:nil];
}
- (void)memoryLoggerWithoutFilters {
NSString *logFileName = @"speech_sdk.log";
NSString *logFile = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
stringByAppendingPathComponent:logFileName];
[SPXMemoryLogger start];
// Other Speech SDK calls
// At any time (whether logging is stopped) you can dump the traces in memory to a file
[SPXMemoryLogger dumpToFile:logFile];
[SPXMemoryLogger stop];
}
- (void)eventLoggingWithoutFilters {
__block NSMutableArray *eventMsgs = [NSMutableArray array];
// Register a callback that will get invoked by Speech SDK on every new log message
[SPXEventLogger setCallback:^(NSString *message) {
@synchronized(self) {
[eventMsgs addObject:message];
}
}];
// Other Speech SDK calls
// Stop event logging
[SPXEventLogger setCallback:nil];
}
При использовании пакета SDK для речи версии 1.43.0, механизм ведения журнала расширяется с новыми типами логгеров: File logger, Memory logger и Event logger.
File logger— это самое простое решение для ведения журнала и подходит для диагностики большинства проблем на устройстве при работе с пакетом SDK "Речь".Memory logger— это решение для ведения журнала, в которое хранятся сообщения журнала в памяти. Он подходит для диагностики проблем, возникающих в течение короткого периода времени. Например, если вы используете распознаватель речи, возможно, потребуется сбросить журнал памяти по получении события, которое указывает, что распознавание было отменено из-за какой-то ошибки. Размер буфера памяти фиксирован в 2 МБ и не может быть изменен. Это "кольцевой" буфер, т. е. новые строки журнала заменяют самые старые в буфере.Event logger— это решение для ведения журнала, которое отправляет сообщения журнала обработчику событий, предоставленному разработчиком. Он подходит для диагностики проблем, как только некоторые новые строки журнала становятся доступными и нуждаются в дальнейшей обработке. Например, интеграция логов Speech SDK с вашей существующей системой сбора данных.
Средство ведения журнала файлов, средство ведения журнала памяти и средство ведения журнала событий имеют механизм фильтрации только путем ведения журнала определенных строковых сообщений. Кроме того, эти логгеры являются процессно-ориентированными конструкциями. Это означает, что если (например), у вас есть несколько объектов распознавателя речи, работающих параллельно, существует один файл журнала, содержащий чередующиеся строки журналов со всех распознавателей. Вы не можете получить отдельный файловый журнал для каждого распознавателя. Аналогичным образом существует один буфер памяти, содержащий чередующиеся журналы со всех распознавателей, и вы можете зарегистрировать только один обработчик событий в качестве функции обратного вызова для получения чередуемых журналов от всех распознавателей. Вы не можете получить отдельный средство ведения журнала памяти для каждого распознавателя, и вы не можете зарегистрировать обработчик событий для каждого распознавателя.
File logger, memory logger and event logger Однако объект может сосуществовать в одном процессе или в том же распознавателе.
Samples
import azure.cognitiveservices.speech as speechsdk
import azure.cognitiveservices.speech.diagnostics.logging as speechsdk_logging
def file_logger_without_filters():
speechsdk_logging.FileLogger.start("LogfilePathAndName")
# Other Speech SDK calls
speechsdk_logging.FileLogger.stop()
def file_logger_with_filters():
filters = { "YourFirstString", "YourSecondString" }
speechsdk_logging.FileLogger.set_filters(filters)
speechsdk_logging.FileLogger.start("LogfilePathAndName")
# Other Speech SDK calls
speechsdk_logging.FileLogger.stop()
speechsdk_logging.FileLogger.set_filters()
def memory_logger_without_filter():
speechsdk_logging.MemoryLogger.start()
#
# Other Speech SDK calls
#
# At any time (whether logging is stopped) you can dump the traces in memory to a file
speechsdk_logging.MemoryLogger.dump("LogfilePathAndName")
# Or dump to any object that is derived from IOBase. For example, sys.stdout
speechsdk_logging.MemoryLogger.dump_to_stream(sys.stdout)
# Or dump to a list of strings
messages = speechsdk_logging.MemoryLogger.dump_to_list()
speechsdk_logging.MemoryLogger.stop()
def event_logger_without_filter():
messages = []
lock = threading.Lock()
# Register a callback that will get invoked by Speech SDK on every new log message
def on_log(msg):
with lock:
# Store the message for later processing. Better not processing it in the event thread
messages.append(msg)
speechsdk_logging.EventLogger.set_callback(on_log)
#
# Other Speech SDK calls
#
# Stop logging by setting an empty callback
speechsdk_logging.EventLogger.set_callback()
JavaScript
Для JavaScript ведение журнала включено с помощью диагностики пакета SDK:
sdk.Diagnostics.SetLoggingLevel(sdk.LogLevel.Debug);
sdk.Diagnostics.SetLogOutputPath("LogfilePathAndName");
Расположения файлов журнала по платформе
При использовании FileLogger.Start() или MemoryLogger.Dump()укажите путь к файлу. Требования к пути зависят от платформы.
Для Windows или Linux файл журнала может находиться в любом пути, для которого у пользователя есть разрешение на запись. Разрешения на запись в местоположениях файловой системы в других операционных системах могут быть по умолчанию ограничены или запрещены.
Универсальная платформа Windows (UWP)
Приложения UWP должны размещать файлы журналов в одном из расположений данных приложения (локальное, перемещаемое или временное). Файл журнала можно создать в локальной папке приложения.
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile logFile = await storageFolder.CreateFileAsync("logfile.txt", CreationCollisionOption.ReplaceExisting);
FileLogger.Start(logFile.Path);
В приложении UWP для Unity файл журнала можно создать с помощью папки с постоянными путями к данным приложения следующим образом:
#if ENABLE_WINMD_SUPPORT
string logFile = Application.persistentDataPath + "/logFile.txt";
FileLogger.Start(logFile);
#endif
Дополнительные сведения о разрешениях на доступ к файлам в приложениях UWP см. в разделе Разрешения на доступ к файлам.
Android
Файл журнала можно сохранить во внутреннем хранилище, во внешнем хранилище или в каталоге кэша. Файлы, созданные во внутреннем хранилище или в каталоге кэша, являются частными для приложения. Рекомендуется создать файл журнала во внешнем хранилище.
File dir = context.getExternalFilesDir(null);
File logFile = new File(dir, "logfile.txt");
FileLogger.start(logFile.getAbsolutePath());
Код сохраняет файл журнала во внешнем хранилище в корневом каталоге конкретного приложения. Пользователь может получить доступ к файлу с помощью диспетчера файлов (обычно в Android/data/ApplicationName/logfile.txt). Файл удаляется при удалении приложения.
Кроме того, необходимо запросить разрешение WRITE_EXTERNAL_STORAGE в файле манифеста.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
В приложении Unity для Android файл журнала можно создать, используя папку постоянного пути к данным приложения следующим образом:
string logFile = Application.persistentDataPath + "/logFile.txt";
FileLogger.Start(logFile);
Кроме того, необходимо задать разрешение на запись в параметрах проигрывателя Unity для Android значение External (SDCard)". Журнал записывается в каталог, который можно получить с помощью инструмента, например AndroidStudio Device File Explorer. Точный путь к каталогу может отличаться между устройствами Android. Расположение обычно - это папка sdcard/Android/data/your-app-packagename/files.
Дополнительные сведения о хранилище данных и файлах для приложений Android см. в обзоре хранилища данных и файлов.
iOS
Доступны только каталоги в изолированной среде приложения. Файлы можно создавать в каталогах Documents, Library и TEMP. Файлы в каталоге документов можно сделать доступными для пользователя.
Если вы используете Objective-C в iOS, используйте следующий фрагмент кода, чтобы создать файл журнала в каталоге документов приложения:
NSString *filePath = [
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
stringByAppendingPathComponent:@"logfile.txt"];
[SPXFileLogger start:filePath];
Чтобы получить доступ к созданному файлу, добавьте следующие свойства в Info.plist список свойств приложения:
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
Если вы используете Swift в iOS, используйте следующий фрагмент кода, чтобы включить журналы:
let documentsDirectoryPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let documentsDirectoryPath = NSURL(string: documentsDirectoryPathString)!
let logFilePath = documentsDirectoryPath.appendingPathComponent("swift.log")
SPXFileLogger.start(logFilePath!.absoluteString)
Дополнительные сведения о файловой системе iOS см. в руководстве по программированию файловой системы.
Устаревший подход: установка свойства для объекта конфигурации
Вы также можете включить ведение журнала, задав Speech_LogFilename свойство для объекта конфигурации речи. Этот подход менее гибкий, чем использование статических классов логгеров.
Взяв SpeechConfig в качестве примера и предполагая, что вы создали экземпляр под названием speechConfig:
speechConfig.SetProperty(PropertyId.Speech_LogFilename, "LogfilePathAndName");
speechConfig.setProperty(PropertyId.Speech_LogFilename, "LogfilePathAndName");
speechConfig->SetProperty(PropertyId::Speech_LogFilename, "LogfilePathAndName");
speech_config.set_property(speechsdk.PropertyId.Speech_LogFilename, "LogfilePathAndName")
[speechConfig setPropertyTo:@"LogfilePathAndName" byId:SPXSpeechLogFilename];
import ("github.com/Microsoft/cognitive-services-speech-sdk-go/common")
speechConfig.SetProperty(common.SpeechLogFilename, "LogfilePathAndName")
Вы можете создать распознаватель из объекта конфигурации. Это позволяет ведение журнала для всех распознавателей.
Примечание.
Если вы создаёте SpeechSynthesizer из объекта конфигурации, это не включает ведение журнала. Если ведение журнала включено, вы также получаете диагностику из SpeechSynthesizer.
Чтобы получить рекомендации по пути к файлам для конкретной платформы, см. раздел "Местоположения файлов журналов по платформам". Те же требования к пути применяются при использовании подхода с использованием свойств.
Логирование с несколькими распознавателями
При использовании устаревшего метода работы с свойствами выходной путь файла журнала указывается как свойство конфигурации в объекте SDK SpeechRecognizer или другом объекте SDK. Однако ведение журнала ПАКЕТА SDK — это однопроцессное средство без концепции отдельных экземпляров. Его можно представить в виде конструктора SpeechRecognizer (или его аналога), неявно вызывающего статическую внутреннюю подпрограмму "Configure Global Logging" с данными свойств, доступными в соответствующем классе SpeechConfig.
Это означает, что невозможно настроить шесть параллельных распознавателей для одновременного вывода на шесть отдельных файлов. Вместо этого последний созданный распознаватель настроит глобальный экземпляр ведения журнала для вывода в файл, указанный в свойствах его конфигурации, и все журналы SDK выводятся в этот файл.
Это также означает, что время существования объекта, настроенного ведения журнала, не привязано к длительности ведения журнала. Ведение журнала не остановится в ответ на выпуск объекта ПАКЕТА SDK и будет продолжаться до тех пор, пока новая конфигурация ведения журнала не будет предоставлена. После запуска ведение журнала на уровне процесса можно остановить, задав путь к файлу журнала пустой строке при создании нового объекта.
Чтобы уменьшить потенциальную путаницу при настройке ведения журнала для нескольких экземпляров, может быть полезно абстрагировать управление ведением журнала из объектов, выполняющих реальную работу. Вот пример пары вспомогательных подпрограмм.
void EnableSpeechSdkLogging(const char* relativePath)
{
auto configForLogging = SpeechConfig::FromSubscription("unused_key", "unused_region");
configForLogging->SetProperty(PropertyId::Speech_LogFilename, relativePath);
auto emptyAudioConfig = AudioConfig::FromStreamInput(AudioInputStream::CreatePushStream());
auto temporaryRecognizer = SpeechRecognizer::FromConfig(configForLogging, emptyAudioConfig);
}
void DisableSpeechSdkLogging()
{
EnableSpeechSdkLogging("");
}