2017-01-10 10 views
3

scala-js 코드에서 오류가 발생하면 서버에 로그를 넣기 위해 적절한 스택 추적을 보내고 싶습니다. "현명한 스택 트레이스"란 말은 번역 된 자바 스크립트 코드가 아닌 스칼라 메서드, 파일 이름 및 행 번호를 제공합니다.scala stacktrace 받기

나는 소스 맵을 얻고 자바 스크립트 소스 맵 라이브러리 (https://github.com/mozilla/source-map)를 사용하여 스택 트레이스의 각 요소를 자바 스크립트에서 해당 스칼라 코드로 변환함으로써 많은 발전을 이루었다.

내 문제 : 오류를 던진 자바 스크립트 코드의 열 번호가 필요하지만 가져 오는 방법은 알 수 없습니다. 되는 StackTraceElement를 인쇄하면 내가 줄의 끝에 "188"을 필요로하지만, toString을 호출하고 결과를 분석하는 것보다는 다른 얻는 방법을 볼 수 없습니다

oat.browser.views.query.QueryRunView$.renderParamsTable$1(https://localhost:9443/assets/browser-fastopt.js:34787:188) 

유사한 결과를 제공합니다. StackTraceElement 코드를 살펴보면, 열 번호는 액세스 할 API가없는 전용 변수입니다.

내가 완전히 간과하고있는 다른 접근 방법이 있습니까? 자바 스크립트 스택 트레이스를 스칼라 스택 트레이스로 변환하는 스칼라 -js에 내장 된 것은 무엇입니까?

+0

이 코드는 어딘가에서 사용할 수 있습니까? 나는 그것을 직접 활용하는 데 관심이있을 것이다. – darkfrog

+0

https://gist.github.com/bwbecker/e92324dc8875e10f44b5161c2515a186에서 요점을 말합니다. 이것은 여전히 ​​진행중인 작업입니다. 내 관심이 다른 물건으로 전환되었으므로 게시 된 코드는 아직 완성되지 않았습니다. 그게 쓸모 있다면. 피드백 이상 환영합니다. – bwbecker

답변

1

나는 내가 필요한 것을 수행하는 StackTraceJS 라이브러리를 발견했다. 나는 ScalaJS 외관을 JSNlog을위한 외관과 결합하여 나의 필요를 꽤 잘 충족시키는 패키지를 만들었습니다. jsnlog-facade을 참조하십시오. 스칼라 스택 추적을 사용하여 브라우저 콘솔 및/또는 서버에 기록합니다. 데모 코드가 포함되어 있습니다.

1

공용 API에는 열 번호에 액세스하는 것이 없으며 Java API이며 Scala.js는 공용 API를 Java API에 추가 할 수 없습니다.

StackTraceElement의 경우이 문제를 해결하려면 getColumnNumber(): Int을 JavaScript에 내 보내야합니다. 그러므로 당신은 열 번호 검색하기 위해 다음 코드를 사용할 수 있습니다 :이 "기능"이 문서화되어

def columnNumberOfStackTraceElement(ste: StackTraceElement): Int = 
    ste.asInstanceOf[js.Dynamic].getColumnNumber().asInstanceOf[Int] 

참고하고, Scala.js의 미래 주요 버전에서 예고없이 변경 될 수 있습니다. 사라지면 신뢰할만한 것으로 대체 될 것입니다. 그 사이에, 위는 당신을 가야합니다.

+0

우수! 고맙습니다! – bwbecker