Logboekregistratie inschakelen in de Speech-SDK
Logboekregistratie in een bestand is een optionele functie voor de Speech-SDK. Tijdens de ontwikkeling biedt logboekregistratie aanvullende informatie en diagnostische gegevens van de belangrijkste onderdelen van de Speech-SDK. Deze kan worden ingeschakeld door de Speech_LogFilename
eigenschap in te stellen op een spraakconfiguratieobject op de locatie en naam van het logboekbestand. Logboekregistratie wordt verwerkt door een statische klasse in de systeemeigen bibliotheek van de Speech SDK. U kunt logboekregistratie inschakelen voor elk spraak-SDK-herkenner- of synthesizerexemplaren. Alle exemplaren in hetzelfde proces schrijven logboekvermeldingen naar hetzelfde logboekbestand.
Voorbeeld
De naam van het logboekbestand wordt opgegeven voor een configuratieobject. Als u het voorbeeld gebruikt en ervan uitgaande dat u een exemplaar hebt gemaakt met de SpeechConfig
naam 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")
U kunt een recognizer maken op basis van het configuratieobject. Hiermee schakelt u logboekregistratie in voor alle recognizers.
Notitie
Als u een SpeechSynthesizer
van het configuratieobject maakt, wordt logboekregistratie niet ingeschakeld. Als logboekregistratie is ingeschakeld, ontvangt u ook diagnostische gegevens van de SpeechSynthesizer
.
JavaScript is een uitzondering waarbij logboekregistratie is ingeschakeld via SDK Diagnostics, zoals wordt weergegeven in het volgende codefragment:
sdk.Diagnostics.SetLoggingLevel(sdk.LogLevel.Debug);
sdk.Diagnostics.SetLogOutputPath("LogfilePathAndName");
Een logboekbestand maken op verschillende platforms
Voor Windows of Linux kan het logboekbestand zich in elk pad bevinden waarvoor de gebruiker schrijfmachtigingen heeft. Schrijfmachtigingen voor bestandssysteemlocaties in andere besturingssystemen kunnen standaard worden beperkt of beperkt.
Universal Windows Platform (UWP)
UWP-toepassingen moeten logboekbestanden in een van de locaties van toepassingsgegevens plaatsen (lokaal, roaming of tijdelijk). Er kan een logboekbestand worden gemaakt in de lokale toepassingsmap:
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile logFile = await storageFolder.CreateFileAsync("logfile.txt", CreationCollisionOption.ReplaceExisting);
speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile.Path);
In een Unity UWP-toepassing kan als volgt een logboekbestand worden gemaakt met behulp van de map permanent gegevenspad van de toepassing:
#if ENABLE_WINMD_SUPPORT
string logFile = Application.persistentDataPath + "/logFile.txt";
speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile);
#endif
Zie Machtigingen voor bestandstoegang in UWP-toepassingen voor meer informatie over machtigingen voor bestandstoegang.
Android
U kunt een logboekbestand opslaan in interne opslag, externe opslag of de cachemap. Bestanden die zijn gemaakt in de interne opslag of de cachemap, zijn privé voor de toepassing. Het is raadzaam om een logboekbestand te maken in externe opslag.
File dir = context.getExternalFilesDir(null);
File logFile = new File(dir, "logfile.txt");
speechConfig.setProperty(PropertyId.Speech_LogFilename, logFile.getAbsolutePath());
Met de bovenstaande code wordt een logboekbestand opgeslagen in de externe opslag in de hoofdmap van een toepassingsspecifieke map. Een gebruiker heeft toegang tot het bestand met bestandsbeheer (meestal in Android/data/ApplicationName/logfile.txt
). Het bestand wordt verwijderd wanneer de toepassing wordt verwijderd.
U moet ook toestemming aanvragen WRITE_EXTERNAL_STORAGE
in het manifestbestand:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
In een Unity Android-toepassing kan het logboekbestand als volgt worden gemaakt met behulp van de map permanent gegevenspad van de toepassing:
string logFile = Application.persistentDataPath + "/logFile.txt";
speechConfig.SetProperty(PropertyId.Speech_LogFilename, logFile);
Daarnaast moet u ook schrijfmachtigingen instellen in uw Unity Player-instellingen voor Android op 'External (SDCard)'. Het logboek wordt geschreven naar een map die u kunt ophalen met behulp van een hulpprogramma zoals AndroidStudio Device Bestandenverkenner. Het exacte mappad kan variëren tussen Android-apparaten. De locatie is doorgaans de sdcard/Android/data/your-app-packagename/files
map.
Meer informatie over gegevens en bestandsopslag voor Android-toepassingen is hier beschikbaar.
iOS
Alleen mappen in de sandbox van de toepassing zijn toegankelijk. Bestanden kunnen worden gemaakt in de mappen documenten, bibliotheken en tijdelijke mappen. Bestanden in de map documenten kunnen beschikbaar worden gesteld aan een gebruiker.
Als u Objective-C in iOS gebruikt, gebruikt u het volgende codefragment om een logboekbestand te maken in de map met toepassingsdocument:
NSString *filePath = [
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
stringByAppendingPathComponent:@"logfile.txt"];
[speechConfig setPropertyTo:filePath byId:SPXSpeechLogFilename];
Als u toegang wilt krijgen tot een gemaakt bestand, voegt u de onderstaande eigenschappen toe aan de Info.plist
eigenschappenlijst van de toepassing:
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
Als u Swift op iOS gebruikt, gebruikt u het volgende codefragment om logboeken in te schakelen:
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)
Meer informatie over het iOS-bestandssysteem is hier beschikbaar.
Logboekregistratie met meerdere recognizers
Hoewel een uitvoerpad voor logboekbestanden is opgegeven als een configuratie-eigenschap in een SpeechRecognizer
of ander SDK-object, is SDK-logboekregistratie een singleton, procesbrede faciliteit zonder concept van afzonderlijke exemplaren. U kunt dit beschouwen als de SpeechRecognizer
constructor (of vergelijkbaar) die impliciet een statische en interne routine 'Globale logboekregistratie configureren' aanroept met de eigenschapsgegevens die beschikbaar zijn in de bijbehorende SpeechConfig
.
Dit betekent dat u, als voorbeeld, zes parallelle recognizers niet kunt configureren om tegelijkertijd naar zes afzonderlijke bestanden te worden uitgevoerd. In plaats daarvan configureert de meest recente recognizer het globale logboekregistratie-exemplaar voor uitvoer naar het bestand dat is opgegeven in de configuratie-eigenschappen en wordt alle SDK-logboekregistratie naar dat bestand verzonden.
Dit betekent ook dat de levensduur van het object dat logboekregistratie heeft geconfigureerd, niet is gekoppeld aan de duur van de logboekregistratie. Logboekregistratie stopt niet als reactie op de release van een SDK-object en blijft zolang er geen nieuwe configuratie voor logboekregistratie is opgegeven. Zodra het proces is gestart, kan logboekregistratie worden gestopt door het pad naar het logboekbestand in te stellen op een lege tekenreeks bij het maken van een nieuw object.
Om potentiële verwarring bij het configureren van logboekregistratie voor meerdere exemplaren te verminderen, kan het handig zijn om het beheer van logboekregistratie van objecten die echt werken te abstraheren. Een voorbeeld van helperroutines:
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("");
}