Programming/Spring

spring social

2014. 2. 12. 16:04
반응형

spring social facebook

-로그인/개인프로필/친구정보 불러오기 테스트.

스프링 소셜 라이브러리를 사용하기 위해 먼저 maven 프로젝트를 생성.

그 전에 facebook 개발자센터에서 appId, secretKey를 발급 받고, 테스트할 URL을 등록이 필요하다. 

-pom.xml


	org.springframework.social
	spring-social-core
	1.0.2.RELEASE



	org.springframework.social
	spring-social-web
	1.0.2.RELEASE




	org.springframework.social
	spring-social-facebook
	1.0.2.RELEASE


	org.springframework.social
	spring-social-facebook-web
	1.0.2.RELEASE

-property 
#facebook appId, secretKey 
facebook.appId=575657749192479 
facebook.secretKey=df3ebe71b7eee8771c6fee1e0124f9ec 
callback.host=http://localhost:8080 

-SocialController.java
@Controller
@RequestMapping("/facebook")
@PropertySource("classpath:/setting.properties")
public class SocialController {
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
		
	@Resource
	private Environment environment;
        
	 /**
	 * index
	 * 메인
	 * @param model
	 * @param param
	 * @return
	 */
	@RequestMapping(value = "/index", method = RequestMethod.POST)
	public String index(HttpSession session, Model model){
		//facebook info setting
	    Facebook facebook = new FacebookTemplate((String)session.getAttribute("ACCESS_TOKEN"));
	    FacebookProfile profile = facebook.userOperations().getUserProfile();
	    //List friends = facebook.friendOperations().getFriendIds();
	  	//byte[] profiles = facebook.userOperations().getUserProfileImage();
	    
	    String myId = profile.getId();
		String myName = profile.getName();
		String myEmail = profile.getEmail();
		String myGender = profile.getGender();
		
		Map profileInfo = new HashMap();
		profileInfo.put("myId", myId);
		profileInfo.put("myName", myName);
		profileInfo.put("myEmail", myEmail);
		profileInfo.put("myGender", myGender);
		
		logger.info("myId=>{}", myId);
		
		model.addAttribute("profileInfo", profileInfo);
		
		return "index";
	}
	
	/**
	 * freiend Info search
	 * @param session
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/getFriendInfo")
	public String getFriendsInfo(HttpSession session, Model model){
		Facebook facebook = new FacebookTemplate((String)session.getAttribute("ACCESS_TOKEN"));
		List friends = facebook.friendOperations().getFriendIds();

		model.addAttribute("friendsList", friends);
		return "index";
	}
	
	/**
	 * facebookSignin
	 * 페이스북 로그인 팝업 호출
	 * @param response
	 * @param request
	 * @param model
	 * @return
	 * @scope user_about_me:사용자 본인 정보, publish_stream: 기본적인 쓰기권한, read_friendlists: 친구 목록       
	 * @throws Exception
	 */
	@RequestMapping(value="/facebookSignIn" , method = RequestMethod.GET)
	public String facebookSignin(HttpServletResponse response, HttpServletRequest request, Model model) throws Exception {
		logger.info("{}","facebookSignIn START");
		
        String callbackUrl = environment.getProperty("callback.host")+"/social/facebook/facebookAccessToken";
        String oauthUrl = "https://www.facebook.com/dialog/oauth?" +
                        "client_id="+ environment.getProperty("facebook.appId")+"&redirect_uri="+URLEncoder.encode(callbackUrl, "UTF-8")+
                        "&scope=user_about_me,publish_stream,read_friendlists,offline_access";
                        	
        model.addAttribute("oauthUrl", oauthUrl);
        return "home";
	}
	
