2014-04-19 4 views
1

그래서 나는이 기능을 가지고 :소켓 로깅이 요청하지

그것은 작동하지만 다음 그것의 많은 로그를 채워
public HashMap<String, Object> ping(String ip, int port) { 
    try { 
     Socket sock = new Socket(); 
     sock.setSoTimeout(1000); 
     sock.connect(new InetSocketAddress(ip, port), 1000); 

     DataOutputStream out = new DataOutputStream(sock.getOutputStream()); 
     DataInputStream in = new DataInputStream(sock.getInputStream()); 

     out.write(0xFE); 

     int b; 
     StringBuilder str = new StringBuilder(); 
     while ((b = in.read()) != -1) { 
      if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) { 
       str.append((char) b); 
       System.out.println(b + ":" + ((char) b)); 
      } 
     } 

     String[] data = str.toString().split("§"); 
     String serverMotd = data[0]; 
     int onlinePlayers = Integer.parseInt(data[1]); 
     int maxPlayers = Integer.parseInt(data[2]); 

     HashMap<String, Object> map = new HashMap<>(); 

     map.put("motd", serverMotd); 
     map.put("online", onlinePlayers); 
     map.put("max", maxPlayers); 

     return map; 

    } catch (UnknownHostException e) { 
    } catch (IOException e) { 
    } 
    return null; 
} 

. 어떻게 내가 이걸 없앨 수 있니?

[13:26:41 INFO]: 32: 
[13:26:44 INFO]: 115:s 
[13:26:44 INFO]: 32: 
[13:26:44 INFO]: 38:& 
[13:26:44 INFO]: 114:r 
[13:26:44 INFO]: 105:i 

이 무시 : 난 그냥 내 대답은 코드가 대부분이지만, 내가 말할 더 주목 한 것처럼 보이기 때문에 공간을 채우기 위해거야 그래서 간단한 해결책이있다 확신 해요.

업데이트 : 숫자 뒤에 오는 각 문자는 응답의 일부입니다. 예를 들어 문자열이 "lol"인 경우 이러한 문자 중 3 개가 각 문자에 대해 하나씩 기록됩니다.

+0

로거가 보이지 않는데, 어디에서 신고합니까? \ – hexafraction

+0

왜 비어있는 캐치가 있습니까?! –

+0

누가 로그했는지 알아야합니다. 어느 도서관을 이용합니까? Log4j, slf4j ... 범주를 인쇄하도록 구성해야합니다. 그러면 누가 책임이 있는지 알 수 있습니다. 그런 다음이 메시지를 수정하거나 로깅을 구성하여 이러한 메시지를 숨길 수 있습니다. –

답변

2

귀하의 system.out 내용과 유사합니다. 응용 프로그램 서버는 표준 출력과 오류 스트림을 로그로 리디렉션합니다. 그걸 없애고 싶으면 그 줄을 주석 처리하십시오.

System.out.println(b + ":" + ((char) b)); 
관련 문제