SpringBoot 통합 log4j 로그 와 HashMap 의 기본 원리 분석

1.SpringBoot 와 로그
1.springboot 통합 log4j 로그 기록
1.resources 디 렉 터 리 아래 에 로그 파일 을 만 들 고 가 져 오기:
코드 는 다음 과 같 습 니 다(예시).

#log4j.rootLogger=CONSOLE,info,error,DEBUG
log4j.rootLogger=info,error,CONSOLE,DEBUG
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout  
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info 
log4j.appender.info.append=true 
#log4j.appender.info.File=/home/admin/pms-api-services/logs/info/api_services_info
log4j.appender.info.File=/Users/dddd/Documents/testspace/pms-api-services/logs/info/api_services_info
log4j.logger.error=error 
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout  
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error 
log4j.appender.error.append=true 
#log4j.appender.error.File=/home/admin/pms-api-services/logs/error/api_services_error
log4j.appender.error.File=/Users/dddd/Documents/testspace/pms-api-services/logs/error/api_services_error
log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout  
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG 
log4j.appender.DEBUG.append=true 
#log4j.appender.DEBUG.File=/home/admin/pms-api-services/logs/debug/api_services_debug
log4j.appender.DEBUG.File=/Users/dddd/Documents/testspace/pms-api-services/logs/debug/api_services_debug

log4j\u4EE3\u7801
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
2.log4j 의존 도입
코드 는 다음 과 같 습 니 다(예시).

<!-- springboot-log4j -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j</artifactId>
 <version>1.3.8.RELEASE</version>
</dependency>
3.컨트롤 러 층 테스트
코드 는 다음 과 같 습 니 다(예시).

@RestController
public class LoggController {
 private static final Logger logger = LoggerFactory.getLogger(LoggController.class);
 @RequestMapping("/printLog")
 public String printLog(){
  logger.info("       ......");
  return "Hello World.....";
 }
}
2.웹 요청 로 그 를 Aop 으로 일괄 처리
1.가 져 오기 의존
코드 는 다음 과 같 습 니 다(예시).

<!--Aop  -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.Aop 처리 로그 의 클래스

@Aspect
@Component
public class WebLogAspect {
 private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
 @Pointcut("execution(public * com.oracle.order.controller.*.*(..))")
 public void webLog() {
   }
 @Before("webLog()")
 public void doBefore(JoinPoint joinPoint) throws Throwable {
   //      ,      
   ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
   HttpServletRequest request = attributes.getRequest();
   //        
   logger.info("URL : " + request.getRequestURL().toString());
   logger.info("HTTP_METHOD : " + request.getMethod());
   logger.info("IP : " + request.getRemoteAddr());
   Enumeration<String> enu = request.getParameterNames();
   while (enu.hasMoreElements()) {
   String name = (String) enu.nextElement();
   logger.info("name:{},value:{}", name, request.getParameter(name));
  }
  }
 @AfterReturning(returning = "ret", pointcut = "webLog()")
 public void doAfterReturning(Object ret) throws Throwable {
   //      ,    
   logger.info("RESPONSE : " + ret);
  }
 }
3.제어 류

@RequestMapping("/getMember")
public String getMember(String name,Integer age){
 return "success";
}
요청 경로:http://localhost:8080/getMember?name=sunny&age=12
3.lombok 플러그 인의 사용
1.가 져 오기 의존
코드 는 다음 과 같 습 니 다(예시).

<!--lombok  -->
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
</dependency>
2.lombok 플러그 인 다운로드
다운로드 동작 은 다음 과 같 습 니 다(예시).

1.  idea   
2.  idea    file
3.  settings,    plugins
4.  lombox, install    
3.lombok 플러그 인의 주석 사용
다운로드 동작 은 다음 과 같 습 니 다(예시).

@Slf4j //       log            
@Data //   Get Set toString   
public class Emp {
 String username;
 String password;
 public static void main(String[] args) {
  Emp emp = new Emp();
  emp.setUsername("sunny");
  emp.setPassword("123");
  log.info(emp.toString());
 }
}
4.Springboot 정적 자원 에 대한 매 핑 규칙
1."/*"현재 항목 의 모든 자원 에 접근 하고(정적 자원 의 폴 더)맵 을 찾 습 니 다.

"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 
"/":            html  
  :http://localhost:8080/test04.html
2.테스트 효과:
在这里插入图片描述
다음 과 같은 경로 접근 을 실현 하려 면:

http://localhost:8081/springboot/static/test04.html
             
在这里插入图片描述
2.HashMap 바 텀 원리 총화
1.hashmap 의 바 텀 데이터 구조 1.8 이전 과 1.8 의 차이 점 은?

    :1.8 (  +  ),1.8  (  +  +   )
 table  :   entry,   load
   table  ,1.8     map   ,1.8         
2.hashmap 요소 저장 과정
먼저 hash 값 을 판단 하고 통 에 요소 가 있 는 지,없 으 면 추가 하 는 지,hash 값 이 같은 지 판단 하 는 지,다 르 면 통 노드 에 체인 표를 직접 구분 합 니 다.
 링크 의 길이 가 8 보다 크 고 8 보다 크 면 빨간색 과 검은색 나무 로 바 뀌 는 지 판단 합 니 다.hash 가 같 으 면 key 내용 이 같은 지 판단 하고 같 으 면 덮어 쓰 고 링크 뒤에 추가 합 니 다.
 추가 시 빨간색 과 검은색 나무 노드 보다 크 고 직접 추가 보다 크 지 않 으 며 직접 전환 보다 크다 고 판단 합 니 다.
3.hashMap 로드 인자 왜 0.75
 로 딩 인자 가 너무 작 아서 요소 가 분산 되 고 공간 이 낭비 되 며 로 딩 인자 가 너무 커서 분포 가 복잡 하고 링크 의 길이 가 길 어 지면 서 번 거 로 움 을 겪 습 니 다.
4.hashmap 길이 가 왜 2 의 n 제곱 인지
2 의 n 제곱 이 아니라면 색인 이 같 기 쉽 고 hash 충돌 이 발생 하기 쉬 우 며 나머지 배열 공간 에 데 이 터 를 저장 하지 않 았 습 니 다.
  링크 와 검 은 나무 가 너무 길 어서 효율 이 떨어진다.
5.왜 붉 은 검 은 나무 로 바 뀌 었 을 까?
1.파 송 분포,8 확률 이 너무 적다.붉 은 검 은 나 무 를 조심해 라.
 2.메모리 일반 노드 의 두 배,노드 가 충분 할 때 빨간색 과 검은색 나 무 를 사용 하 는 것 이 비교적 수지 가 맞는다.
6.hashmap 의 구조 함 수 는 어떤 것 입 니까?
HashMap 은 4 개의 구조 함 수 를 제공 합 니 다.
  1.HashMap():기본 초기 용량(16)과 기본 로드 인자(0.75)를 가 진 빈 HashMap 을 구성 합 니 다.
  2.HashMap(int initial Capacity):지정 한 초기 용량 과 기본 로드 인자(0.75)가 있 는 빈 HashMap 을 구성 합 니 다.
  3.HashMap(int initialCapacity,float loadFactor):초기 용량 과 로드 인 자 를 지정 한 빈 HashMap 을 구성 합 니 다.
  4.HashMap(Mapm):새로운 맵 을 만 들 기 위해 맵 을 입력 하고 기본 로드 인자(0.75)를 사용 합 니 다.
SpringBoot 통합 log4j 로그 와 HashMap 의 기본 원리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 통합 log4j 로그 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기