	/**
	 * facebookAccessToken
	 * 페이스북 로그인 결과 리턴
	 * @param request
	 * @param model
	 * @param message
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("deprecation")
	@RequestMapping(value="/facebookAccessToken")
	public String getFacebookClientAccessToken(HttpServletRequest request, Model model, @RequestParam(value="message", defaultValue="" , required=false) String message, HttpServletResponse response) throws Exception {
		String code 			= request.getParameter("code");
		String errorReason 		= request.getParameter("error_reason");
		String errorDescription = request.getParameter("error_description");
		
		if(logger.isInfoEnabled()){
			logger.info("code => " +code);
			logger.info("errorReason code => " + errorReason);
			logger.info("errorDescription => " + errorDescription);
		}
		
		//facebook accessToken call
		requestAccesToken(request, code);
	    
	    return "callback";
	}
	
	/**
	 * facebook accessToken request
	 * 토큰값 받아옴
	 * @param request
	 * @param code
	 * @throws Exception
	 */
	public void requestAccesToken(HttpServletRequest request, String code) throws Exception{
		String accessToken = "";
		String result	   = "";

		String callbackUrl = environment.getProperty("callback.host")+"/social/facebook/facebookAccessToken";
		String url = "https://graph.facebook.com/oauth/access_token"+
	    		"?client_id="+environment.getProperty("facebook.appId")+
	    		"&client_secret="+environment.getProperty("facebook.secretKey")+
	    		"&redirect_uri="+URLEncoder.encode(callbackUrl, "UTF-8")+
	    		"&code="+code;
		
		//httpGet 통신
		HttpGet httpGet = new HttpGet(url);
		DefaultHttpClient httpClient = new DefaultHttpClient();
		result = httpClient.execute(httpGet, new BasicResponseHandler());
		accessToken = result.split("&")[0].replaceFirst("access_token=", "");
		
		//토큰값 세션처리
	    setAccessToken(request, accessToken);
	}
	
	/**
	 * setAccessToken
	 * 토큰값 세션 저장
	 * @param request
	 * @param accessToken
	 * @throws Exception
	 */
	public void setAccessToken(HttpServletRequest request, String accessToken) throws Exception {
		request.getSession().setAttribute("ACCESS_TOKEN", accessToken);
		logger.info("ACCESS_TOKEN => " + request.getSession().getAttribute("ACCESS_TOKEN"));
	}
}
-home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



	facebook 로그인 하기 Sample


Spring Social Facebook oAuth

 
-callback.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>



	facebook 로그인 하기 Sample


-index.jsp

본인정보

<이미지 태그="https://graph.facebook.com/${pInfo.myId}/picture">
myEmail: ${pInfo.myEmail}
myGender: ${pInfo.myGender}
myName: ${pInfo.myName}
myId: ${pInfo.myId}

친구정보 불러오기

<앵커 태그="${pageContext.request.contextPath}/facebook/getFriendInfo">조회
<이미지 태그="https://graph.facebook.com/${fList}/picture">${fList}


반응형

spring mvc 모델 생성

2014. 2. 11. 16:09
반응형
1. 뷰에 전달되는 모델 데이터 
@RequestMapping 매서드가 ModelAndView , Model , Map을 리턴하는 경우 이들에 담긴 모델 데이터가 뷰에 전달 된다. 또한 , 추가로 다음의 항목도 뷰에 함께 모델로 전달 된다. 
- 커맨드 객체 - @ModelAttribute 어노테이션이 적용된 매서드가 리턴한 객체 
- 매서드의 Map , Model , ModelMap 타입의 파라미터를 통해 설정된 모델 아래 코드는 다양한 방법으로 모델 데이터를 설정 하고 있다.
@Controller
public class GameSearchController {
   private SearchService searchService;

   @ModelAttribute("searchTypeList")  //리턴된 options가 searchTypeList로 뷰에 전달 된다.
   public List referenceSearchTypeList() {
      List options = new ArrayList();
      options.add(new SearchType(1,"전체"));
      options.add(new SearchType(2,"아이템"));
      options.add(new SearchType(3,"캐릭터"));
      return options;
   }

   @RequestMapping("/search/game.do");
   public ModelAndView search( @ModelAttribute("command") SearchCommand command ,
                                         ModelMap model) {
      String[] queryList = getPopularQueryList();
      model.addAttribute("popularQueryList" , queryList);  //뷰에 전달
      ModelAndView mav = new ModelAndView("search/game");
      SearchResult result = searchService.search(command);
      mav.addObject("searchResult" , result); //뷰에 전달
      return mav;
   }
} 
@ModelAttrubute 어노테이션이 적용된 referenceSearchTypeList()매서드가 리턴한 모델 객체는 "searchTypeList" 라는 이름으로 뷰에 전달 된다. 이들 모델 객체는 서로 다른 방법으로 생성 되었지만 , DispatcherServlet은 이들 모델 객체에 저장된 모델 데이터를 모두 뷰에 전달 한다.
${popularQuery}
검색 결과 : ${searchResult}
2-1. Map , Model , ModelMap을 통한 모델 설정 Map , Model , ModelMap을 이용하면 뷰에 전달할 모델을 생성할 수 있다. 1) 세가지 타입중 한가지를 파라미터로 전달 받는 방법
   
    @RequestMapping("/search1.do")
       public String search1(Map model) {
          model.put("result" , searchResult); //뷰에게 전달할 모델 데이터 추가
       }
