문제

현재 작업중 인 웹 애플리케이션에 로그인을 구현할 계획이지만 세부 사항 중 일부로 어려움을 겪고 있습니다. Java 웹 응용 프로그램을 기록하는 가장 좋은 방법은 무엇입니까?

구체적으로;

  • 구성 파일은 .war 패키지 파일에서 어디로가됩니까?
  • 사람들은 어디에서, 상대적 또는 절대 경로 플랫 파일 또는 데이터베이스에 로그인합니까?
  • Log4J Logging이 Application Server Log 파일에 직접 들어가거나 설정 해야하는 것이 있습니까? 이 경우 Tomcat을 사용하고 있지만 종종 Jrun을 사용합니다.
  • 웹 애플리케이션 로깅에 대해 알아야 할 다른 Gotchas가 있습니까?

현재 LOG4J를 사용하고 있지만 모범 사례는 모든 로깅 구현에 보편적으로 적용될 것이라고 생각합니다.

편집하다:
질문에 추가 된 것 중 하나입니다.

  • 로그 구성을 어디에서 시작합니까?

전통적인 앱에서는 진입 점에서 이것을합니다.

DOMConfigurator.configureAndWatch("log4j.xml");

웹 애플리케이션은 무엇입니까?

도움이 되었습니까?

해결책

기본 패키지에 구성을 배치합니다 : SRC/

$ {catalina.home} 시스템 속성을 사용하여 파일에 로그인하십시오.

log4j.appender.???.file=${catalina.home}/logs/system.log

다른 팁

사용하는 것이 좋습니다 SLF4J. 이것은 대부분의 인기있는 로깅 시스템을 지원하는 간단한 로깅 정면입니다 (log4J, 커먼즈 로깅, Java 로깅 API 그리고 로그백). 그것을 사용하고, 밑줄 로깅 시스템을 교체 할 수 있습니다 다른 사람에게는 간단한 클래스 경로 업데이트에 의해.

다른 이익 SLF4J ~이다 매개 변수화 된 호출, 추악한 로깅 코드를 줄입니다.

실제로, 그들은 사용하는 것이 좋습니다 SLF4J ~와 함께 로그백. 로그백 후계자입니다 log4J. 그리고 그것은 같은 저자가 설계했습니다.

구성 파일은 .war 패키지 파일에서 어디로가됩니까?클래스 경로의 뿌리.

사람들은 어디에서, 상대적 또는 절대 경로 플랫 파일 또는 데이터베이스에 로그인합니까?필요에 따라 다릅니다. 상대 경로를 사용하는 것이 항상 좋습니다. 데이터베이스는 로그를 가져오고 이메일/SMS를 사용하여 보내는 다른 응용 프로그램을 구현하는 경우 데이터베이스가 좋습니다.

Log4J Logging이 Application Server Log 파일에 직접 들어가거나 설정 해야하는 것이 있습니까? 이 경우 Tomcat을 사용하고 있지만 종종 Jrun을 사용합니다.콘솔 appender를 사용하는 경우 예, 서블릿 컨테이너 로그 파일에 로그인됩니다.

웹 애플리케이션 로깅에 대해 알아야 할 다른 Gotchas가 있습니까?다른 스레드에서 로깅하는 경우 사용합니다 로그백, 스레드-안전하고 매개 변수화 된 로그 메시지를 노출시킵니다.

DB 로그인하면 또 다른 실패 지점이 추가됩니다. 우리는 PROD 서버가 DB에 로그인 한 상황이 있었고 누군가 DB에 비싼 쿼리를 실행하여 ProD 서버가 매우 느려졌을 정도로 너무 느려졌습니다. 공간이 부족한 경우 파일에 로그인하면 문제가 발생할 수 있지만 전체 앱 속도가 느려질 가능성이 적습니다.

관리 파일을 웹 앱을 재건하지 않고 관리자가 수정할 수있는 곳에 구성 파일을 배치하는 것이 좋습니다 (예 : 한밤중에 깨어나지 않고 세부 로깅을 켤 수 있음).

불행히도, 웹 앱에서 외부 리소스를 찾는 "공식적인"방법은 없습니다 (내가 틀렸다면 수정). 내가 본 가장 일반적인 방법은 클래스 경로의 디렉토리를 살펴 보는 것입니다.

SLF4J를 통해 로그 API (log4J)를 호출하는 것이 좋습니다. Log4J를 사용하더라도 웹 컨테이너 또는 모듈에 의존하면 java.util.logging 또는 jakarta commons 로깅과 같은 다른 Log API를 사용할 수 있습니다. SLF4J는 SLF4J API로 리디렉션하는 브리지 모듈을 제공합니다. 결과적으로 모든 로그 메시지는이 경우 LOG4J에 의해 작성됩니다.

훌륭한 종이 응용 프로그램 로깅을 올바르게 수행하는 방법 gotchas가 많이 있습니다.

나는 당신의 다른 질문 들이이 페이지의 다른 사람들에 의해 답변되었다고 생각합니다.

또한 SLF4J를 사용하는 것이 좋습니다.

