๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

์ž๋ฐ”๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ์ฝ˜์†”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด System.out.println()์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ”„๋ง์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”์—†์ด log4j๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋กœ๊ทธ ๊ด€๋ จํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ด€๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

 

์ด ๊ธ€์€ STS(Spring toos Suite)๋กœ ์ƒ์„ฑํ•œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. STS๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ํ•˜๋‹จ์— ๊ด€๋ จ ๊ธ€์„ ํฌ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

 

์ด ๊ธ€์€ ์ž๋ฐ”์›น์„ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  ์ฑ…์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 


log4j๋ž€?

 

 

์Šคํ”„๋ง์œผ๋กœ ๊ฐœ๋ฐœํ• ๋•Œ ๋ณด๋ฉด ์ฝ˜์†”์— ์œ„์™€ ๊ฐ™์€ ์—„์ฒญ ๋งŽ์€ ๋กœ๊ทธ๋“ค์ด ์ถœ๋ ฅ๋˜๋Š”๋ฐ ์ด ๋ชจ๋“ ๊ฒŒ log4j ๋•๋ถ„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ•  ๋‹น์‹œ์— ์‚ฌ์šฉํ–ˆ๋˜ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋“ค์€ ์‹ค์ œ๋กœ ์„œ๋น„์Šคํ•  ๋•Œ ์ „ํ˜€ ํ•„์š”์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ์ผ์ผ์ด ์ฐพ์•„์„œ ํ•ด๋‹น ๋กœ๊ทธ๋“ค์„ ์‚ญ์ œํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ์ง์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด log4j์ž…๋‹ˆ๋‹ค.

 

 

log4j.xml์„ ์ด๋ฃจ๋Š” ํƒœ๊ทธ

 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="com.myspring.pro27">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="debug" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

 

ํƒœ๊ทธ ์„ค๋ช…
<appender> ๋กœ๊ทธ์˜ ์ถœ๋ ฅ ์œ„์น˜(ํŒŒ์ผ, ์ฝ˜์†”, DB๋“ฑ)๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
<layout> appender๊ฐ€ ์–ด๋””์— ์ถœ๋ ฅํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํƒœ๊ทธ์˜€๋‹ค๋ฉด layout์€ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ• ์ง€ ์ •ํ•ด์ค๋‹ˆ๋‹ค.
<logger> ๋กœ๊น… ๋ฉ”์‹œ์ง€๋ฅผ appender์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. logger๋Š” 6๋‹จ๊ณ„์˜ ๋ ˆ๋ฒจ์„ ๊ฐ€์ง€๋ฉฐ, ๋ ˆ๋ฒจ์„ ๊ฐ€์ง€๊ณ  ์ถœ๋ ฅ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

 

# appender๊ฐ€ ๊ฐ€์ง€๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํด๋ž˜์Šค

 

appender ํด๋ž˜์Šค ์„ค๋ช…
ConsoleAppender org.apache.log4j.ConsoleAppender ํด๋ž˜์Šค๋กœ, ์ฝ˜์†”์— ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
FileAppender org.apache.log4j.FileAppender ํด๋ž˜์Šค๋กœ, ํŒŒ์ผ์— ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
RollingFileAppender org.apache.log4j.rolling.RollingFileAppender ํด๋ž˜์Šค๋กœ, ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ผ์ • ๊ธฐ์ค€์„ ๋„˜์œผ๋ฉด ๊ธฐ์กด ํŒŒ์ผ์„ ๋ฐฑ์—… ํŒŒ์ผ๋กœ ๋ฐ”๊พธ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
DailyRollingAppender org.apache.log4j.rolling.DailyRollingFileAppender ํด๋ž˜์Šค๋กœ, ์„ค์ •ํ•œ ๊ธฐ๊ฐ„ ๋‹จ์œ„๋กœ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

 

# PatternLayout ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ๋“ค

 

์†์„ฑ ์„ค๋ช…
%p debug, info ๋“ฑ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ด๋ฆ„ ์ถœ๋ ฅ
%m ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
%d ๋กœ๊น… ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ๊ฐ ์ถœ๋ ฅ (yyyy-MM-dd HH:mm:ss)
%c ๋กœ๊น… ๋ฉ”์‹œ์ง€ ์•ž์— ์ „์ฒด ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด๋‚˜ ์ „์ฒด ํŒŒ์ผ ์ด๋ฆ„ ์ถœ๋ ฅ

 

