Aracılığıyla paylaş


Konuşma SDK'sında günlüğü etkinleştirme

Dosyaya günlük kaydı, Konuşma SDK'sının isteğe bağlı bir özelliğidir. Geliştirme sırasında günlük, Konuşma SDK'sının temel bileşenlerinden ek bilgiler ve tanılamalar sağlar. Konuşma yapılandırma nesnesinde özelliği günlük dosyasının Speech_LogFilename konumuna ve adına ayarlanarak etkinleştirilebilir. Günlük, Konuşma SDK'sı'nın yerel kitaplığındaki statik bir sınıf tarafından işlenir. Herhangi bir Konuşma SDK'sı tanıyıcısı veya sentezleyici örneği için günlüğe kaydetmeyi açabilirsiniz. Aynı işlemdeki tüm örnekler, günlük girdilerini aynı günlük dosyasına yazar.

Örnek

Günlük dosyası adı bir yapılandırma nesnesinde belirtilir. SpeechConfig örnek olarak almak ve adlı speechConfigbir örnek oluşturduğunuzu varsayarsak:

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")

Yapılandırma nesnesinden bir tanıyıcı oluşturabilirsiniz. Bu, tüm tanıyıcılar için günlüğe kaydetmeyi etkinleştirir.

Not

Yapılandırma nesnesinden bir SpeechSynthesizer oluşturursanız, günlüğe kaydetmeyi etkinleştirmez. Yine de günlük etkinleştirildiyse, tanılamayı 'dan SpeechSynthesizerda alırsınız.

JavaScript, aşağıdaki kod parçacığında gösterildiği gibi SDK tanılaması aracılığıyla günlüğe kaydetmenin etkinleştirildiği bir özel durumdur:

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

Farklı platformlarda günlük dosyası oluşturma

Windows veya Linux için günlük dosyası, kullanıcının yazma iznine sahip olduğu herhangi bir yolda olabilir. Diğer işletim sistemlerindeki dosya sistemi konumlarına yazma izinleri varsayılan olarak sınırlı veya kısıtlanmış olabilir.

Evrensel Windows Platformu (UWP)

UWP uygulamalarının günlük dosyalarını uygulama veri konumlarından birine (yerel, dolaşım veya geçici) yerleştiriyor olması gerekir. Yerel uygulama klasöründe bir günlük dosyası oluşturulabilir:

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

Unity UWP uygulamasında, uygulama kalıcı veri yolu klasörü kullanılarak aşağıdaki gibi bir günlük dosyası oluşturulabilir:

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

UWP uygulamalarında dosya erişim izinleri hakkında daha fazla bilgi için bkz . Dosya erişim izinleri.

Android

Günlük dosyasını iç depolama alanına, dış depolama alanına veya önbellek dizinine kaydedebilirsiniz. İç depolama veya önbellek dizininde oluşturulan dosyalar uygulamaya özeldir. Dış depolamada günlük dosyası oluşturmak tercih edilir.

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

Yukarıdaki kod, bir günlük dosyasını uygulamaya özgü dizinin kökündeki dış depolama alanına kaydeder. Kullanıcı dosya yöneticisiyle (genellikle içinde Android/data/ApplicationName/logfile.txt) dosyaya erişebilir. Uygulama kaldırıldığında dosya silinir.

Bildirim dosyasında da izin istemeniz WRITE_EXTERNAL_STORAGE gerekir:

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

Unity Android uygulamasında günlük dosyası, uygulama kalıcı veri yolu klasörü kullanılarak aşağıdaki gibi oluşturulabilir:

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

Ayrıca, Android için Unity Player ayarlarınızda yazma iznini de "Dış (SDCard)" olarak ayarlamanız gerekir. Günlük, AndroidStudio Device Dosya Gezgini gibi bir araç kullanarak alabileceğiniz bir dizine yazılır. Tam dizin yolu Android cihazlar arasında farklılık gösterebilir. Konum genellikle sdcard/Android/data/your-app-packagename/files dizindir.

Android uygulamaları için veri ve dosya depolama hakkında daha fazla bilgi için buraya bakın.

iOS

Yalnızca uygulama korumalı alanı içindeki dizinlere erişilebilir. Dosyalar belgelerde, kitaplıkta ve geçici dizinlerde oluşturulabilir. Belgeler dizinindeki dosyalar bir kullanıcının kullanımına sunulabiliyor.

iOS'ta Objective-C kullanıyorsanız, uygulama belgesi dizininde bir günlük dosyası oluşturmak için aşağıdaki kod parçacığını kullanın:

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

Oluşturulan bir dosyaya erişmek için aşağıdaki özellikleri Info.plist uygulamanın özellik listesine ekleyin:

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

iOS'ta Swift kullanıyorsanız günlükleri etkinleştirmek için aşağıdaki kod parçacığını kullanın:

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)

iOS Dosya Sistemi hakkında daha fazla bilgi için buraya bakın.

Birden çok tanıyıcı ile günlüğe kaydetme

Günlük dosyası çıkış yolu bir veya başka bir SpeechRecognizer SDK nesnesine yapılandırma özelliği olarak belirtilse de, SDK günlüğü tek tek örnekler kavramı olmayan tekil, işlem genelinde bir tesistir. Bunu, ilgili SpeechConfigiçinde bulunan özellik verileriyle statik ve iç "Genel Günlüğü Yapılandırma" yordamını örtük olarak çağıran oluşturucu (veya benzer) olarak SpeechRecognizer düşünebilirsiniz.

Başka bir deyişle, örnek olarak altı paralel tanıyıcıyı aynı anda altı ayrı dosyaya çıkış olarak yapılandıramazsınız. Bunun yerine, oluşturulan en son tanıyıcı, genel günlük örneğini yapılandırma özelliklerinde belirtilen dosyaya çıkış yapacak şekilde yapılandırır ve tüm SDK günlüğü bu dosyaya yayılır.

Bu, günlüğe kaydetmeyi yapılandıran nesnenin ömrünün günlüğe kaydetme süresine bağlı olmadığı anlamına da gelir. Günlük, SDK nesnesinin yayımlanmasına yanıt olarak durmaz ve yeni günlük yapılandırması sağlanmayan sürece devam eder. Başlatıldıktan sonra, yeni bir nesne oluşturulurken günlük dosyası yolu boş bir dizeye ayarlanarak işlem genelinde günlük kaydı durdurulabilir.

Birden çok örnek için günlüğe kaydetmeyi yapılandırırken olası karışıklığı azaltmak için, gerçek iş yapan nesnelerden günlük kaydının soyut denetiminin yapılması yararlı olabilir. Örnek bir yardımcı yordam çifti:

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

Sonraki adımlar