2) Map과 Model을 리턴 하는 방법
      @RequestMapping("/search1.do")
      public Map search1() {
         HashMap model = new HashMap();
         model.put("result" , searchResult);
         return model;
      }
스프링은 org.springframework.ui.Model 인터페이스의 구현 클래스인 ExtendedModelMap 클래스를 동일한 패키지에 제공하고 있으므로 , ExtendedModelMap 클래스를 이용해서 모델을 설정 하면 된다. 
Map의 경우 많이 사용하는 java.util.HashMap클래스를 이용해서 모델을 설정 한다. 2-2. Model 인터페이스의 주요 매서드 org.springframework.ui.Model 인터페이스는 모델을 설정할 수 있도록 다음과 같은 매서드를 제공 하고 있다. Model addAttribute(String name , Object value) : value 객체를 name 이름으로 추가 한다. 
뷰 코드에서는 name으로 지정한 이름을 통해 value 사용 Model addAttribute(Object value) : value를 추가 한다. value 패키지 이름을 제외한 단순 클래스 이름을 모델 이름으로 사용 한다. 이때 첫글자는 소문자로 처리 한다. value가 배열이거나 컬렉션인 경우 첫번째 원소의 클래스 이름 뒤에 "List"를 붙인 걸 모델 이름으로 사용한다. 
이 경우에도 클래스 이름의 첫글자는 소문자로 처리 한다. 
Model addAllAttributes(Collectin values) : addAttribute(Object value) 매서드를 이용해서 컬렉션에 포함된 객체들을 차례대로 추가 한다. 
Model addAllAttributes(Map attributes) : Map에 포함된 <키,값>에 대해 키를 모델 이름으로 사용해서 값을 모델로 추가 한다. 
Model mergeAttributes(Map attributes) : Map에 포함된 <키,값>을 현재 모델에 추가 한다. 단 키와 동일한 이름을 갖는 모델 객체가 존재 하지 않는 경우에만 추가 된다. 
boolean containsAttributes(String name) : 지정한 이름의 모델 객체를 포함하고 있는 경우 true를 리턴 한다. 다음 코드는 컨트롤러 요청 처리 매서드에서 Model 타입의 파라미터를 이용해서 모델을 설정하는 예를 보여 주고 있다.
@RequestMapping("/search/game.do")
public String search(SearchCommand command , Model model) {
   model.addAttribute("searchResult" , result);
   model.addAttribute("searchTypeList" , searchTypeList);
}
 
컨트롤러 요청 처리 매서드에서 Model 타입을 리턴하고 싶다면 Model 인터페이스의 구현 클래스인 org.springframework.ui.ExtendedModelMap 클래스를 사용하면 된다.
@RequestMapping("/search.game.do")
public String search(SearchCommand) {
   Model = model = new ExtendedModelMap();
   model.addAttribute("searchResult" , result);
   return model;
}
2-3. ModelMap 클래스 org.springframework.ui.ModelMap 클래스는 Map의 구현 클래스로서 제공하는 , 컨트롤러 매서드의 파라미터를 통해서 전달 받는다. 
@RequestMapping("/search/game.do") public String search(SearchCommand command , ModelMap model) { model.addAttribute("result" , searchResult); } ModelMap 클래스가 제공하는 모델 설정 관련 매서드는 Model 인터페이스와 동일 하므로 추가 설명은 않는다.
3. ModelAndView를 통한 모델 설정
org.springframework.web.servlet.ModelAndView 클래스는 컨트롤러의 처리 결과를 보여줄 뷰와 뷰에 전달할 값을 저장하는 용도로 사용 된다.
setViewName(String viewName) 매서드를 이용하여 뷰 이름 설정 , addObject(String name , Object value) 매서드를 이용하여 뷰에 전달할 값을 추가 한다.