์ด์™ธ์—๋„ ๋” ๋งŽ์ด ์žˆ์œผ๋‹ˆ ์ง์ ‘ ์ฐพ์•„๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

http://logging.apache.org/log4j/1.2/manual.html

 

# log4j์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋กœ๊ทธ ๋ ˆ๋ฒจ

 

๋ ˆ๋ฒจ ์„ค๋ช…
FATAL(6๋ ˆ๋ฒจ) ์‹œ์Šคํ…œ ์ฐจ์›์—์„œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์˜ ๋ ˆ๋ฒจ์ž…๋‹ˆ๋‹ค.
ERROR ์‹คํ–‰ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
WARN ์‹œ์Šคํ…œ ์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
INFO ๋กœ๊ทธ์ธ, ์ƒํƒœ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์˜๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
DEBUG ๊ฐœ๋ฐœ ์‹œ ๋””๋ฒ„๊น… ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
TRACE(1๋‹จ๊ณ„) DEBUG๋ณด๋‹ค ์ƒ์„ธํ•œ ๋กœ๊น… ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ๋‚ฎ์€ TRACE๋ฅผ ์‹œ์ž‘ํ•ด FATAL ๋ ˆ๋ฒจ๊นŒ์ง€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •ํ•œ ๋ ˆ๋ฒจ๋ณด๋‹ค ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ๋ฉ”์‹œ์ง€๋“ค์€ ์ถœ๋ ฅ๋˜์ง€ ์•Š์ง€๋งŒ, ๊ทธ๋ณด๋‹ค ๋†’์€ ๋ ˆ๋ฒจ์˜ ๋ฉ”์‹œ์ง€๋“ค์€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ INFO๋กœ ์„ค์ •ํ–ˆ๋‹ค๋ฉด DEBUG์™€ TRACE ๊ด€๋ จ ๋ฉ”์‹œ์ง€๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š์ง€๋งŒ, ๊ทธ๋ณด๋‹ค ๋†’์€ ๋‚˜๋จธ์ง€ 3๋ ˆ๋ฒจ์€ INFO์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 


์˜ˆ์‹œ

 

@Controller("memberController")

public class MemberControllerImpl   implements MemberController {
	private static final Logger logger = LoggerFactory.getLogger(MemberControllerImpl.class);
	@Autowired
	private MemberService memberService;
	@Autowired
	private MemberVO memberVO ;
	
	@Override
	@RequestMapping(value="/member/listMembers.do" ,method = RequestMethod.GET)
	public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String viewName = getViewName(request);
		logger.info("viewName: "+ viewName);
		logger.debug("viewName: "+ viewName);
		List membersList = memberService.listMembers();
		ModelAndView mav = new ModelAndView("home");
		mav.addObject("membersList", membersList);
		return mav;
	}

 

info๋งŒ ์ถœ๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ log4j.xml์—์„œ logger๊ฐ€ info๋กœ ๋˜์–ด์žˆ๋‹ค๋ฉด logger.debug ๊ด€๋ จ ๋กœ๊ทธ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

debug ๋˜ํ•œ ์ถœ๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

logger์˜ ๋ ˆ๋ฒจ์€ debug๋กœ ๋‚ฎ์ถ”์—ˆ๋”๋‹ˆ debug ๋˜ํ•œ ์ถœ๋ ฅ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 


๋งˆ์ด๋ฐ”ํ‹ฐ์Šค SQL๋ฌธ์„ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

 

<!-- Root Logger --> 
<root> 
	<priority value="debug" /> 
	<appender-ref ref="console" /> 
</root>

 

log4j.xml์—์„œ root logger์˜ ์†์„ฑ๊ฐ’์„ debug๋กœ ํ•ด์ฃผ๋ฉด sql ๋˜ํ•œ ์ถœ๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค.

 

SQL ๋ฌธ๋„ ์ถœ๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ƒ log4j.xml์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
profile on loading

Loading...