μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python
- κΉλ―Έκ²½μλ§νμμ
- μ€λΈμ
- μλ°μ€ν¬λ¦½νΈ
- μ½λ©
- κ°λ°
- λ μ
- μ 리νΈλ¦¬νΈ
- html
- λ°°μμ λ°°μ
- νμ²μ 리νΈλ¦¬νΈ
- λ°μ΄ν°λ² μ΄μ€
- μν
- μΉ΄νλκ°
- νμ΄μ¬
- Java
- database
- μΉνΌλΈλ¦¬μ±
- κ°μ΄ν μ’ λκ°λΉ
- Kλ°°ν°λ¦¬λ 볼루μ
- ν°μ€ν 리μ±λ¦°μ§
- λ°μν
- css
- μλ°
- μ±
- JavaScript
- λκ°
- νλ‘κ·Έλλ°
- μνμ£Ό
- μ€λΌν΄
- Today
- Total
JiYoung Dev π₯
λ‘κ·Έ λ 벨 λ° λ‘κ·Έ μμ± κΈ°μ€ λ³Έλ¬Έ
μ΄μμ€μΈ μ루μ μμ λ¬Έμ κ° λ°μν΄ μμΈμ νμ νλ €λλ°, μλ¬λ₯Ό μ μΈν debugλ info λ‘κ·Έκ° νλλ μ°νμ§ μμ μμΈμ νμ ν μ μλ μΌμ΄ λ°μνμλ€. κ·Έλμ μ΄λ²μ λ‘κ·Έ μ°λ μμ€λ₯Ό μΆκ°ν΄ ν¨μΉλ₯Ό νκ² λμλλ° μ΄λ»κ² λ‘κ·Έλ₯Ό μ°μ΄μΌ μ΄μν λ μνλ₯Ό μ λͺ¨λν°λ§ ν μ μμμ§ κ³ λ―Όνκ² λμκ³ , μ΄λ² κΈμ μμ±νκ² λμλ€.
π λ‘κ·Έ(Log)μ λͺ©μ
λ‘κ·Έλ μμ€ν μ΄λ μ ν리μΌμ΄μ μμ λ°μνλ λͺ¨λ μ΄λ²€νΈμ κΈ°λ‘μΌλ‘, κ°λ°μμ μ΄μ νμ΄ μμ€ν μ μ±λ₯μ λΆμνκ³ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° μ€μν μ 보λ₯Ό μ 곡νλ€.
- μλΉμ€ λμ μν νμ
- μ₯μ νμ λ° μλ¦Ό
- λ‘κ·Έ λΆμμ ν΅ν μλΉμ€ μ§νμ νμΈ, νΈλμμ , μ±λ₯ νμ
νμ§λ§ λκ·λͺ¨ μμ€ν μμλ λ§€μΌ μμ GBμ λ¬νλ λ‘κ·Έ λ°μ΄ν°κ° μμ±λ μ μμ΄ μ΄λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νμ§ μμΌλ©΄ μ€μν μ 보λ₯Ό λμΉκ±°λ λ¬Έμ ν΄κ²°μ νμν μκ°μ΄ κΈΈμ΄μ§ μ μλ€.
λ°λΌμ λ‘κ·Έλ₯Ό μμ±ν λμλ κΌ νμν λ‘κ·ΈμΈμ§ νμΈνκ³ , μμ€ν μν νμ μ μν΄ λμΉλ λΆλΆμ μλμ§ μκ°ν΄κ°λ©° μμ±ν΄μΌ νλ€.
π λ‘κ·Έ λ 벨(Log Level)
λ‘κ·Έ λ 벨μ λ‘κ·Έ λ©μμ§μ μ€μλλ₯Ό λνλ΄λ μμ€μΌλ‘ ALLμμ OFFλ₯Ό ν¬ν¨νμ¬ 8κ°μ λ λ²¨μ΄ μλ€. νμ§λ§ 보ν΅μ ALL, OFFλ₯Ό μ μΈν 6λ¨κ³λ₯Ό μ΄μΌκΈ° νλ€.
- TRACE
- κ°μ₯ μμΈν λ‘κ·Έ λ 벨λ‘, μ ν리μΌμ΄μ μ μ€ν νλ¦κ³Ό λλ²κΉ μ 보λ₯Ό μμΈν κΈ°λ‘νλ€. μ£Όλ‘ λλ²κΉ μ μ¬μ©νλ€.
- DEBUG
- λλ²κΉ λͺ©μ μΌλ‘ μ¬μ©λλ©°, κ°λ° λ¨κ³μμ μμΈν μ 보λ₯Ό κΈ°λ‘νλ€.
- μ ν리μΌμ΄μ μ λ΄λΆ λμμ μ΄ν΄νκ³ λ¬Έμ λ₯Ό λΆμνλ λ° λμμ μ€λ€.
- INFO
- μ λ³΄μ± λ©μμ§λ₯Ό κΈ°λ‘νλ€.
- μ ν리μΌμ΄μ μ μ£Όμ μ΄λ²€νΈλ μ€ν μνμ λν μ 보λ₯Ό μ λ¬νλ€.
- WARN
- κ²½κ³ μ± λ©μμ§λ₯Ό κΈ°λ‘νλ€.
- μμμΉ λͺ»ν λ¬Έμ λ μ μ¬μ μΈ μ€λ₯ μν©μ μ리λ λ©μμ§μ΄λ€.
- μ ν리μΌμ΄μ μ΄ μ μμ μΌλ‘ λμνμ§λ§ μ£Όμκ° νμν μν©μ μλ €μ€λ€.
- ERROR
- μ€λ₯ λ©μμ§λ₯Ό κΈ°λ‘νλ€.
- μ¬κ°ν λ¬Έμ λλ μμΈ μν©μ λνλ΄λ©°, μ ν리μΌμ΄μ μ μ μμ μΈ λμμ μν₯μ λ―ΈμΉ μ μλ λ¬Έμ λ₯Ό μλ¦°λ€.
- FETAL
- κ°μ₯ μ¬κ°ν μ€λ₯ λ©μμ§λ₯Ό κΈ°λ‘νλ€.
- μ ν리μΌμ΄μ μ λμμ μ€λ¨μν¬ μ μλ μΉλͺ μ μΈ μ€λ₯λ₯Ό λνλΈλ€.
- μΌλ°μ μΌλ‘ μ΄λ¬ν μ€λ₯λ λ³΅κ΅¬κ° λΆκ°λ₯νκ±°λ λ§€μ° μ΄λ €μ΄ μν©μ μλ―Ένλ€.
π MVC ν¨ν΄μμμ λ‘κ·Έ μ μ©
μμμ κ° λ‘κ·Έ λ 벨μ λν΄ μμ보μλλ°, μ€μ λ‘λ μ΄λ»κ² μ μ©ν΄μΌ νλμ§ μλΏμ§ μμλ€. λ°λΌμ νμ¬ μ΄μ μλ²μ μ μ©λ λμμΈ ν¨ν΄μΈ MVC ν¨ν΄μμ κ° κ³μΈ΅λ³λ‘ μ΄λ»κ² λ‘κ·Έλ₯Ό μ μ©νλ κ²μ΄ μ’μμ§ μμ보μλ€.
1. Controller κ³μΈ΅
- INFO: κ° μμ²μ μμκ³Ό λμ λν λ‘κ·Έλ₯Ό κΈ°λ‘νλ κ²μ΄ μ μ©ν¨
- WARN: μ λ ₯ κ°μ΄ μμ λ²μλ₯Ό λ²μ΄λ¬μ λ νΉμ κΆνμ΄ λΆμ‘±ν κ²½μ°
- ERROR: μ€μ μ€λ₯κ° λ°μνμ λ
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
private static final Logger logger = LogManager.getLogger(UserController.class);
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
logger.info("User request received for ID: {}", id);
try {
User user = userService.getUserById(id);
logger.info("User retrieved successfully for ID: {}", id);
return ResponseEntity.ok(user);
} catch (UserNotFoundException e) {
logger.warn("User not found for ID: {}", id);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
} catch (Exception e) {
logger.error("An error occurred while retrieving user for ID: {}. Error: {}", id, e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
}
2. Service κ³μΈ΅
- DEBUG: νΉμ 쑰건μ λ§μ‘±νμ λ λΆκΈ°λλ λ‘μ§μ΄λ 볡μ‘ν μ°μ°μ μνν λ μ€κ° κ²°κ³Ό κΈ°λ‘
- INFO: λΉμ¦λμ€ νλ‘μΈμ€ μλ£μ(ex. νμκ°μ μλ£, μ£Όλ¬Έ μμ± μλ£ λ±)
- WARN: μ μ¬μ λ¬Έμ μν©
- ERROR: μμΈ λ°μμ
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private static final Logger logger = LogManager.getLogger(UserService.class);
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserById(Long id) throws UserNotFoundException {
logger.debug("Looking up user with ID: {}", id);
User user = userRepository.findById(id).orElseThrow(() -> {
logger.warn("User with ID {} not found in the database.", id);
return new UserNotFoundException("User not found");
});
logger.info("User found: {}", user.getUsername());
return user;
}
}
3. Repository κ³μΈ΅
- TRACE: λ°μ΄ν°λ² μ΄μ€ 쿼리μ κ΄λ ¨λ μμΈ μ 보 κΈ°λ‘ν λ
- DEBUG: 쿼리 μ€ν κ²°κ³Ό νΉμ λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ© κΈ°λ‘
- ERROR: λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μμ μ€μ μλ¬κ° λ°μν κ²½μ°
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
public class UserRepositoryImpl {
private static final Logger logger = LogManager.getLogger(UserRepositoryImpl.class);
public User findUserById(Long id) {
try {
logger.trace("Executing SQL query to find user with ID: {}", id);
User user = findById(id); // Assume findById is implemented to get User from DB
logger.debug("User data retrieved from database: {}", user);
return user;
} catch (Exception e) {
logger.error("Database error while fetching user with ID: {}. Error: {}", id, e.getMessage());
throw e;
}
}
}
π μ°Έκ³ μλ£
https://velog.io/@ykh9759/%EB%A1%9C%EA%B7%B8-%EB%A0%88%EB%B2%A8Logging-Level
https://developsd.tistory.com/132
'Study > Back-End' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
DBCP ValidationQuery μ΄ν΄ λ° μ€μ νκΈ° (0) | 2024.11.25 |
---|---|
νκ²½λ³μ(PATH) μ΄ν΄νκΈ° (1) | 2024.11.20 |
[Node.js] Expressμ listen λ° Cors μ€μ (1) | 2024.11.07 |
Nginxλ‘ Reverse Proxy μ€μ νκΈ° (0) | 2024.11.06 |
[Spring - Android] JPA νμ© μ°λνκΈ° (2023.07.20~21) (0) | 2023.07.20 |