Povolení protokolování v sadě Speech SDK

Protokolování do souboru je volitelnou funkcí sady Speech SDK. Během vývoje poskytuje protokolování další informace a diagnostiku ze základních komponent sady Speech SDK. Tuto vlastnost lze povolit nastavením Speech_LogFilename vlastnosti objektu konfigurace řeči na umístění a název souboru protokolu. Protokolování zpracovává statická třída v nativní knihovně sady Speech SDK. Protokolování můžete zapnout pro jakoukoli instanci rozpoznávání nebo syntetizátoru sady Speech SDK. Všechny instance ve stejném procesu zapisují položky protokolu do stejného souboru protokolu.

Vzorek

Název souboru protokolu se zadává v objektu konfigurace. SpeechConfig Jako příklad a za předpokladu, že jste vytvořili instanci s názvem 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")

Rozpoznávání můžete vytvořit z objektu konfigurace. To umožňuje protokolování pro všechny rozpoznávatele.

Poznámka:

Pokud vytvoříte objekt SpeechSynthesizer konfigurace, nepovolí se protokolování. Pokud je protokolování povolené, obdržíte také diagnostiku z nástroje SpeechSynthesizer.

JavaScript je výjimka, kdy je protokolování povolené prostřednictvím diagnostiky sady SDK, jak je znázorněno v následujícím fragmentu kódu:

sdk.Diagnostics.SetLoggingLevel(sdk.LogLevel.Debug);
sdk.Diagnostics.SetLogOutputPath("LogfilePathAndName");

Vytvoření souboru protokolu na různých platformách

V případě Windows nebo Linuxu může být soubor protokolu v libovolné cestě, ke které má uživatel oprávnění k zápisu. Oprávnění k zápisu do umístění systému souborů v jiných operačních systémech můžou být ve výchozím nastavení omezená nebo omezená.

Univerzální platforma Windows (UPW)

Aplikace UPW musí být soubory protokolu na jednom z umístění dat aplikace (místní, roaming nebo dočasný). Soubor protokolu lze vytvořit ve složce místní aplikace:

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile logFile = await storageFolder.CreateFileAsync("logfile.txt", CreationCollisionOption.ReplaceExisting);
speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile.Path);

V aplikaci Unity pro UPW lze soubor protokolu vytvořit pomocí složky trvalé cesty k datům aplikace následujícím způsobem:

#if ENABLE_WINMD_SUPPORT
    string logFile = Application.persistentDataPath + "/logFile.txt";
    speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile);
#endif

Další informace o oprávněních pro přístup k souborům v aplikacích UPW najdete v tématu Přístupová oprávnění k souborům.

Android

Soubor protokolu můžete uložit do interního úložiště, externího úložiště nebo adresáře mezipaměti. Soubory vytvořené v interním úložišti nebo adresáři mezipaměti jsou pro aplikaci soukromé. Je vhodnější vytvořit soubor protokolu v externím úložišti.

File dir = context.getExternalFilesDir(null);
File logFile = new File(dir, "logfile.txt");
speechConfig.setProperty(PropertyId.Speech_LogFilename, logFile.getAbsolutePath());

Výše uvedený kód uloží soubor protokolu do externího úložiště v kořenovém adresáři specifickém pro aplikaci. Uživatel má přístup k souboru pomocí správce souborů (obvykle v Android/data/ApplicationName/logfile.txt). Soubor se odstraní při odinstalaci aplikace.

Musíte také požádat o WRITE_EXTERNAL_STORAGE oprávnění v souboru manifestu:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
  ...
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  ...
</manifest>

V aplikaci Unity pro Android lze soubor protokolu vytvořit pomocí složky trvalé cesty k datům aplikace následujícím způsobem:

string logFile = Application.persistentDataPath + "/logFile.txt";
speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile);

Kromě toho musíte také nastavit oprávnění k zápisu v nastavení Unity Playeru pro Android na "Externí (SDCard)". Protokol se zapíše do adresáře, který můžete získat pomocí nástroje, jako je Průzkumník souborů zařízení AndroidStudio. Přesná cesta k adresáři se může mezi zařízeními s Androidem lišit. Umístění je obvykle sdcard/Android/data/your-app-packagename/files adresář.

Další informace o úložišti dat a souborů pro aplikace pro Android najdete tady.

iOS

Přístupná jsou pouze adresáře uvnitř sandboxu aplikace. Soubory lze vytvářet v dokumentech, knihovnách a dočasných adresářích. Soubory v adresáři dokumentů lze zpřístupnit uživateli.

Pokud v iOSu používáte Objective-C, vytvořte v adresáři dokumentu aplikace soubor protokolu pomocí následujícího fragmentu kódu:

NSString *filePath = [
  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
    stringByAppendingPathComponent:@"logfile.txt"];
[speechConfig setPropertyTo:filePath byId:SPXSpeechLogFilename];

Pokud chcete získat přístup k vytvořenému souboru, přidejte do seznamu vlastností aplikace následující vlastnosti Info.plist :

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

Pokud používáte Swift v iOSu, povolte protokoly pomocí následujícího fragmentu kódu:

let documentsDirectoryPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let documentsDirectoryPath = NSURL(string: documentsDirectoryPathString)!
let logFilePath = documentsDirectoryPath.appendingPathComponent("swift.log")
self.speechConfig!.setPropertyTo(logFilePath!.absoluteString, by: SPXPropertyId.speechLogFilename)

Další informace o systému souborů iOS najdete tady.

Protokolování s využitím více rozpoznávatelů

Přestože je výstupní cesta k souboru protokolu zadaná jako vlastnost konfigurace do objektu SpeechRecognizer nebo jiného objektu sady SDK, protokolování sady SDK je jednoúčelové, procesové zařízení bez konceptu jednotlivých instancí. Můžete si to představit jako SpeechRecognizer konstruktor (nebo podobný) implicitně volání statické a interní rutiny "Konfigurovat globální protokolování" s daty vlastností, které jsou k dispozici v odpovídající SpeechConfig.

To znamená, že například nemůžete nakonfigurovat šest paralelních rozpoznávatelů pro výstup současně na šest samostatných souborů. Místo toho nejnovější vytvořený nástroj pro rozpoznávání nakonfiguruje globální instanci protokolování tak, aby výstupovala do souboru zadaného ve vlastnostech konfigurace a veškeré protokolování sady SDK se do daného souboru vygeneruje.

To také znamená, že životnost objektu, který nakonfiguroval protokolování, není vázána na dobu trvání protokolování. Protokolování se nezastaví v reakci na vydání objektu sady SDK a bude pokračovat, dokud nebude k dispozici žádná nová konfigurace protokolování. Po spuštění lze protokolování na úrovni celého procesu zastavit nastavením cesty k souboru protokolu na prázdný řetězec při vytváření nového objektu.

Chcete-li snížit potenciální nejasnosti při konfiguraci protokolování pro více instancí, může být užitečné abstrahovat kontrolu nad protokolováním z objektů provádějících skutečnou práci. Příklad páru pomocných rutin:

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("");
}

Další kroky