์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- ์นดํ๋๊ฐ
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ฐฐ์์ ๋ฐฐ์
- ์ฝ๋ฉ
- ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ ์
- database
- dmz๋คํธ์ํฌ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋๊ฐ
- ํ์ด์ฌ
- ๋ฐฉํ๋ฒฝdmz
- ์๋ฐ
- ๋คํธ์ํฌdmz
- ์ฑ
- Java
- ํ๋ก๊ทธ๋๋ฐ
- JavaScript
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ค๋ธ์
- dmz๋
- ์ค๋ผํด
- ์นํผ๋ธ๋ฆฌ์ฑ
- Python
- css
- dmz๊ตฌ์ฑ
- ์ํ
- html
- ๊ฐ๋ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- 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
๋ก๊ทธ ๋ ๋ฒจ(Logging Level)
๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋ผ ํ์ํ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.๋ก๊น ๋ ๋ฒจ์ ALL๊ณผ OFF๋ฅผ ํฌํจํ๋ฉด 8๊ฐ ์ด์ง๋ง ๋ณดํต ALL๊ณผ OFF๋ฅผ ์ ์ธํ 6๋จ๊ณ๋ฅผ ์ด์ผ๊ธฐํ๋ค.ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFFALL: ๊ฐ์ฅ ์์ธ
velog.io
https://developsd.tistory.com/132
Log ๋ก๊ทธ๋ ์ ์ฌ์ฉํ๋ ๊ฒ์ธ๊ฐ? ๋ก๊ทธ ๋ ๋ฒจ ์ ๋ฆฌ
Log ๋ก๊ทธ๋ ์ ์ ๋ ๊ฒ์ธ๊ฐ? ๋ก๊ทธ๋ฅผ ์ ๋ ๊ฒฝ์ฐ ๋ก๊ทธ ์์ฑ ๋ชฉ์ ๊ณผ ์๊ตฌ์ฌํญ์ ๋ํ ํ์ ์ด ์ฐ์ ํ์ํ๋ค. ์์ค ์ฝ๋์ ๋ก๊ทธ๋ฅผ ๋ง์ด ์ ๊ฒ ๋๋ฉด ์คํ๋ ค ์ด์ํ๋ฉด์ ๋ง์ ๋ก๊ทธ๋ก ์ธํด ๋๋ฒ๊น ์ด ๋ ๋ถ
developsd.tistory.com
'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 |