로깅 구성
기본 internal-logback.xml 파일은 ThingWorx .war 파일의 일부이며 로그백 하위 시스템을 구성하는 데 사용됩니다. 파일을 찾으려면 Thingworx.war 파일의 압축을 해제한 다음 WEB_INF/lib/thingworx-platform-common-[버전 번호].jar의 압축을 해제합니다.
internal-logback.xml/ThingworxPlatform/logback.xml에 복사하고 변경 사항을 적용할 수 있습니다. 이러한 logback.xml 파일은 서로 누적 또는 상속하지 않습니다. 그런 다음 업데이트된 파일을 각 ThingWorx 인스턴스의 ThingWorx 구성 디렉터리(default/ThingworxPlatform)에 배치할 수 있습니다.
로그 수준을 DEBUG로 변경
특정 클래스의 로그 수준을 DEBUG로 강제 설정하도록 엔트리를 변경할 수 있습니다. 예를 들어, 다음과 같은 수준이 있습니다.
<logger name="org.springframework.security" level="INFO" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
다음과 같이 level="DEBUG"를 사용하여 변경할 수 있습니다.
<logger name="org.springframework.security" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
또는 특정 로그 수준의 새 엔트리를 추가할 수 있습니다. 예를 들어, 다음과 같습니다.
<logger name="com.thingworx.security.authentication.sso" level="DEBUG" additivity="false">
<appender-ref ref="ASYNC_APPENDER_SECURITY"/>
</logger>
이와 같은 패키지 수준 엔트리는 해당 패키지 및 하위 패키지에 대한 로깅을 설정합니다.
어펜더
<appender-ref ref="[어펜더 이름]"/>에 올바른 어펜더를 지정하여 정보를 표시할 로그를 지정할 수 있습니다. 가능한 어펜더는 다음과 같습니다.
ASYNC_APPENDER_CONSOLE - 콘솔 출력
ASYNC_APPENDER_APPLICATION - 응용 프로그램 로그
ASYNC_APPENDER_ERROR - 오류 로그
ASYNC_APPENDER_SECURITY - 보안 로그
ASYNC_APPENDER_SCRIPT - 스크립트 로그
ASYNC_APPENDER_SCRIPT_ERROR - 스크립트 오류 로그
ASYNC_APPENDER_CONFIGURATION - 구성 로그
ASYNC_APPENDER_DATABASE - 데이터베이스 로그
ASYNC_APPENDER_COMMUNICATION - 통신 로그
비동기 어펜더
ThingWorx에서는 콘솔 및 롤링 파일 어펜더를 통해 로그백 로깅 라이브러리를 사용합니다. 두 어펜더 모두 비동기 어펜더로 래핑되어 로그 요청자를 실제 로그 쓰기에서 분리합니다. 로그 요청자는 AsyncAppender에 대해 append(logEvent) 메소드를 호출합니다. 이 메소드는 AsyncAppender 안에 있는 내부 대기열에 logEvent를 추가합니다. 따라서 로그 요청자가 대상 콘솔이나 파일에 logEvent가 기록될 때까지 기다리지 않고 작업을 계속할 수 있습니다. AsyncAppender에서 내부 스레드가 내부 대기열에서 가장 오래된 logEvent를 선택하고 이를 포함하는 로그 어펜더 콘솔 또는 파일에 대해 append(LogEvent)를 호출합니다. 또한 내부 대기열은 버퍼 역할을 하여 초당 로깅 요청 수가 내부 어펜더 쓰기 속도를 초과할 경우 단기간의 활동 증가 기간 동안의 데이터 손실을 방지합니다.자세한 내용은 https://logback.qos.ch/manual/appenders.html을 참조하십시오.
logback.xml 파일에서 AsyncAppender에 대해 다음 매개 변수를 구성할 수 있습니다.
매개 변수
환경 변수
기본 유형
기본값
설명
queueSize
AsyncAppender마다 다름(아래 표 참조)
INTEGER
256
차단 대기열의 최대 용량입니다. 이 값은 AsyncAppender를 만드는 동안 사용되며 변경할 수 없습니다. 이 값은 어펜더 단위로 설정할 수 있습니다.
discardingThreshold
DISCARDING_THRESHOLD
INTEGER
0%
기본적으로 차단 대기열의 남은 용량이 20%일 경우 TRACE, DEBUGINFO 수준의 이벤트는 삭제하고 WARNERROR 수준의 이벤트는 유지합니다. 모든 이벤트를 유지하려면 discardingThreshold0으로 설정합니다.
maxFlushTime
MAX_FLUSH_TIME
INTEGER
1000밀리초
최대 대기열 플러시 제한 시간(밀리초)입니다. 대기열 깊이 및 참조된 어펜더에 대한 대기 시간에 따라 AsyncAppender가 대기열을 완전히 플러시하는 데 허용되지 않는 시간이 소요될 수 있습니다. LoggerContext가 중지될 경우 AsyncAppender 중지 메소드는 작업자 스레드가 완료될 때까지 이 시간 동안 기다립니다. 이 시간 내에 처리할 수 없는 이벤트는 제거됩니다. 이 값의 의미는 Thread.join(long) 값과 동일합니다.
neverBlock
NEVER_BLOCK
BOOLEAN
false
기본적으로 이 매개 변수는 false로 설정됩니다. 즉, 어펜더는 메시지가 손실되도록 두는 대신 꽉 찬 대기열에 메시지가 추가되는 것을 차단합니다. 이 옵션을 true로 설정하면 어펜더가 메시지를 삭제하고 응용 프로그램을 차단하지 않습니다.
비동기 어펜더에 대한 대기열 크기 값
AsyncAppender에는 고유한 queueSize 값이 있습니다. 이는 로거마다 로드가 다르고 필요한 대기열 크기도 다르기 때문입니다.
어펜더 이름
환경 변수
기본값
ASYNC_APPENDER_APPLICATION
MAX_QUEUE_SIZE_APPLICATION
10000
ASYNC_APPENDER_CONSOLE
ASYNC_APPENDER_CONSOLE
10000
ASYNC_APPENDER_CONFIGURATION
MAX_QUEUE_SIZE_CONFIGURATION
1000
ASYNC_APPENDER_SECURITY
MAX_QUEUE_SIZE_SECURITY
1000
ASYNC_APPENDER_DATABASE
MAX_QUEUE_SIZE_DATABASE
1000
ASYNC_APPENDER_COMMUNICATION
MAX_QUEUE_SIZE_COMMUNICATION
1000
ASYNC_APPENDER_ERROR
MAX_QUEUE_SIZE_ERROR
5000
ASYNC_APPENDER_SCRIPT
MAX_QUEUE_SIZE_SCRIPT
5000
ASYNC_APPENDER_SCRIPT_ERROR
MAX_QUEUE_SIZE_SCRIPT_ERROR
5000
연관된 환경 변수를 설정하여 기본값을 변경할 수 있습니다. Eclipse에서 서버를 실행할 경우 Run configuration/server/environment에서 환경 변수를 설정해야 합니다.
환경 변수를 통해 지정된 값은 서버가 시작하는 동안에만 선택됩니다. 따라서 서버를 시작한 후에 값을 변경하려면 서버를 다시 시작해야 합니다.
로그 설정
다음은 롤링 파일 및 보관에 대한 기본 로그백 구성 설정입니다. Composer의 하위 시스템 > 로깅 하위 시스템 > 구성 > 로그 보존 설정에서 이러한 설정을 구성할 수 있습니다.
로그 보존 설정
속성 이름
기본값
설명
최대 파일 크기(단위: KB)
MAX_FILE_SIZE
100000
각 로그 파일에 대한 크기 제한
최대 보관 일 수
MAX_HISTORY_SIZE
7
로그 파일이 보관되는 일 수
보존할 모든 로그 파일의 전체 크기(단위: GB)
TOTAL_SIZE_CAP
10
보관된 모든 로그 파일에 대한 크기 제한
클러스터 모드와 단일 서버 모드 비교
클러스터 모드에서는 여러 인스턴스가 단일 파일에 로그를 기록합니다. 이렇게 하려면 RollingFileAppender 구성에서 prudent 플래그를 활성화해야 하지만 제한 사항이 있습니다.
prudent 모드에서는 파일 압축이 허용되지 않습니다. 인스턴스를 압축하는 동안에는 다른 인스턴스가 쓸 수 없습니다.
FileAppender 파일 속성을 비워 두어야 합니다. 대부분의 운영 체제에서 다른 프로세스에서 열려 있는 파일의 이름을 바꿀 수 없습니다.
다음 예에서는 RollingFileAppender가 클러스터 모드에서 SizeAndTimeBasedRollingPolicy로 구성되어 있습니다.
<!-- configuration appender -->
<appender name="CONFIGURATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVM writing to the same log file -->
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>{LOG_PATH}/ConfigurationLog.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>{MAX_HISTORY_SIZE}</maxHistory>
<totalSizeCap>{TOTAL_SIZE_CAP}</totalSizeCap>
<maxFileSize>{MAX_FILE_SIZE}</maxFileSize>
</rollingPolicy>
<encoder class="com.thingworx.logging.ThingWorxPatternLayoutEncoder">
<pattern>{CONFIGURATION_LAYOUT_PATTERN}</pattern>
</encoder>
</appender>
단일 서버 모드에서 활성 로그 파일은 {ThingworxStorage}/logs에 배치되고 롤오버된 파일은 {ThingworxStorage}/logs/archive에 배치됩니다.
다음 예에서는 SizeAndTimeBasedRollingPolicy가 단일 서버 모드에서 RollingFileAppender로 구성되어 있습니다.
<!-- application appender -->
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>{LOG_PATH}/ApplicationLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>{LOG_PATH}/archives/ApplicationLog.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>{MAX_HISTORY_SIZE}</maxHistory>
<totalSizeCap>{TOTAL_SIZE_CAP}</totalSizeCap>
<maxFileSize>{MAX_FILE_SIZE}</maxFileSize>
</rollingPolicy>
<encoder class="com.thingworx.logging.ThingWorxPatternLayoutEncoder">
<pattern>{LAYOUT_PATTERN}</pattern>
</encoder>
</appender>
도움이 되셨나요?