Tag Archives: Log

[Java/Android] try – catch 사용시에 Exception 안드로이드 Log로 출력하기

[code]public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

String nullValue = null;

try
{
nullValue.equals(“must be exception”);
}
catch(Exception e)
{
e.printStackTrace();
}

}[/code]
위의 같은 예제가 있다고 가정을 해봅시다. 위의 try – catch문은 이클립스에서 자동완성을 하여 자동으로 붙은 코드입니다. 위의 경우에는 기존의 Java어플리케이션에서는 문제가 없지만 안드로이드에서는 다음과 같은 문제가 있습니다.
사용자 삽입 이미지사실 이렇게 보니 또 문제가 없어보이네요. 아무튼 각설하고 왼쪽의 System.err를 보시면 안드로이드 고유의 Log를 사용하지 않고 에러가 출력되어 내가 의도한 로그의 Tag정보가 없는것이 현실입니다.

안드로이드에서 사용할 수 있는 형태로 로그를 출력하기 위해서는 다음과 같은 방법을 사용하시면 됩니다. 비슷한 예로 출력할 에러를 문자열 변수로 받고자 할때도 쓸 수 있습니다.
[code]try
{
nullValue.equals(“must be exception”);
}
catch(Exception e)
{
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsStrting = sw.toString();

Log.e(“StackTraceExampleActivity”, exceptionAsStrting);
}[/code]
사용자 삽입 이미지이제 위와같이 에러가 출력이 됩니다. 물론 이클립스 ADT플러그인에서 설정을 일부러 끄신게 아니라면 로그를 더블클릭하여 에러 위치로 이동하는것 역시 가능합니다.

1346383891.zip
참고: http://stackoverflow.com/questions/1149703/stacktrace-to-string-in-java

[Apache] SetEnvIf를 이용하여 Access Log 기록 여부 변경 하기

Apache에서는 SetEnvIf를 이용하여 로그 여부를 정의할 수 있습니다.

특정 설정을 환경변수로 저장 후에 그것을 이용하여 로그 여부를 정의하는 식으로 하시면 됩니다.
[code]SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] …[/code]

첫번째 인자인 attribute에는 다음의 값이 들어갈 수 있습니다.

1. HTTP HEADER


  • Host

  • User-Agent

  • Referer

  • Accept-Language
2. COMMON


  • Remote_Host – 요청하는 클라이언트의 호스트명

  • Remote_Addr – 요청하는 클라이언트의 IP 주소

  • Server_Addr – 요청을 받는 서버의 IP 주소

  • Request_Method – 사용한 Method 명 (GET, POST 등)

  • Request_Protocol – 요청의 프로토콜 이름과 버젼 (“HTTP/1.1” 등)

  • Request_URI – 요청의 Query String을 제외한 호스트명 이후의 주소
3. 기존의 환경 변수

특정 IP의 접속을 로그로 남기지 않을 경우에는 다음과 같은 설정을 하여 로그를 남기지 않도록 할 수 있습니다.
[code]SetEnvIf Remote_Addr “123.123.123.123” dont_log[/code]
적용할 가상 호스트의 로그 부분에 다음과 같이 추가합니다.
[code]CustomLog logs/access_log common env=!dont_log[/code]
access_log를 기록할때 dont_log 환경변수가 없을경우에만 기록을 하라는 것으로 생각하면 됩니다.