Aktifkan pengelogan di Speech SDK

Pengelogan ke file adalah fitur opsional untuk Speech SDK. Selama pengembangan, pengelogan memberikan informasi dan diagnostik tambahan dari komponen inti Speech SDK. Ini dapat diaktifkan dengan mengatur Speech_LogFilename properti pada objek konfigurasi ucapan ke lokasi dan nama file log. Pengelogan ditangani oleh kelas statis di pustaka asli Speech SDK. Anda dapat mengaktifkan pengelogan untuk instans recognizer atau synthesizer Speech SDK apa pun. Semua instans dalam proses yang sama menulis entri log ke file log yang sama.

Sampel

Nama file log ditentukan pada objek konfigurasi. SpeechConfig Mengambil sebagai contoh dan berasumsi bahwa Anda membuat instans yang disebut 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")

Anda dapat membuat pengenal dari objek konfigurasi. Ini memungkinkan pengelogan untuk semua pengenal.

Catatan

Jika Anda membuat SpeechSynthesizer dari objek konfigurasi, itu tidak akan mengaktifkan pengelogan. Jika pengelogan diaktifkan, Anda juga akan menerima diagnostik dari SpeechSynthesizer.

JavaScript adalah pengecualian di mana pengelogan diaktifkan melalui diagnostik SDK seperti yang ditunjukkan dalam cuplikan kode berikut:

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

Membuat file log pada platform yang berbeda

Untuk Windows atau Linux, file log dapat berada di jalur mana pun yang memiliki izin menulis pengguna. Izin tulis ke lokasi sistem file di sistem operasi lain mungkin dibatasi atau dibatasi secara default.

Universal Windows Platform (UWP)

Aplikasi UWP perlu menempatkan file log di salah satu lokasi data aplikasi (lokal, roaming, atau sementara). File log bisa dibuat di folder aplikasi lokal:

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

Dalam aplikasi Unity UWP, file log dapat dibuat menggunakan folder jalur data persisten aplikasi sebagai berikut:

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

Untuk informasi selengkapnya tentang izin akses file di aplikasi UWP, lihat Izin akses file.

Android

Anda dapat menyimpan file log ke penyimpanan internal, penyimpanan eksternal, atau direktori cache. File yang dibuat di penyimpanan internal atau direktori cache bersifat privat untuk aplikasi. Lebih baik membuat file log di penyimpanan eksternal.

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

Kode di atas akan menyimpan file log ke penyimpanan eksternal di akar direktori khusus aplikasi. Pengguna dapat mengakses file dengan manajer file (biasanya di Android/data/ApplicationName/logfile.txt). File dihapus ketika aplikasi dihapus instalasinya.

Anda juga perlu meminta izin WRITE_EXTERNAL_STORAGE dalam file manifes:

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

Dalam aplikasi Unity Android, file log dapat dibuat menggunakan folder jalur data persisten aplikasi sebagai berikut:

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

Selain itu, Anda juga perlu mengatur izin tulis di pengaturan Unity Player untuk Android ke "Eksternal (SDCard)". Log ditulis ke direktori yang bisa Anda dapatkan dengan menggunakan alat seperti AndroidStudio Device File Explorer. Jalur direktori yang tepat dapat bervariasi di antara perangkat Android. Lokasi biasanya sdcard/Android/data/your-app-packagename/files adalah direktori.

Selengkapnya tentang penyimpanan data dan file untuk aplikasi Android tersedia di sini.

iOS

Hanya direktori di dalam sandbox aplikasi yang dapat diakses. File dapat dibuat di direktori dokumen, pustaka, dan sementara. File di direktori dokumen dapat disediakan untuk pengguna.

Jika Anda menggunakan Objective-C di iOS, gunakan cuplikan kode berikut untuk membuat file log di direktori dokumen aplikasi:

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

Untuk mengakses file yang dibuat, tambahkan properti di bawah ini ke daftar properti Info.plist aplikasi:

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

Jika Anda menggunakan Swift di iOS, gunakan cuplikan kode berikut untuk mengaktifkan log:

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)

Selengkapnya tentang Sistem File iOS tersedia di sini.

Pengelogan dengan banyak recognizer

Meskipun jalur output file log ditentukan sebagai properti konfigurasi ke dalam SpeechRecognizer atau objek SDK lainnya, pengelogan SDK adalah fasilitas tingkat proses tunggal tanpa konsep instans individual. Anda dapat menganggap ini sebagai SpeechRecognizerkonstruktor (atau serupa) yang secara implisit memanggil rutin "Konfigurasi Global Logging" statis dan internal dengan data properti yang tersedia di file yang samaSpeechConfig.

Ini berarti Anda tidak dapat, sebagai contoh, mengonfigurasi enam pengenal paralel untuk menghasilkan secara bersamaan ke enam file terpisah. Sebagai gantinya, recognizer terbaru yang dibuat akan mengonfigurasi instans pengelogan global untuk menghasilkan ke file yang ditentukan dalam properti konfigurasinya dan semua pengelogan SDK dipancarkan ke file tersebut.

Ini juga berarti bahwa masa pakai objek yang dikonfigurasi pengelogan tidak terkait dengan durasi pengelogan. Pengelogan tidak akan berhenti sebagai respons terhadap rilis objek SDK dan akan dilanjutkan selama tidak ada konfigurasi pengelogan baru yang disediakan. Setelah dimulai, pengelogan di seluruh proses dapat dihentikan dengan mengatur jalur file log ke string kosong saat membuat objek baru.

Untuk mengurangi potensi kebingungan saat mengonfigurasi pengelogan untuk beberapa instans, mungkin berguna untuk kontrol abstrak pengelogan dari objek yang melakukan pekerjaan nyata. Sepasang contoh rutinitas pembantu:

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

Langkah berikutnya