FAQ
    • PDF

    FAQ

    • PDF

    기사 요약

    Classic/VPC 환경에서 이용 가능합니다.

    자주 하는 질문에 대한 답변으로 궁금증을 빠르게 해소할 수 있습니다. 만약 다음의 자주 하는 질문에서 원하는 답을 얻지 못한 경우 사용 가이드에서 원하는 내용을 찾아서 확인해 보십시오. Effective Log Search & Analytics 2.0 FAQ는 다음과 같은 주제로 구성되어 있습니다.

    Android SDK v1/v2/v3
    iOS SDK
    log4j/logback/log4j2 SDK v2

    Android SDK v1/v2/v3

    Android SDK v1/v2/v3와 관련하여 자주 하는 질문과 답변은 다음과 같습니다.

    Q. 크래시 발생 시 파일에 저장된 로그를 모두 Effective Log Search & Analytics 2.0 서버로 전송하는 방법은 무엇입니까?

    A. 크래시 콜백 함수 중 finishSendNeloCrash() 함수에서 NeloLog.flush()을 호출해 주십시오. 크래시 발생 시 파일과 큐에 있는 모든 로그를 서버로 전송합니다.

    Q. 보낸 적 없는 New User install App 로그가 전송됩니다.

    A. New User install App 로그는 애플리케이션이 최초 설치된 시점에 한 번 전송됩니다.

    Q. proguard 적용 시 주의할 점이 있습니까?

    A. proguard 적용 시 ThriftConnector, HttpsConnector도 난독화하면 해당 클래스를 찾지 못해 로그 전송에 실패합니다. 이 클래스들은 proguard 적용 시 제외 처리해 주십시오.

    Q. "Could not find class 'com.nhncorp.nelo2.android.HttpsConnector', referenced from method com.nhncorp.nelo2.android.Nelo2ConnectorFactory.getConnector" 에러가 발생합니다.

    A. SDK 설치 시 HTTPS 프로토콜 사용에 필요한 파일을 추가하지 않은 경우 발생하는 경고 문구입니다. Thrift 프로토콜만 사용하는 경우 무시해도 됩니다.

    iOS SDK

    iOS SDK와 관련하여 자주 하는 질문과 답변은 다음과 같습니다.

    Q. bitcode enabled 앱의 dSYMs(Symbol)은 어디서 다운로드할 수 있습니까?

    A. Xcode 또는 iTunes Connect에서 다운로드할 수 있습니다.

    • iTunes Connect에서 dSYM 파일을 다운로드하려면, My Apps 메뉴의 앱의 빌드 목록에서 원하는 버전을 선택한 후 Download dSYM을 클릭해 주십시오.

    log4j/logback/log4j2 SDK v2

    log4j/logback/log4j2 SDK v2와 관련하여 자주 하는 질문과 답변은 다음과 같습니다.

    공통

    log4j/logback/log4j2에 공통으로 해당되는 질문과 답변은 다음과 같습니다.

    Q. 배치 프로그램 또는 간단한 테스트 프로그램에서 AsyncAppender를 사용하는 방법은 무엇입니까?

    A. 프로그램의 마지막에 다음과 같이 몇 초간 대기하는 코드를 추가해 주십시오.

    try {
        Thread.sleep(3000L);
    } catch (InterruptedException ignore){}
    

    AsyncAppender는 로그를 기록하는 별도의 데몬 스레드를 통해 비동기로 로그를 전송합니다. Java의 배치 프로그램에서는 메인 스레드가 바로 종료되기 때문에, log4jAsyncAppender의 데몬 스레드가 생성되어 로그를 보내기 전에 배치 애플리케이션 및 JVM이 종료됩니다. 따라서, 프로그램 마지막에 대기하는 코드를 추가하여 모든 로그를 전송한 후 프로그램을 종료하도록 합니다.

    Q. Java stack trace를 log4j/logback에 포함하는 방법은 무엇입니까?

    A. Action / BO / DAO / Java batch program 등에서 log4j/logback을 이용하여 스택 트레이스(stack trace)를 출력하려면 log.error(e.getMessage(), e); 형태로 사용해 주십시오.

    • SLF4J Logger는 메소드의 인자로 Throwable만 받는 로깅 메소드는 지원하지 않습니다.
      String[] aa = null;
      try {
          aa[0] = "111";
      } catch (NullPointerException e) {
      //	log.error(e); //SLF4J에서는 지원하지 않는 메소드.
          log.error(e.getMessage(), e); ///stacktrace 출력
      }
      

    Q. log4j/logback/log4j2 로깅으로 인한 성능 저하를 최소화하는 방법은 무엇입니까?

    A. log4j.xml, logback.xml, log4j2.xml의 각 logger 설정에서 namelevel을 사용하여 필터링을 최대화할 수 있습니다.

    • logger 설정에서 com이나 orgDEBUG 레벨로 설정하게 되면 logger에서 많은 ILoggingEvent(log4j)/ILoggingEvent(logback)/ILoggingEvent(log4j2)가 불필요하게 생성되어 성능이 저하됩니다.
    • nelo log4j appender에서 Threshold가 ERROR로 설정되어 있어 실제 로그 전송은 되지 않지만, 일단 logger에서 LoggingEvent가 생성되어 appender에 전달됩니다.
    • log4j의 경우의 예시
      • 성능이 저하되는 설정(개발용으로만 사용)
        <!-- Logger -->
        <logger name="com" additivity="false">
            <level value="debug"/>
            <appender-ref ref="STDOUT" />
            <appender-ref ref="nelo-log4j" />
        </logger>
        
        <!-- Logger -->
        <logger name="org" additivity="false">
            <level value="debug"/>
            <appender-ref ref="STDOUT" />
            <appender-ref ref="nelo-log4j" />
        </logger>
        
        <!-- Root Logger -->
        <root level="warn">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="nelo-log4j" />
        </root>
        
      • 성능을 고려한 설정(운영용으로 사용)
        <!-- Logger -->
        <logger name="com" additivity="false">
            <level value="error"/>
            <appender-ref ref="STDOUT" />
            <appender-ref ref="nelo-log4j" />
        </logger>
        
        <!-- Root Logger -->
        <root level="warn">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="nelo-log4j" />
        </root>
        

    Q. Thrift bulk 전송 시 타임아웃(timeout)이 발생합니다.

    A. 수집 서버에 정상적으로 로그를 전송하지 못한 경우 다음과 같은 로그가 나타납니다. 이 경우 xml appender 설정에서 timeout 값을 증가시키고, bulkSize를 낮추어 한 패킷에 포함되는 데이터를 줄여 주십시오.

    [NELO2] sendMessage (1426319665440) sendBulk failed..  Error occur : java.net.SocketTimeoutException: Read timed out
    

    log4j/logback

    log4j와 logback에 해당되는 질문과 답변은 다음과 같습니다.

    Q. WAS에서 사용 시 안정적으로 WAS를 종료하는 방법은 무엇입니까?

    A. 에러 로그가 전송 중인 상황에서 WAS(Tomcat 등)가 종료되는 경우, 간혹 WAS가 정상적으로 종료되지 않을 수 있습니다. WAS 종료 시에 LoggerContext 인스턴스에 대해 stop() 메소드를 호출하여 nelo2 java appender를 닫으면 안정적으로 종료할 수 있습니다.

    참고

    Spring에서는 log4j에 대해 org.springframework.web.util.Log4jConfigListener를 제공하지만, logback에 대해서는 Listener를 제공하지 않습니다. logback은 Nelo2 logback SDK 자체적으로 LogbackShutdownListener를 제공합니다.

    logback

    logback에 해당되는 질문과 답변은 다음과 같습니다.

    Q. httpClient의 로깅 관련 경고 메시지가 나타납니다.

    A. HTTP 프로토콜을 사용하는 경우, 애플리케이션이 시작할 때 다음과 같은 로그가 발생합니다.
    이는 httpClient 라이브러리가 apache logging 프레임워크를 사용하기 때문이며, 여기서 생성된 로그는 root logger에 남습니다.

    SLF4J: The following loggers will not work because they were created
    SLF4J: during the default configuration phase of the underlying logging system.
    SLF4J: See also http://www.slf4j.org/codes.html#substituteLogger
    SLF4J: org.apache.http.impl.conn.PoolingClientConnectionManager
    SLF4J: org.apache.http.impl.conn.DefaultClientConnectionOperator
    SLF4J: org.apache.http.impl.client.DefaultHttpClient
    

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.