사용자 환경에서 앱이 예상치 못하게 종료되거나 실행중 발생하는 오류나 현상을 분석하기 위해 로그 파일을 생성하고 문제를 확인할 수 있습니다.
로그 기능은 윈도우, macOS, 안드로이드 운영체제 NRE만 지원합니다.
앱 실행 시 로그 관리자가 실행되기 전에 발생하는 에러는 로그로 남길 수 없습니다. 앱 실행 시 alert 창 형태로 사용자에게 표시됩니다.
로그 파일 생성 설정하기
로그 파일을 생성하는 기능은 기본 설정이 아니며 추가 설정이 필요합니다. 로그 파일 생성 설정은 넥사크로 스튜디오에서 설정할 수도 있고 config 파일을 설정하는 방법이 있습니다.
앱 실행 시에는 config 파일에 설정한 내용을 우선적으로 적용합니다. config 파일이 있는 경우에는 Environment 항목에서 설정한 값은 무시합니다.
Environment 항목에서 로그 파일 생성 설정하기
넥사크로 스튜디오에서 속성값을 설정하고 로그 기능을 설정할 수 있습니다. 관련 속성값은 넥사크로 스튜디오에서만 설정할 수 있으며 앱 실행중에는 변경할 수 없습니다.
tracemode 속성에서 로그 파일 생성 설정하기
넥사크로 스튜디오에서 Environment 항목을 선택하고 tracemode를 변경합니다. 기본값 "none"인 경우에는 로그 기능을 처리하지 않으며 속성값을 "new" 또는 "append"로 설정하면 로그 파일을 생성합니다.
로그 작성 수준과 주기 설정하기
넥사크로 스튜디오에서 Environment 항목을 선택하고 loglevel, traceduration 속성을 설정할 수 있습니다. loglevel 속성은 로그의 어떤 상황에서 로그를 기록할 것인지를 설정하고 traceduration 속성은 로그 파일 생성 주기를 설정합니다.
config 파일 설정하기
config 파일에서 로그 기능을 설정할 수 있습니다. Environment 속성은 수정하지 않고 config 파일을 사용자 실행 환경에 복사해 넣거나 빌드 시 포함해서 설정할 수 있습니다.
-NC 옵션 설정하기
윈도우 운영체제에서 nexacro.exe 파일을 실행할 때 "-NC" 옵션을 사용할 수 있습니다. 실행할 nexacro.exe 파일과 같은 위치에 있는 config 파일을 설정할 수 있습니다.
예를 들어 nexacro.exe 파일의 위치가 아래와 같은 경고 -NC 옵션값으로 "log_config.xml" 파일을 지정했다면 같은 위치에 "log_config.xml" 파일이 있어야 합니다.
C:\Program Files\nexacro\17.1\TEST_LOG\nexacro.exe C:\Program Files\nexacro\17.1\TEST_LOG\log_config.xml
-NC 옵션을 사용하지 않는 경우에는 기본 경로에 있는 nexacro_config.xml 파일을 찾고 해당 파일이 있는 경우 참조합니다.
nexacro_config.xml 파일 설정하기
-NC 옵션 설정하기는 파일명을 지정할 수 있지만 별도 옵션을 지정해주어야 합니다. nexacro_config.xml 파일은 지정한 위치에 정해진 이름을 가진 파일을 가져다놓으면 자동으로 앱 실행 시 이를 인식하고 처리합니다.
윈도우 운영체제
윈도우 운영체제에서는 nexacro_config.xml 파일을 포함해 앱을 배포하는 기능을 포함하지 않습니다. 아래 경로에 nexacro_config.xml 파일을 생성하고 앱 실행 시 참조할 수 있습니다.
%USERAPP%\Config\[Key]\nexacro_config.xml
[Key]는 nexacro.exe 실행 옵션에 지정하는 -K 옵션 또는 Build App 단계에서 지정하는 App Title입니다.
안드로이드, macOS 운영체제
안드로이드 스튜디오 또는 에서 프로젝트 빌드 시 nexacro_config.xml 파일을 설정할 수 있습니다. 아래 내용을 참고하세요.
앱 개발 및 실행 (안드로이드) > Config 설정 앱 개발 및 실행 (iOS/iPadOS) > Config 설정
nexacro_config.xml 파일 속성
설정 파일(nexacro_config.xml) 파일 또는 -NC 옵션으로 지정하는 파일은 아래와 같은 형식으로 작성합니다.
<?xml version="1.0" encoding="UTF-8"?> <nexacro-config os="windows"> <application file-logging="true" loglevel="debug" tracemode="new" traceduration="-1"/> <log filepath="%USERAPP%\Log\nre_log_test.log" filesize="408960" backupfilecount="5"/> </nexacro-config>
nexacro_config.xml 파일에 지정하는 속성 중 로그 파일 생성과 관련된 속성만 아래에 설명합니다.
태그/속성 | 설명 |
---|---|
nexacro-config | |
os | 운영체제를 설정하는 속성입니다. - windows: 윈도우 운영체제 - Android: 안드로이드 운영체제 - osx: macOS 운영체제 |
application | |
file-logging | 초기 로딩 에러 정보 저장 여부를 설정하는 속성입니다. %USERAPP% 경로에 nexacro_startError.log 파일에 기록되는 정보와 같음 |
loglevel | 로그 출력 레벨을 설정하는 속성입니다. fatal | error | warn | info | debug fatal 부터 info 까지는 프레임워크 내부에서 처리하는 로그 정보이며 trace 메소드를 사용하거나 스크립트 에러가 발생하는 경우에는 debug로 처리됩니다. |
tracemode | 로그 파일 처리 방식을 설정하는 속성입니다. new: 이전 기록을 삭제하고 새롭게 로그 기록 append: 이전 기록 뒤에 로그 기록 |
traceduration | 로그 파일을 일별로 생성하는 옵션을 설정하는 속성입니다. 기본값은 -1입니다. |
log | |
filepath | 로그 파일 경로와 파일명을 설정하는 속성입니다. 경로를 지정하지 않으면 아래 경로에 파일을 생성합니다. - Windows: %USERAPP% - Android: %SD_CARD%/Android/data/[package name]/files/nexacro/17.1/Log - macOS: %USERAPP%/Log 파일명을 설정하지 않으면 아래와 같은 형식으로 파일을 생성합니다. - nexacro_[프로토콜+url+port][부트스트랩파일명].log ex) nexacro_httplocalhost8080startjson.log |
filesize | 로그 파일 최대 크기를 설정하는 속성입니다. 기본값은 204,800 바이트(byte)입니다. 기본값보다 작은 값을 설정한 경우에는 기본값이 적용됩니다. |
backupfilecount | 로그 파일 최대 개수를 설정하는 속성입니다. 로그 파일 크기가 filesize 보다 커지는 경우 백업 파일로 남길 수 있는 파일 개수 기본값은 1개입니다. |
os 속성값이 "windows"인 경우 filepath 속성값은 보안상 문제가 될 수 있어 아래와 같은 제약을 적용합니다.
허용된 경로 또는 허용된 경로의 하위 경로가 아닌 경우 기본 경로로 강제 변경합니다.
허용된 경로는 system.convertRealPath 메소드에서 Alias를 사용해 지정할 수 있는 경로입니다.
시작 프로그램 경로와 같은 위치를 지정하면 기본 경로로 강제 변경합니다.
파일 확장자가 아래와 같은 경우 "log"로 확장자를 강제 변경합니다.
bat, bin, cmd, com, cpl, exe, gadget, inf1, ins, inx, isu, job, jse, lnk, msc, msi, msp, mst, paf, pif, ps1, reg, rgs, scr, sct, shb, shs, u3p, vb, vbe, vbs, vbscript, js, ws, wsf, wsh, dll, hta
속성별 파일 생성 예시
backupfilecount
생성된 로그파일 크기가 filesize 속성값보다 커지면 백업파일을 추가로 생성합니다.
파일명 뒤에 번호를 붙여서 파일을 생성합니다. backupfilecount 속성으로 지정한 값에 도달하게 되면 처음 생성한 파일을 지우고 다시 로그를 기록합니다.
1시간마다 앱이 실행되고 앱 실행 시 300KB 로그를 기록한다면 로그 파일은 아래와 같이 생성됩니다.
<log filepath="%USERAPP%nrelog.log" filesize="200" backupfilecount="3"/>
로그파일명 | 파일크기 | 파일생성/변경 시간 | 작업순서 |
---|---|---|---|
2020/05/26 13:00 | |||
nrelog.log | 100KB | 2020/05/26 13:00 | 마지막 로그 |
nrelog.log.1 | 200KB | 2020/05/26 13:00 | 시작 로그 |
2020/05/26 14:00 | |||
nrelog.log | 10KB | 2020/05/26 14:00 | 마지막 로그 |
nrelog.log.1 | 200KB | 2020/05/26 14:00 | |
nrelog.log.2 | 200KB | 2020/05/26 14:00 | |
nrelog.log.3 | 200KB | 2020/05/26 13:00 | 시작 로그 |
2020/05/26 15:00 | |||
nrelog.log | 180KB | 2020/05/26 15:00 | 마지막 로그 |
nrelog.log.1 | 200KB | 2020/05/26 14:00 | |
nrelog.log.2 | 200KB | 2020/05/26 14:00 | |
nrelog.log.3 | 200KB | 2020/05/26 15:00 | 시작로그 / roll over |
traceduration
로그 파일이 생성되는 날짜 기준으로 traceduration 속성값보다 이전에 생성된 파일은 삭제합니다.
파일명 뒤에 날짜("_yyyymmdd")를 붙여서 파일을 생성합니다. 날짜 비교는 운영체제 시스템 시간을 기준으로 처리합니다.
하루에 한 번 앱이 실행되고 주말에는 실행하지 않는다면 로그 파일은 아래와 같이 생성되고 삭제됩니다. 주말(토요일, 일요일)에는 앱이 실행되지 않으므로 기존에 생성된 로그 파일이 삭제되지 않으며 월요일에 앱이 실행되면서 traceduration 속성값 이전 로그 파일을 삭제합니다.
<nexacro-config os="windows"> <application file-logging="true" quiet="false" loglevel="debug" tracemode="new" traceduration="2"/> <log filepath="%USERAPP%nrelog.log" filesize="408960" backupfilecount="3"/> </nexacro-config>
로그파일명 | 파일생성일 | 작업 |
---|---|---|
2020/05/21 (목요일) | ||
nrelog_20200521.log | 2020/05/21 | 파일 생성 |
2020/05/22 (금요일) | ||
nrelog_20200521.log | 2020/05/21 | 유지 |
nrelog_20200522.log | 2020/05/22 | 파일 생성 |
2020/05/23 (토요일) | ||
nrelog_20200521.log | 2020/05/21 | 유지 |
nrelog_20200522.log | 2020/05/22 | 유지 |
2020/05/24 (일요일) | ||
nrelog_20200521.log | 2020/05/21 | 유지 |
nrelog_20200522.log | 2020/05/22 | 유지 |
2020/05/25 (월요일) | ||
| 2020/05/21 | 파일 삭제 |
| 2020/05/22 | 파일 삭제 |
nrelog_20200525.log | 2020/05/25 | 파일 생성 |
2020/05/26 (화요일) | ||
nrelog_20200525.log | 2020/05/25 | 유지 |
nrelog_20200526.log | 2020/05/26 | 파일 생성 |
2020/05/27 (수요일) | ||
| 2020/05/25 | 파일 삭제 |
nrelog_20200526.log | 2020/05/26 | 유지 |
nrelog_20200527.log | 2020/05/27 | 파일 생성 |
로그 파일 읽기
해당 운영체제 파일 탐색 프로그램을 사용해 로그 파일을 확인할 수 있습니다.
앱 내에서 로그 파일을 확인하는 기능을 구현하려면 로그 파일이 저장된 경로를 가져와서 VirtualFile 오브젝트를 사용해 파일 내용을 읽을 수 있습니다.
로그 파일 읽기 스크립트 예제
Button 클릭 시 해당 경로에 저장된 첫 번째 파일을 가져와 TextArea 컴포넌트에 표시하는 예제입니다.
this.Button01_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var strLogpath = nexacro.getLogFilePath(); this.VirtualFile00.getFileList( strLogpath, ".log", VirtualFile.findFileOnly ); } this.VirtualFile00_onsuccess = function(obj:VirtualFile, e:nexacro.VirtualFileEventInfo) { switch (e.reason) { case 1: // open this.VirtualFile00.read(); break; case 3: // read this.TextArea00.set_value(e.textdata); break; case 8: // getFileList var logfilename = logpath + e.fileattributelist[0].filename; this.VirtualFile00.open(logfilename, VirtualFile.openText); break; } }
윈도우 운영체제 실행 시 제약
윈도우 운영체제에서 로그 파일에 접근하려면 Environment filesecurelevel 속성값을 "all"로 지정해주어야 하며 최초 실행 시 샌드박스 창이 표시됩니다.
안드로이드 운영체제 실행 시 제약
안드로이드 운영체제에서 로그 파일에 접근하려면 파일접근권한을 설정해주어야 합니다.
1
AndroidManifest.xml에 파일 접근 권한(WRITE_EXTERNAL_STORAGE)을 설정하고 Provider를 추가해줍니다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... <provider android:name="android.support.v4.content.FileProvider" android:authorities="nexacro.launcher.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> </provider>
2
file_paths.xml 파일을 res/xml 경로 아래에 추가합니다.
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-cache-path name="cache" path="."/> <external-files-path name="files" path="./"/> </paths>