마지막 한 가지 : 물체의 말할 수있는 표현 시간을 절약 할 수 있습니다.

  • Log4J를 컨테이너 (서버)에 넣고 응용 프로그램 당 적절한 부록을 만듭니다.
  • 서버 경로와 관련이 있지만 귀하의 요구에 따라 다릅니다.
  • 우리는 다른 파일에 로그인하는 부록을 사용하고 귀하의 요구에 따라 다릅니다. 예를 들어 최대 절전 모드 정보/통계 용 파일, 응용 프로그램 만 등.
  • 많이 로그인하지 말고 응용 프로그램이 느려집니다.

개인적으로 Log4J.Properties를 Web-Inf 디렉토리에 넣고 다음 코드와 함께 Init Servlet을 사용합니다.

public class InitServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

private static final String LOG4J_FILE = "WEB-INF/log4j.properties";

public InitServlet() {
    super();
}

@Override
public void init() throws ServletException {
    super.init();
    PropertyConfigurator.configure(getServletContext().getRealPath(LOG4J_FILE));
    LogFactory.getLog(InitServlet.class).info("LOG 4J configured");
}

}

  • 구성 파일은 .war 패키지 파일에서 어디로가됩니까?

ClassPath의 루트에서는 ... 구성 파일을 전쟁 패키지에 넣지 마십시오. 로깅 구성을 변경하면 재 포장 및 응용 프로그램을 재배치하고 싶지 않습니까? 더 나은 관행은 구성 파일을 전쟁 외부의 클래스 경로 어딘가에 놓는 것입니다.

  • 사람들은 어디에서, 상대적 또는 절대 경로 플랫 파일 또는 데이터베이스에 로그인합니까?

나는 보통 a의 파일 시스템에 로그인합니다 별도의 파티션 (로그 파일은 매우 빠르게 성장할 수 있으며 너무 커지면 응용 프로그램이나 운영 체제를 차단해서는 안됩니다). 나는 대부분의 시간을 사용합니다 절대 경로 다음 모델에 따라 :/var/projects/u003CPROJECT_NAME> /u003CPRODUCT> /u003CCLUSTER_NAME> /로그/u003CINSTANCE_NAME> .Log 어디u003CPROJECT_NAME> 프로젝트 이름,u003CPRODUCT> Apache, Tomcat, Weblogic, ...,u003CCLUSTER_NAME> 클러스터의 이름과u003CINSTANCE_NAME> 클러스터 내부의 인스턴스 이름. 파일 시스템에 로깅은 데이터베이스보다 빠릅니다. 단점은 여러 인스턴스와 물리적 기계를 사용하는 경우 로그가 중앙 집중화되지 않는다는 것입니다. 그러나 스크립트로 쉽게 병합 할 수 있습니다.

  • Log4J Logging이 Application Server Log 파일에 직접 들어가거나 설정 해야하는 것이 있습니까? 이 경우 Tomcat을 사용하고 있지만 종종 Jrun을 사용합니다.

응용 프로그램 서버 로그는 응용 프로그램 로그가 아닌 응용 프로그램 서버 로그입니다. 그들에게 쓰지 말고 로거 도구 (예 : log4J)를 설정하고 응용 프로그램 로그 (전용 이해)에 씁니다.

  • 웹 애플리케이션 로깅에 대해 알아야 할 다른 Gotchas가 있습니까?

log4J를 사용하는 경우 로그인하기 전에 isdebugenabled ()를 사용하는 것을 잊지 마십시오.

if(logger.isDebugEnabled()) {
  logger.debug("Bla Bla Bla");
}
  • 구성 파일은 .war 패키지 파일에서 어디로가됩니까?

일반적으로 로깅 구성에 응용 프로그램에 로깅 구성을 배치하지 않고 오히려 로깅 서버 전체를 구성하기 위해 AppServer Admins에 맡기십시오. 드문 경우 Log4J 구성을 WebApp과 함께 배포하려는 경우 Web-INF가 일반적인 경로입니다.

  • 사람들은 어디에서, 상대적 또는 절대 경로 플랫 파일 또는 데이터베이스에 로그인합니까?

다시, AppServer 설정에 따라 다릅니다. AppServer 및 매일 회전하는 공통 로그 파일 중 하나는 일반적인 설정입니다. 앱 특정 요구가있는 경우 관리자는 앱에 대해 별도의 로그 파일을 구성 할 수 있습니다 (패키지 / 클래스 이름별로 구별).

  • Log4J Logging이 Application Server Log 파일에 직접 들어가거나 설정 해야하는 것이 있습니까? 이 경우 Tomcat을 사용하고 있지만 종종 Jrun을 사용합니다.

위 참조. 개발 목적으로 사용되는 Tomcat의 경우 로깅 (LOG4J) 구성을 찾아서 앱 특정 특정 추가를 추가합니다.

  • 웹 애플리케이션 로깅에 대해 알아야 할 다른 Gotchas가 있습니까? 성능. 로그 레벨을 최소로 제한하십시오 (예 : 경고 또는 오류). 사용if (log.isDebugEnabled()) { log.debug("..."); } 코드의 구성이 모두 있습니다.

약간의 로깅이 필요한 경우 Servlet 표준은 ServletContext를 가져 와서 로그 메소드를 사용할 수 있음을 지정합니다. 이것이 System.out.println과 동등한 일반적인 서블릿입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top