Share via


Speech SDK에서 로깅 사용

파일에 로깅은 Speech SDK에 대한 선택적 기능입니다. 개발 중에 로깅은 Speech SDK의 핵심 구성 요소에서 추가 정보 및 진단을 제공합니다. 음성 구성 개체의 Speech_LogFilename 속성을 로그 파일의 위치 및 이름으로 설정하여 사용하도록 설정할 수 있습니다. 로깅은 Speech SDK의 네이티브 라이브러리에서 정적 클래스에 의해 처리됩니다. Speech SDK 인식기 또는 신시사이저 인스턴스에 대한 로깅을 설정할 수 있습니다. 동일한 프로세스의 모든 인스턴스는 로그 항목을 동일한 로그 파일에 씁니다.

샘플

로그 파일 이름은 구성 개체에 지정됩니다. SpeechConfig 예를 들어 다음과 같은 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")

구성 개체에서 인식기를 만들 수 있습니다. 이렇게 하면 모든 인식자에 대한 로깅이 가능합니다.

참고 항목

구성 개체에서 만든 SpeechSynthesizer 경우 로깅을 사용하도록 설정하지 않습니다. 하지만 로깅을 사용하도록 설정하면 .에서 SpeechSynthesizer진단 수신됩니다.

JavaScript는 다음 코드 조각과 같이 SDK 진단 통해 로깅을 사용하도록 설정하는 예외입니다.

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

다른 플랫폼에서 로그 파일 만들기

Windows 또는 Linux의 경우 로그 파일은 사용자가 쓰기 권한이 있는 모든 경로에 있을 수 있습니다. 다른 운영 체제의 파일 시스템 위치에 대한 쓰기 권한은 기본적으로 제한되거나 제한될 수 있습니다.

UWP(유니버설 Windows 플랫폼)

UWP 애플리케이션은 애플리케이션 데이터 위치(로컬, 로밍 또는 임시) 중 하나에 로그 파일을 배치해야 합니다. 로그 파일은 로컬 애플리케이션 폴더에 만들 수 있습니다.

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

Unity UWP 애플리케이션 내에서 다음과 같이 애플리케이션 영구 데이터 경로 폴더를 사용하여 로그 파일을 만들 수 있습니다.

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

UWP 애플리케이션의 파일 액세스 권한에 대한 자세한 내용은 파일 액세스 권한을 참조하세요.

Android

내부 스토리지, 외부 스토리지 또는 캐시 디렉터리에 로그 파일을 저장할 수 있습니다. 내부 스토리지 또는 캐시 디렉터리에서 만든 파일은 애플리케이션에 비공개입니다. 외부 스토리지에 로그 파일을 만드는 것이 좋습니다.

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

위의 코드는 애플리케이션별 디렉터리의 루트에 있는 외부 스토리지에 로그 파일을 저장합니다. 사용자는 파일 관리자(일반적으로 )를 사용하여 파일에 액세스할 수 있습니다 Android/data/ApplicationName/logfile.txt. 애플리케이션을 제거하면 파일이 삭제됩니다.

또한 매니페스트 파일에서 권한을 요청 WRITE_EXTERNAL_STORAGE 해야 합니다.

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

Unity Android 애플리케이션 내에서 다음과 같이 애플리케이션 영구 데이터 경로 폴더를 사용하여 로그 파일을 만들 수 있습니다.

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

또한 Android의 Unity Player 설정에서 쓰기 권한을 "외부(SDCard)"로 설정해야 합니다. 로그는 AndroidStudio 디바이스 파일 탐색기 같은 도구를 사용하여 가져올 수 있는 디렉터리에 기록됩니다. 정확한 디렉터리 경로는 Android 디바이스마다 다를 수 있습니다. 위치는 일반적으로 sdcard/Android/data/your-app-packagename/files 디렉터리입니다.

Android 애플리케이션에 대한 데이터 및 파일 스토리지에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

iOS

애플리케이션 샌드박스 내의 디렉터리만 액세스할 수 있습니다. 파일은 문서, 라이브러리 및 임시 디렉터리에서 만들 수 있습니다. 사용자가 문서 디렉터리에 있는 파일을 사용할 수 있습니다.

iOS에서 Objective-C를 사용하는 경우 다음 코드 조각을 사용하여 애플리케이션 문서 디렉터리에 로그 파일을 만듭니다.

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

만든 파일에 액세스하려면 애플리케이션의 속성 목록에 아래 속성을 Info.plist 추가합니다.

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

iOS에서 Swift를 사용하는 경우 다음 코드 조각을 사용하여 로그를 사용하도록 설정합니다.

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 파일 시스템에 대한 자세한 내용은 여기를 참조하세요.

여러 인식기를 사용하여 로깅

로그 파일 출력 경로는 구성 속성 또는 다른 SDK 개체로 SpeechRecognizer 지정되지만 SDK 로깅은 개별 인스턴스의 개념이 없는 프로세스 전체의 단일 기능입니다. 이를 SpeechRecognizer 해당 속성 데이터를 사용하여 정적 및 내부 "전역 로깅 구성" 루틴을 암시적으로 호출하는 생성자(또는 이와 유사)라고 생각할 수 있습니다 SpeechConfig.

즉, 예를 들어 6개의 병렬 인식기를 구성하여 6개의 개별 파일에 동시에 출력할 수 없습니다. 대신 생성된 최신 인식기는 구성 속성에 지정된 파일에 출력하도록 전역 로깅 인스턴스를 구성하고 모든 SDK 로깅을 해당 파일로 내보냅니다.

이는 로깅을 구성한 개체의 수명이 로깅 기간에 연결되지 않음을 의미합니다. SDK 개체의 릴리스에 대한 응답으로 로깅이 중지되지 않으며 새 로깅 구성이 제공되지 않는 한 계속됩니다. 시작되면 새 개체를 만들 때 로그 파일 경로를 빈 문자열로 설정하여 프로세스 수준 로깅을 중지할 수 있습니다.

여러 인스턴스에 대한 로깅을 구성할 때 발생할 수 있는 혼동을 줄이려면 실제 작업을 수행하는 개체에서 로깅을 추상으로 제어하는 것이 유용할 수 있습니다. 도우미 루틴의 예:

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

다음 단계