totalSizeCap 속성은 maxHistory 속성에 종속되어 있다.

  • totalSizeCap 속성은 maxHistory 속성 설정 시에만 동작한다.

정상 (totalSizeCap 기능 동작 O)

<appender name="TEST-html"
	class="ch.qos.logback.core.rolling.RollingFileAppender">
	<file>${LOG_PATH}${TEST_LOG_HTML}</file>
	<rollingPolicy
		class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
		<fileNamePattern>${LOG_PATH}${TEST_ARCHIVE_LOG_HTML}</fileNamePattern>
		<!-- each archived file, size max 10MB -->
		<maxFileSize>10MB</maxFileSize>
		<!-- (아카이브 삭제 조건 1 : maxHistory) -->
		<!-- 60 days to keep -->
		<maxHistory>60</maxHistory>
		<!-- (아카이브 삭제 조건 2 : totalSizeCap, maxHistory 속성 설정 시에만 동작한다.) -->
		<!-- total size of all archive files, if total size > 20GB, it will delete
			old archived file -->
		<totalSizeCap>20GB</totalSizeCap>
		<!-- Application 기동 시 기존 아카이브 파일 삭제 -->
		<cleanHistoryOnStart>true</cleanHistoryOnStart>
	</rollingPolicy>

	<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
		<layout class="ch.qos.logback.classic.html.HTMLLayout">
			<pattern>%relative%thread%mdc%level%logger%msg</pattern>
		</layout>
	</encoder>
</appender>

비정상 (totalSizeCap 기능 동작 X)

<appender name="TEST-html"
	class="ch.qos.logback.core.rolling.RollingFileAppender">
	<file>${LOG_PATH}${TEST_LOG_HTML}</file>
	<rollingPolicy
		class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
		<fileNamePattern>${LOG_PATH}${TEST_ARCHIVE_LOG_HTML}</fileNamePattern>
		<!-- each archived file, size max 10MB -->
		<maxFileSize>10MB</maxFileSize>
		<!-- (아카이브 삭제 조건 1 : maxHistory) -->
		<!-- 60 days to keep -->
		<!-- <maxHistory>60</maxHistory> -->
		<!-- (아카이브 삭제 조건 2 : totalSizeCap, maxHistory 속성 설정 시에만 동작한다.) -->
		<!-- total size of all archive files, if total size > 20GB, it will delete
			old archived file -->
		<totalSizeCap>20GB</totalSizeCap>
		<!-- Application 기동 시 기존 아카이브 파일 삭제 -->
		<cleanHistoryOnStart>true</cleanHistoryOnStart>
	</rollingPolicy>

	<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
		<layout class="ch.qos.logback.classic.html.HTMLLayout">
			<pattern>%relative%thread%mdc%level%logger%msg</pattern>
		</layout>
	</encoder>
</appender>

속성 명세표

옵션명 입력 포맷 비고
maxFileSize KB, MB, GB
ex) 10MB
개별 로그파일 최대 용량
maxHistory 1, ..., n
ex) 7
아카이브(백업) 전체 허용 개수
 - fileNamePattern 설정값에 따라 rollover 주기가 결정됨.
ex1) %d{yyyy-MM-dd}
 - 직전 7일까지 저장 허용
ex2) %d{yyyy-MM-dd_HH-mm}
 - 직전 7분까지 저장 허용
totalSizeCap KB, MB, GB
ex) 20GB
아카이브(백업) 전체 용량, maxHistory 속성 설정 시에만 동작한다.
cleanHistoryOnStart true, false (default : false)
ex) true
Application 시작 시 아카이브(백업)된 로그 파일 삭제

 

참조

 

Logback - 4. Appenders (2). RollingFileAppender

logback 홈페이지의 매뉴얼을 읽으며 내용들을 정리한 글입니다. RollingFileAppender RollingFileAppender는 FileAppender를 상속하여 로그 파일을 rollover 합니다. 여기서 rollover는 타깃 파일을 바꾸는 것..

ckddn9496.tistory.com

 

Posted by 달바래기
,

1. build.gradle 플러그인 추가

// Gradle 종속성 트리 리포트를 위한 플러그인 설치
apply plugin: 'project-report'

※ Eclipse 사용 시 build.gradle 편집 후 프로젝트 갱신 처리 (Gradle▶Refresh Gradle Project)

 

2. 리포트 생성

  • gradlew 실행 및 리포트 출력 명령어 입력
    gradlew htmlDependencyReport​
     gradlew 경로 : gradle 프로젝트 최상단에 위치
    ※ 리포트 생성 경로 : {프로젝트Root}\build\reports\project\dependencies\index.html

3. 리포트 확인

  • 결과값 (샘플)
    프로젝트 종속성 트리 리포트 (샘플)
  • build.gradle : compile 속성 사용 시
    • 체크 속성 : compile, compileClasspath, default, runtime, runtimeClasspath

compile.zip
0.65MB

  • build.gradle : implementation 속성 사용 시
    • 체크 속성 : compileClasspath, default, implementation, runtimeClasspath

implimentation.zip
0.65MB


참조

 

Gradle implementation vs. compile dependencies

Gradle version 6 supports both the implementation and compile dependency configurations. Why are they both there and which one should you use? Let's find out with the two simple rules described in this article. Quick answer: use the implementation configur

tomgregory.com

 

Using gradle to find dependency tree

Is it possible to use gradle to produce a tree of what depends on what? I have a project and would like to find out all the dependencies so I may be able to prune it a little with forward declarat...

stackoverflow.com

Posted by 달바래기
,

1. 전제조건: 객체 상속

 - 변수형 객체를 제외한 나머지 객체를 할당할 경우 해당 객체의 주소값을 저장한다. (Call by reference)

 

2. 생성객체 - 상속객체 주소값 비교

 - 생성객체와 상속객체의 hashCode() 값을 비교해 동일 주소값 참조 여부 확인

 

3. 생성객체 변경 테스트 (해시코드 비교) 

  - (일치) 기존객체 내부 데이터 변경 
  - (일치) 기존객체 내부 데이터 초기화: .clear() 
  - (불일치) 기존객체 null / new : 생성객체의 hashCode는 변경되며, 상속객체 hashCode는 변경 전 객체의 hashCode를 그대로 유지된다. (생성객체 내 객체 상속이 중단됨.) 
  ※ 상속 객체 내 특정 객체를 제거하고 싶을 경우 제거객체 차상위(부모) 객체에서 상속 값을 제거한다.

Posted by 달바래기
,