@RequestMapping("/search/game.do")
public ModelAndView search(SearchCommand command) {
   ModelAndView mav = new ModelAndView();
   mav.setViewName("search/game");
   mav.addObject("searchResult" ,searchResult);
   mav.addObject("searchTypeList" , typeList);
   return mav;
}
Map에 저장된 <키,값> 쌍 전체를 뷰에 전달하고 싶다면 addAllObjects(Map modelMap)매서드를 사용하면 된다. Map referenceMap = referenceData(); mav.addAllObjects(referenceMap); 생성자를 사용해서 뷰 이름과 Map을 전달할 수도 있다. 
Map referenceMap = referenceData(); return new ModelAndView("search/game" , referenceMap); 뷰에 전달할 객체가 한개 뿐이라면 생성자를 이용해서 코드 분량을 줄일 수 있다. 
return new ModelAndView("search/game" , " result" , searchResult); 


[kki.tistory.com 퍼옴]


반응형
반응형
Environment와 @PropertySource

Environment는 스프링 프레임워크 (Spring Framework)가 자동으로 Inject하는 빈 (Bean)이다. 

@PropertySource로 Property 파일을 Environment로 로딩할 수 있다.
 
SpringSocial/src/main/resources/setting.properties 파일 내용이 다음과 같다고 하자. 
#facebook appId, secretKey 
facebook.appId=575657749192479 
facebook.secretKey=df3ebe71b7eee8771c6fee1e0124f9ec 
callback.host=http://localhost:8080 
 
  • SocialController.java

실행 결과는 다음과 같다. 
facebook.appId: 575657749192479 
facebook.secretKey: df3ebe71b7eee8771c6fee1e0124f9ec

 

반응형

'Programming > Spring' 카테고리의 다른 글

spring social  (0) 2014.02.12
spring mvc 모델 생성  (0) 2014.02.11
뷰 이름 명시적 지정 :ModelAndView와 String 리턴 타입  (1) 2014.02.04
[Spring] log4j 설정파일 정보  (0) 2014.01.17
[Spring] Spring Login Interceptor 설정  (0) 2014.01.17
반응형
뷰이름의 명시적 지정

ModelAndView 나 String을 리턴해야한다. 

(ModelAndView를 리턴해서 뷰를 지정하는 예)

@RequestMapping("index.do")
public ModelAndView index() {
    ModelAndView mav = new ModelAndView("index");

    return mav;
}

ModelAndView를 리턴할 경우 ModelAndView 클래스의 생성자나 setViewName() 메서드를 이용해서 뷰 이름을 지정할 수 있다.

위 코드는 ModelAndView 클래스의 생성자를 이용해서 뷰 이름을 지정하고 있다. 다음과 같이 setViewName()메서드를 사용해도 된다.

ModelAndView mav = new ModelAndView();
mav.setViewName("search/game");

String 타입을 리턴할 경우, 문자열 값이 뷰 이름으로 사용된다. 아래 코드는 String 을 리턴하는 예를 보여주고 있다.

아래 코드는 보여줄 뷰 이름으로 "help/main" 을 지정하고 있다.

@RequestMapping("/hello/main.do")
public String helloMain("ModelMap model) {
    ...
    return "hello/main";
}
뷰 이름 자동 지정

다음의 경우는 RequestToNameTranslator를 이용해서 URL 로부터 뷰 이름을 결정한다.

◎ 리턴 타입이 Model이나 Map일경우

◎ 리턴 타입이 void 이면서 ServletResponse나 HttpservletResponse 타입의 파라미터가 없는 경우

 

스프링 설정 파일에 RequestToViewNameTranslator 빈이 존재하지 않을 경우 기본적으로 DefaultRequestToViewNameTranslator 를 사용한다. 이 클래스는 요청 URI 부터 맨 앞의 슬래시와 확장자를 제외한 나머지 부분을 뷰 이름으로 사용한다. (더 정확하게는 전체 경로를 사용하지 않도록 설정한 경우 서블릿 경로를 제외한 나머지 경로가 사용된다.) 

@RequestMapping("/search/searchInfo.do")
public Map<Sttring, Object> search() {
    HashMap<String, Object> model = new HashMap<String, Object>();
    ....
    return model;
}

 

