Dela via


Aktivera loggning i Speech SDK

Loggning till fil är en valfri funktion för Speech SDK. Under utveckling tillhandahåller loggning ytterligare information och diagnostik från Speech SDK:s kärnkomponenter. Det kan aktiveras genom att ange Speech_LogFilename egenskapen för ett talkonfigurationsobjekt till loggfilens plats och namn. Loggning hanteras av en statisk klass i Speech SDK:s interna bibliotek. Du kan aktivera loggning för alla Speech SDK-identifierare eller synthesizer-instanser. Alla instanser i samma process skriver loggposter till samma loggfil.

Exempel

Loggfilsnamnet anges för ett konfigurationsobjekt. SpeechConfig Ta exemplet och anta att du har skapat en instans med namnet 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")

Du kan skapa en identifierare från konfigurationsobjektet. Detta möjliggör loggning för alla igenkännare.

Kommentar

Om du skapar en SpeechSynthesizer från konfigurationsobjektet aktiveras inte loggning. Om loggning är aktiverat får du även diagnostik från SpeechSynthesizer.

JavaScript är ett undantag där loggningen är aktiverad via SDK-diagnostik enligt följande kodfragment:

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

Skapa en loggfil på olika plattformar

För Windows eller Linux kan loggfilen finnas på valfri sökväg som användaren har skrivbehörighet för. Skrivbehörigheter till filsystemplatser i andra operativsystem kan begränsas eller begränsas som standard.

Universal Windows Platform (UWP)

UWP-program måste placeras loggfiler på någon av programdataplatserna (lokal, roaming eller tillfällig). En loggfil kan skapas i den lokala programmappen:

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

I ett Unity UWP-program kan en loggfil skapas med hjälp av mappen för programbeständig datasökväg på följande sätt:

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

Mer information om filåtkomstbehörigheter i UWP-program finns i Filåtkomstbehörigheter.

Android

Du kan spara en loggfil till antingen intern lagring, extern lagring eller cachekatalogen. Filer som skapas i den interna lagrings- eller cachekatalogen är privata för programmet. Det är bättre att skapa en loggfil i extern lagring.

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

Koden ovan sparar en loggfil till den externa lagringen i roten för en programspecifik katalog. En användare kan komma åt filen med filhanteraren (vanligtvis i Android/data/ApplicationName/logfile.txt). Filen tas bort när programmet avinstalleras.

Du måste också begära WRITE_EXTERNAL_STORAGE behörighet i manifestfilen:

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

I ett Unity Android-program kan loggfilen skapas med hjälp av mappen för programbeständig datasökväg på följande sätt:

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

Dessutom måste du också ange skrivbehörighet i Unity Player-inställningarna för Android till "Externt (SDCard)". Loggen skrivs till en katalog som du kan hämta med hjälp av ett verktyg som AndroidStudio Device Utforskaren. Den exakta katalogsökvägen kan variera mellan Android-enheter. Platsen är vanligtvis katalogen sdcard/Android/data/your-app-packagename/files .

Mer information om data och fillagring för Android-program finns här.

iOS

Endast kataloger i programmets sandbox-miljö är tillgängliga. Filer kan skapas i dokument, bibliotek och temporära kataloger. Filer i dokumentkatalogen kan göras tillgängliga för en användare.

Om du använder Objective-C på iOS använder du följande kodfragment för att skapa en loggfil i programdokumentkatalogen:

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

Om du vill komma åt en skapad fil lägger du till egenskaperna nedan i Info.plist egenskapslistan för programmet:

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

Om du använder Swift i iOS använder du följande kodfragment för att aktivera loggar:

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)

Mer information om iOS-filsystemet finns här.

Loggning med flera identifierare

Även om en loggfils utdatasökväg anges som en konfigurationsegenskap i ett SpeechRecognizer eller annat SDK-objekt, är SDK-loggning en enkel processomfattande anläggning utan koncept för enskilda instanser. Du kan se detta som konstruktorn (eller liknande) som implicit anropar en statisk och intern "Konfigurera global loggning"-rutin med de egenskapsdata som SpeechRecognizer är tillgängliga i motsvarande SpeechConfig.

Det innebär att du till exempel inte kan konfigurera sex parallella identifierare för utdata samtidigt till sex separata filer. I stället konfigurerar den senaste identifieraren som skapats den globala loggningsinstansen för utdata till filen som anges i dess konfigurationsegenskaper och all SDK-loggning skickas till filen.

Det innebär också att livslängden för objektet som konfigurerade loggningen inte är kopplad till loggningens varaktighet. Loggning stoppas inte som svar på lanseringen av ett SDK-objekt och fortsätter så länge ingen ny loggningskonfiguration har angetts. När du har startat kan processomfattande loggning stoppas genom att ange loggfilsökvägen till en tom sträng när du skapar ett nytt objekt.

För att minska den potentiella förvirringen när du konfigurerar loggning för flera instanser kan det vara användbart att abstrahera kontrollen över loggning från objekt som utför verkligt arbete. Ett exempelpar med hjälprutiner:

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

Nästa steg