log for java
자바의 로그를 위한 패키지
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" name="RoutingLog" monitorInterval="30">
<Properties>
<Property name="consolePattern">%d{HH:mm:ss.SSS} [%t] %-5level %c(%M:%L) - %m%n</Property>
<Property name="rollingPattern">%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Property>
<Property name="filepath">./log/${date:yyyy}/${date:MM}</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="${consolePattern}"/>
</Console>
<RollingFile name="file" fileName="${filepath}/${date:dd}.log"
filePattern="${filepath}/dailyLog_%d{yyyy-MM-dd.HHmm}.log">
<PatternLayout pattern="${rollingPattern}"/>
<Policies>
<CronTriggeringPolicy schedule="0 */1 * * * ?"/>
<!--<SizeBasedTriggeringPolicy size="10KB"/>-->
</Policies>
<!--<DirectWriteRolloverStrategy maxFiles="10"/>-->
<DefaultRolloverStrategy>
<Delete basePath="./log/${date:yyyy}/${date:MM}" maxDepth="1">
<IfFileName glob="*/dailyLog_*.log" />
<IfLastModified age="2m" />
<!--<IfAccumulatedFileCount exceeds="3"/>-->
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<!-- 로그 기본 레벨 -->
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="file"/>
</Root>
</Loggers>
</Configuration>
위치
xml : 프로젝트/src/resources/log4j2.xml
스프링 pom.xml에 log4j-api와 log4j-core 의존성을 주입했다면 위의 위치에 xml을 만들면 알아서 읽어감
log : 어디서 생성되는지 모르면 로그 레벨을 debug로 하고 로그를 보다보면 아래와 같은 로그를 볼 수 있음
현재 날짜가 2023년 2월 14일 이므로 yyyy는 2023, MM은 02, dd는 14로 생성됨
로그 생성 경로 및 파일 이름 - C:\Program Files (x86)\apache-tomcat-9.0.71\bin\.\log\2023\02\14.log
2023-02-14 17:34:54,280 RMI TCP Connection(3)-127.0.0.1 DEBUG Returning file creation time for C:\Program Files (x86)\apache-tomcat-9.0.71\bin\.\log\2023\02\14.log
설명
Properties - 사용자 정의 요소들
RollingFile - 파일을 어떻게 회전시킬지 정의
- name : 이 프로퍼티의 이름
- fileName : 저장될 로그 파일의 경로와 이름(패턴)
- filePattern : 저장된 로그파일의 롤링 패턴(파일의 경로와 이름(패턴))
Policies - 롤링파일 만드는 정책 / 기준
참고 URL : https://logging.apache.org/log4j/2.x/manual/appenders.html
- CronTriggeringPolicy - 일반적으로 알고 있는 Crontab과 같은 원리. 지정된 시간이 되면 롤링
- 초 분 시 일 월 요일 (년도) - 년도는 잘 안되는거같아 테스트 필요
- 참고 : https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/util/CronExpression.html
- SizeBasedTriggeringPolicy - 로그파일이 size 요소의 크기만큼 되면 롤링
Delete - 조건들이 모두 해당하는 파일 삭제
- basePath : 삭제 적용할 폴더
- maxDepth : basePath의 하위 몇번째까지 적용할 지
- IfLastModified : 마지막 수정날짜가 여기 해당하면 삭제
- IfFileName : 파일 이름 패턴
참고
패턴 : https://kwonnam.pe.kr/wiki/java/log4j/pattern
https://pakss328.medium.com/log4j2-xml-%EC%84%A4%EC%A0%95-a3aa0d1bea2f
https://gogo-jjm.tistory.com/53
'자바' 카테고리의 다른 글
EAR WAR JAR (0) | 2023.06.07 |
---|---|
replaceAll (1) | 2023.03.21 |
HashMap / HashTable (0) | 2023.02.08 |
상속 / 포함 (0) | 2023.01.29 |
클래스 Class (0) | 2023.01.29 |