위 코드는 뷰에 전달할 모델 데이터를 갖고 있는 Map을 리턴하고 있다. 이 경우 ReqeustToViewTranslator를 이용해서 결과를 보여줄 뷰 이름을 결정하게 되는데 ,DefaultRequestToViewNameTranslator가 사용될 경우 다음과 같이 URL로 부터 뷰 이름이 결정된다.

 /search/searchInfo.do  --> search/searchInfo

전체 경로 사용 여부에 따라서 뷰 이름이 결정되는 방식이 달라진다.

 

리다이렉트 뷰

뷰 이름에 "redirect:" 접두어를 붙이면 지정한 페이지로 리다이렉트 된다.

리다이렉트 URL은 다음과 같이 두 가지 방식으로 입력할 수 있다.

 

◎redirect : /board/list - 현재 서블릿 컨텍스트에 대한 상대적인 경로로 리다이렉트

◎redirect:http://host/bbs/list - 지정한 절대 URL로 리다이렉트

 

아래 코드는 "redirect:" 접두어를 사용하여 뷰 이름을 지정한 예이다.

ModelAndView mav = mew ModelAndView();
mav.setViewName("redirect:/error.do");
return mav;

redirect 접두어는 UrlBasedViewResolver Class를 상속받은 ViewResolver에서 처리된다. InternalResourceViewResolver or VelocityViewResolver와 같이 사용되는 ViewResolver는 UrlBasedViewResolver Class 상속받고 있기 때문에 모두 redirect 접두어를 지원하고 있다.

Map, Model ,ModelMap을 통한 모델설정

Map, Model, ModelMap을 이용하면 뷰에 전달할 모델을 생성할 수 있다.

첫 번째 방법은 이들 세 가지 타입 중 한가지를 파라미터로 전달받는 것이다.

@RequestMapping("/search1.do")
public String search1(Map model) {
    model.put("result", searchResult);
    ...
}

@RequestMapping("/search2.do")
public String search1(Model model) {
    model.addAttribute("result", searchResult);
    ...
}

@ResultMapping("/search3.do")
public String1(ModelMap model) { 
    model.addAttribute("result", searchResult);
    ...
}

Map, Model, ModelMap을 파라미터로 전달받는 경우, 이들이 제공하는 메서드를 이용해서 모델 데이터를 추가할수 있다.

두 번째 방법은 Map과 Model을 리턴하는 것이다. 이 둘은 모두 인터페이스이기 때문에 실제로는 인터페이스를 구현한 클래스의 객체를 생성해서 리턴하면된다.

사용예)

@RequestMapping("/search1.do")
public Map<String, Object> search1() {
    ...
    HashMap<String, Object> model = new HashMap<String, Object>();
    model.put("result", searchResult);
    return model;
}

@RequestMapping("/search2.do")
public Model search2() {
    ...
    Model model = new ExtendedModelMap();
    model.addAttrubute("result", searchResult);
    return model;
}

Spring은  org.springframework.ui.Model 인터페이스의 구현 클래스인 ExtendedModelMap 클래스를 동일한 패키지에 제공하고 있으므로, ExtendedModelMap 클래스를 이용해서 모델을 설정하면된다. Map의 경우 많이 사용하는 java.util.HashMap 클래스를 이용해서 모델을 설정한다.

 

Model 인터페이스의 주요 메서드

org.springframework.ui.Model 인터페이스는 모델을 설정할 수 있도록 다음과 같은 메서드를 제공한다.

 

◎ModeladdAttriibute(String name, Object value)

value 객체를 name 이름으로 추가한다. 뷰 코드에는 name으로 지정한 이름을 통해서 value를 사용한다.

 

◎ModeladdAttribute(object value)

value를 추가한다. value의 패키지 이름을 제외한 단순  클래스 이름을 모델이름으로 사용한다. 이 떄 첫 글자는 소문자로 처리한다.

value가 배열이거나 콜렉션인 경우  첫 번째 원소의 클래스 이름뒤에 "List" 를 붙일 걸 모델이름으로 사용한다. 이 경우에도 클래스 이름의 첫글자는 소문자로 처리한다.

 

◎ModeladdAllAttributes(Collection<?> values)

addAttribute(Object value)) 메서드를 이용해서 콜렉션에 포함된 객체들을 차례대로 추가한다.

 

◎ModeladdAllAttributes(Map<String,?> attributes)
Map에 포함된 <key, value>에 대해 키를 모델 이름으로 사용해서 값을 모델로 추가한다.

 

◎Model mergeAttributes(Map<String,?> attributes)

Map에 포함된 <key, value>을 현재 모델에 추가한다. 단, 키와 동일한 이름을 갖는 모델 객체가 존재하지 않는 경우에만 추가한다.

 

◎Boolean containsAttributes(String name) 

지정한 이름의 도델 객체를 포함하고 있는 경우 true를 리턴한다.

 

ModelAndView 를 통한 모델 설정

객체생성방법

ModelAndView객체 생성은 setViewName(String viewName) 메서드를 이용해서 뷰 이름을 설정하고, 

addObject(String name, Object value) 메서드를 이용해 뷰에 전달할 값을 추가하는 것이다.

@RequestMapping("/search/product.do")
public ModelAndView search(SearchCommand command) {
    ...
    ModelAndView mav = new ModelAndView();
    mav.setViewName("search/product");
    mav.addObject("searchResult", searchResult);
    mav.addObject("searchTypeList", typeList);
    return mav;
}

 

Map에 저장된 <key, value> 쌍 전체를 뷰에 전달할 값으로 ModelAndView 객체에 추가하고 싶다면 다음과 같이 addAllObjects(Map modelMap) 메서드를 사용하면 된다.

Map referenceMap = referenceDate();
mav.addAllObjects(referenceMap);

 

생성자를 사용해서 뷰 이름과 Map을 전달할 수도 있다.

Map referenceMap = referenceDate();
return new ModelAndView("search/product", referenceMap);

 

뷰에 전달할 객체가 한 개 뿐이라면 다음과 같은 생성자를 이용해서 코드 분량을 줄일 수 있을 것이다.

return new ModelAndView("search/game","result", searchResult);
반응형
반응형

[1] log4j 구조 log4j는 크게 3가지의 큰 뼈대를 가지고 있다. 

 (1) Logger: logging 메시지를 Appender에 전달. 
 (2) Appender : 전달된 로깅 메시지를 파일, 콘솔,DB에 저장 할 지 지정하는 역할을 한다. 
 (3) Layout : Appender가 어디에 출력 할 것인지 결정했다면 어떠한 형식으로 출력을 할 지 출력 layout을 결정 
 
[2] log4j level logging 레벨은 TRACE < DEBUG < INFO < WARN < ERROR and FATAL 이며, 
 (1) FATAL : 가장 크리티컬한 에러가 났을 때 사용. 
 (2) ERROR : 일반 에러가 났을 경우 사용. 
 (3) WARN : 에러는 아니지만 주의할 필요가 있을 때 사용. 
 (4) INFO : 일반 정보를 나타날 때 사용. 
 (5) DEBUG : 일반 정보를 상세히 나타낼 때 사용. 
 (6) TRACE : 가장 레벨이 낮은 단계, 보통 DEBUG로 많이 사용 debug 레벨로 했다면 INFO~FATAL까지 모두 logging이 되어집니다. 
   운영모드라면 INFO레벨로 하면 됩니다. 
 
[3] log4j 설정 예 
 (1) Appender and Layout 설정
 <appender name="console" class="org.apache.log4j.ConsoleAppender"> 	<param name="Target" value="System.out" /> 	<layout class="org.apache.log4j.PatternLayout"> 		<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p [%C{1}.%M():%L]:%m%n" /> 	</layout>  </appender>   <appender name="FILEOUT" class="org.apache.log4j.DailyRollingFileAppender"> 	<param name="Threshold" value="DEBUG" /> 	<param name="File" value="/Logs/BD/log.log" /> 	<param name="DatePattern" value="'_'yyyy-MM-dd-HH" />         <param name="Append" value="true"/> 	<layout class="org.apache.log4j.PatternLayout"> 		<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %5p [%C{1}.%M():%L]:%m%n" /> 	</layout>   </appender> 
 (2) Logger
  <logger name="com.home.social"> 	<level value="info" />   </logger>       <logger name="com.zz"> 	<level value="DEBUG" />   </logger>   <logger name="java.sql.Connection" additivity="false"> 	<level value="DEBUG" />   </logger>   <logger name="java.sql.Statement"> 	<level value="DEBUG" />   </logger>   <logger name="java.sql.PreparedStatement"> 	<level value="DEBUG" />   </logger>   <logger name="java.sql.ResultSet"> 	<level value="DEBUG" />   </logger> 

 

반응형

+ Recent posts

반응형