JSP

Development/JSP & Servlet 2012. 2. 5. 10:06

jsp는 java servlet 보다 늦게 등장했다.







자바 서버 페이지(JavaServer Pages, JSP)는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다.

자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 이와 비슷한 구조인 것인 PHPASPASP.NET 등도 있다.

아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.

[편집]동작구조

클라이언트에서 서비스가 요청되면, JSP의 실행을 요구하고, JSP는 웹 애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다. 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다.

[편집]버전의 역사

자바 서버 페이지 API 역사
자바 서버 페이지 version발표자바 플랫폼중요한 변화
JSP 2.1JSR 245
JSP 2.0JSR 152
JSP 1.2JSR 53

[편집]바깥고리







JavaServer Pages ( JSP )는 HTML 내에 Java 코드를 묻어두고, Web 서버 에서 동적으로 웹 페이지 를 생성하여 클라이언트에 반환 기술한다.

목차

  [ 숨기기 ] 

개요 편집 ]

Java 코드는 <% 와 %> 기호로 둘러싸인 부분에 쓴다. HTML에 스크립트가 단편적으로 나타나기 때문에이 기법을 스크립트 릿이라고 부른다. 이보다 프로그램 코드를 태그에 진단하는 수 있기 때문에 프로그램과 디자인의 공존있다. 정의 된 커스텀 태그 라이브러리를 사용하면 스크립트 릿을 사용하지 않고 자신의 태그 코드를 포함 할 수있다.

서블릿 기능의 하나로서 구현되어있다.

서블릿과 달리 HTML에서 디자인 부분과 프로그램 부분을 나누어 쓰기 위하여 어느 정도까지 웹 디자이너의 부담을 줄일 수있다. 또한 정적 출력이 많은 경우에 적합하다 [1] . 비슷한 기술로 PHP , ASP , ASP.NET 등이있다.

클라이언트에서 JSP의 실행이 요청되면 애플리케이션 서버 의 서블릿 컨테이너 는 JSP 소스 파일을 서블릿 소스 코드로 변환한다. 그리고 또한 그 소스 코드를 그 자리에서 컴파일하고 실행하고 결과를 클라이언트에 답장한다. 따라서 처음에는 컴파일 시간이 걸리지 만 일단 컴파일이 실행되면 2 번째 이후는 필요 없기 때문에 결과적으로 액세스 속도가 빨라진다.

Apache Struts , Jakarta Project JSTL ( JavaServer Pages Standard Tag Library 영어 ) ​​) 등의 JSP 커스텀 태그 라이브러리를 이용하여 스크립트 렛을 기술 할 필요를 없애고 개발 효율을 높일 수도있다.

Model View Controller 아키텍처는 JSP를 View, Java Servlet 을 Controller, JavaBeans 를 Model로 시스템을 만드는 경우가 많다.

구문 편집 ]

태그 편집 ]

HTML에 다음 특수 태그를 설명 할 수있다.

JSP 태그
이름태그설명
지시문<% @ 지시어 %>이 JSP 파일을 처리 할 때 속성을 Web 컨테이너에 전달
선언<%! 선언 %>JSP에서 사용하는 변수와 메소드를 선언하는
스크립트 릿<% Java 코드 %>태그에 Java 코드를 자유롭게 작성할
<% = 표현식 %>식의 평가 결과를 HTML에 출력
액션<jsp:아쿠숀名>JSP에서 잘 수행 할 작업을 태그로 짧게 기술하는
댓글<% - 주석 - %>JSP로 코멘트를 작성할

지시문 편집 ]

지시문의 종류로는 다음이있다.

지시문의 종류
이름설명
pageJSP 파일의 인코딩과 JSP 프로그램의 코딩에 필요한 import 문장, 세션 관리를<% @ page contentType = "text / html; charset = Windows-31J"pageEncoding = "Windows-31J"%>
include텍스트 파일 및 기타 JSP 파일을 포함한다. 포함은 JSP에서 Servlet으로 변환 될 때 일어난다. 파일 확장자로 JSP를 사용하지 않고 다른 확장자를 사용한다. 일반적으로 '. jspf "(JSP Fragment)가 사용된다.<% @ include file = "header.jspf"%>
taglib사용자 정의 태그를 사용할 수 있도록 설정을 할<% @ taglib uri = "http://www.sample.com/tags/test "prefix ="tst "%>

액션 편집 ]

액션의 종류로는 다음과 같은 것이있다.

jsp : include
jsp : param
jsp : forward
jsp : plugin
jsp : fallback
jsp : getProperty
jsp : setProperty
jsp : useBean

암시 개체 편집 ]

Java의 코드에서 다음 변수를 미리 유효한 상태 (암시 적 개체로)에서 사용할 수있다.

암시 개체
변수 이름설명
outjavax.servlet.jsp.JspWriter 클래스의 개체 변수
requestjavax.servlet.http.HttpServletRequest 클래스의 개체 변수
responsejavax.servlet.http.HttpServletResponse 클래스의 개체 변수
pageContextjavax.servlet.jsp.PageContext 클래스의 개체 변수
sessionjavax.servlet.http.HttpSession 클래스의 개체 변수
applicationjavax.servlet.ServletContext 클래스의 개체 변수
configjavax.servlet.ServletConfig 클래스의 개체 변수
pagejavax.servlet.jsp.HttpJspPage 클래스의 개체 변수
exceptionjava.lang.Throwable 클래스의 개체 변수

JSP2.0 편집 ]

JSR152에 규정 된 사양으로 기존의 스크립트 릿에서 프로그램을 작성할뿐만 아니라 Expression Language (표현 언어)를 도입하여 시정 뛰어난 JSP 파일을 작성할 수 있도록 한 것. Expression Language는 $ {}로 표현한다.

$ {sessionScope.user.id}

Expression Language에서는 다음과 같은 암시 개체가 유효하다.

암시 개체
변수 이름설명
pageContextjavax.servlet.jsp.PageContext 클래스의 개체 변수
pageScopepage 범위에서 개체를 검색
requestScoperequest 범위에서 개체를 검색
sessionScopesession 범위에서 개체를 검색
applicationScopeapplication 범위에서 개체를 검색
param요청 매개 변수를 저장하는 Map 객체
paramValues여러 값을 가진 요청 매개 변수를 저장할 String 형 배열
header요청 헤더 값을 저장하는 Map 객체
headerValues여러 값을 가진 요청 헤더를 포함하는 String 배열
cookie쿠키를 저장하는 Map 객체
initParam컨텍스트 초기화 파라미터를 저장하는 Map 객체

역사 편집 ]

역사
버전JSR출시
1.01999 년 6 월 2 일
1.11999 년 12 월 17 일
1.2532001 년 9 월 25 일
2.01522003 년 11 월 24 일
2.12452006 년 5 월 11 일
2.22009 년 12 월 10 일

주석 편집 ]

  1. ^ 서블릿에서 println 메소드가 빈번하게 나타나 가독성이 떨어지기 때문에

관련 항목 편집 ]

외부 링크 편집 ]





JSP
Filename extension.jsp
Internet media typeapplication/jsp
Latest release2.2
Standard(s)JSR 245
WebsiteJavaServer Pages Technology

JavaServer Pages (JSP) is a technology that helps software developers create dynamically generated web pages based on HTMLXML, or other document types. Released in 1999 by Sun Microsystems,[1] JSP is similar to PHP, but it uses the Java programming language.

To deploy and run JavaServer Pages, a compatible web server with a servlet container, such as Apache Tomcat or Jetty, is required.

Contents

  [hide

Overview[edit]

The JSP Model 2 architecture.

Architecturally, JSP may be viewed as a high-level abstraction of Java servlets. JSPs are translated into servlets at runtime; each JSP's servlet is cached and re-used until the original JSP is modified.[2]

JSP can be used independently or as the view component of a server-side model–view–controller design, normally with JavaBeans as the model and Java servlets (or a framework such as Apache Struts) as the controller. This is a type of Model 2 architecture.[3]

JSP allows Java code and certain pre-defined actions to be interleaved with static web markup content, with the resulting page being compiled and executed on the server to deliver a document. The compiled pages, as well as any dependent Java libraries, use Java bytecode rather than a native software format. Like any other Java program, they must be executed within a Java virtual machine (JVM) that integrates with the server's host operating system to provide an abstract platform-neutral environment.

JSPs are usually used to deliver HTML and XML documents, but through the use of OutputStream, they can deliver other types of data as well.[4]

The Web container creates JSP implicit objects like pageContext, servletContext, session, request & response.

Syntax[edit]

JSP pages use several delimiters for scripting functions. The most basic is <% ... %>, which encloses a JSP scriptlet. A scriptlet is a fragment of Java code that is run when the user requests the page. Other common delimiters include <%= ... %> for expressions, where the value of the expression is placed into the page delivered to the user, and directives, denoted with <%@ ... %>.[5]

Java code is not required to be complete or self-contained within its scriptlet element block, but can straddle markup content providing the page as a whole is syntactically correct. For example, any Java if/for/while blocks opened in one scriptlet element must be correctly closed in a later element for the page to successfully compile. Markup which falls inside a split block of code is subject to that code, so markup inside an if block will only appear in the output when the if condition evaluates to true; likewise, markup inside a loop construct may appear multiple times in the output depending upon how many times the loop body runs.

The following would be a valid for loop in a JSP page:

<p>Counting to three:</p>
<% for (int i=1; i<4; i++) { %>
    <p>This number is <%= i %>.</p>
<% } %>
<p>Done counting.</p>

The output displayed in the user's web browser would be:

Counting to three:
This number is 1.
This number is 2.
This number is 3.
Done counting.

For more examples, see Java Programming/JSP at Wikibooks.

Expression Language[edit]

Version 2.0 of the JSP specification added support for the Expression Language (EL), used to access data and functions in Java objects. In JSP 2.1, it was folded into the Unified Expression Language, which is also used in JavaServer Faces.[6]

An example of EL syntax:

The value of "variable" in the object "javabean" is ${javabean.variable}.

Additional tags[edit]

The JSP syntax adds additional tags, called JSP actions, to invoke built-in functionality.[5] Additionally, the technology allows for the creation of custom JSP tag libraries that act as extensions to the standard JSP syntax.[7] One such library is the JSTL, with support for common tasks such as iteration and conditionals (the equivalent of "if" and "for" statements in Java.)[8]

Compiler[edit]

JavaServer Pages compiler is a program that parses JSPs, and transforms them into executable Java Servlets. A program of this type is usually embedded into the application server and run automatically the first time a JSP is accessed, but pages may also be precompiled for better performance, or compiled as a part of the build process to test for errors.[9]

Some JSP containers support configuring how often the container checks JSP file timestamps to see whether the page has changed. Typically, this timestamp would be set to a short interval (perhaps seconds) during software development, and a longer interval (perhaps minutes, or even never) for a deployed Web application.[10]

Comparison with similar technologies[edit]

JSP pages are similar to PHP pages and ASP.NET Web Forms, in that all three add server-side code to an HTML page. However, all three terms refer to a different component of the system. JSP refers to the JSP pages, which can be used alone, with Java servlets, or with a framework such as Apache Struts. PHP is itself a programming language, designed for dynamic Web pages.[11] ASP.net is a framework comparable to Struts or JavaServer Faces that uses pages called Web Forms.[12]

While JSP pages use the Java language, ASP.NET pages can use any .NET-compatible language, usually C#.

ASP.NET is designed for a Microsoft Windows web server, while PHP and Java server technologies (including JSP) are fairly operating system agnostic.

Caching to improve performance[edit]

The popularity of JavaServer Pages has meant that it is being used quite frequently in developing high-traffic web apps. And, this is causing performance bottlenecks as you try to add more users and transaction load on your JavaServer Pages application. Although, JavaServer Pages application can scale very nicely to multiple web servers, the database server cannot. The main reason for the database becoming a bottleneck is that while you can add more and more servers to the JavaServer Pages application server farm, you cannot do the same at the database tier. This results in limited scalability at the data tier. You can remove these JavaServer Pages Servlets performance bottlenecks by using a distributed cache for storing the frequently used data.

Criticism[edit]

In 2000, Jason Hunter[who?] criticized JSP for either tempting or requiring the programmer to mix Java code and HTML markup, although he acknowledged it would "wean people off" of Microsoft's Active Server Pages. Later, he added a note to his site saying that JSP had improved since 2000, but also cited its competitors, Apache Velocity and Tea.[13]

See also[edit]

Servlet containers[edit]

Java-based alternative[edit]

References[edit]

Further reading[edit]

External links[edit]



출처 - http://en.wikipedia.org/wiki/JavaServer_Pages








출처 - noveljsp2







Posted by linuxism
,

Tomcat의 로그를 보다보니 날짜별로 로그 파일을 나누어 쌓고 있음과 동시에 catalina.out이라는 파일에도 중복하여 로그를 쌓는것을 알수 있다.

이 파일은 끝없이 커지는데 관리상 좋지 못한것은 자명한 일이다. 이 문제를 해결하기 위해 catalina.sh 파일을 수정한다.

start 부분을 찾아 다음과 같이 수정하자.

elif [ "$1" = "start" ] ; then
    shift
#  touch "$CATALINA_BASE"/logs/catalina.out
 
if [ "$1" = "-security" ] ; then
    echo
"Using Security Manager"
    shift
   
"$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
     
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
     
-Djava.security.manager \
     
-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
     
-Dcatalina.base="$CATALINA_BASE" \
     
-Dcatalina.home="$CATALINA_HOME" \
     
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org
.apache.catalina.startup.Bootstrap "$@" start \
     
>> /dev/null 2>&1 &
#      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

     
if [ ! -z "$CATALINA_PID" ]; then
        echo $
! > $CATALINA_PID
     
fi
 
else
   
"$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
     
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
     
-Dcatalina.base="$CATALINA_BASE" \
     
-Dcatalina.home="$CATALINA_HOME" \
     
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org
.apache.catalina.startup.Bootstrap "$@" start \
     
>> /dev/null 2>&1 &
#      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

     
if [ ! -z "$CATALINA_PID" ]; then
        echo $
! > $CATALINA_PID
     
fi
 
fi

* 추가 - 더 편한 방법
언제 부터인가 위의 설정이 >> "$CATALINA_OUT" 2>&1 &와 같이 바뀌었습니다.
/etc/profile에 다음을 추가하셔도 한방에 해결됩니다.
export CATALINA_OUT="/dev/null"


출처 -  http://theeye.pe.kr/entry/Tomcat-%EB%AC%B4%EB%B6%84%EB%B3%84%ED%95%98%EA%B2%8C-catalinaout-%ED%81%AC%EA%B8%B0-%EC%BB%A4%EC%A7%80%EB%8A%94%EA%B2%83-%EB%A7%89%EA%B8%B0 






Tomcat Catalina.out 로그로테이션


톰캣서버의 로그파일은 그대로 두면 사이즈가 엄청나게 커져 있음은 물론이고,
한 파일에 지금까지의 로그가 모두 기록되어 있기 때문에 필요한 정보 검색에도 불편함이 있다.
그래서 로그파일을 년/월/주/일 등의 간격으로 로테이션 시킬 필요가 있다.

지금 일하고 있는 회사에서도 상당히 많은 리눅스 서버에서 톰캐서버를 가동시키고 있는데
일주일에 한번 메인터넌스 작업중 톰캣을 정지시키고 수동으로 백업하는 작업을 해오고 있었다.

로그로테이션에 대해 알아보니 여러가지 방법이 있었는데 그 중에 추가 설치 없이 제일 편하게 사용할 수 있는 방법이
아파치 서버를 설치하면 기본 설치되는 "rotatelogs" 이다.

설정방법은 간단하다.

%CATALINA_HOME%bin/catalina.sh 수정 

1. touch "$CATALINA_BASE"/logs/catalina.out 를 삭제 또는 커멘트 처리
2. "$CATALINA_BASE"/logs/catalina.out2>&1 & 를 다음과 같이 수정
 | /usr/local/apache/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &

단, 수정할 부분이 두 줄이므로 주의할 것(두 줄다 수정)
86400은 일단위로 로테이션(초단위 설정)
540은 표준시와 한국시간과의 시간차

위의 설정을 완료한 뒤, 톰캣서버를 재기동하면 catalina.out.yyyy-mm-dd 형식의 파일이 생성되어 있음을 알 수 있다.

이상으로 로테이션 설정은 완료.

이전 파일을 삭제하거나 압축해서 보관하는 쉘을 Cron에 등록해서 정기적으로 관리하면 더 좋겠다.



출처 -  http://siho.tistory.com/52 






Apache Tomcat의 로그파일인 catalina.out은 기본적으로 순환되지 않고 한개의 파일로 계속해서 로그가 쌓이게 됩니다.

이게 나중에 가면 크기가 매우 커져서 문제가 발생할 소지가 있는데요..
이 파일을 순환시키기 위한 방법을 소개합니다.


이와같은 기능을 찾아보면 일반적으로 cronolog같은 툴을 사용하거나 log4j를 이용하도록 한 다른 글들을 찾아볼수 있는데 이는 상당히 번거롭고 추가적인 툴이 필요한 방법이기 때문에 리눅스의 기본 로그 순환 도구를 이용하여 사용하는 방법을 설명한다.


/etc/logrotate.d 디렉토리 안에 아래의 파일을 생성한다.

$ cd /etc/logrotate.d
$ cat > tomcat

/var/local/tomcat/logs/catalina.out {
 copytruncate
 daily
 rotate 30
 compress
 missingok
 notifempty
 delaycompress
}

여기서 중요한 부분은 copytruncate 부분입니다.

저옵션을 쓰지 않으면 기존의 맨처음 로그가 생성된 파일에 계속해서 로그가 쌓이게 됩니다.
이러한 원인은 톰캣의 로그가 System.err 객체나 System.out을 사용하기 때문에 시스템의 raw디바이스로 출력이 되어 파이프를 타지 않기 때문입니다.

따라서 원래 로그를 다른이름으로 저장하고 새로운 catalina.out을 생성한다해도 실제 로그 스트림은 다른이름으로 지정된 원래 로그쪽으로 계속해서 쌓이게 됩니다.

이걸 방지하기 위해 현재 로그내용을 복사하여 백업본으로 저장한후 원본 로그의 내용을 비우는 방식으로 저장해야 합니다.

그래서 옵션을 copytruncate를 사용해야 합니다.


이렇게 하면 톰캣의 catalina.out로그가 매일 하나씩 쌓이게 됩니다.


출처 - http://koov.net/blog/?/tag/rotate






Catalina로그를 한 파일에 누적되는 것을 피하기 위해서 보통은 cronolog,  log4j를 활용을 많이 하는데 기존 리눅스 시스템의 소프트웨어를 활용하는 방안을 하나 소개해 드립니다.

1. /etc/logrotate.d 디렉토리 안에 아래의 파일을 생성

$ cd /etc/logrotate.d
$ cat tomcat

${CATALINA_HOME}/logs/catalina.out {
 copytruncate
 daily
 rotate 30
 compress
 missingok
 notifempty
dateext
}
$logrotate -f /etc/logrotate.d/tomcat # 로그파일 순환 테스트
  • copytruncate : 기존 파일을 백업해서 다른 파일로 이동하고 기존 파일은 지워버리는 옵션
  • daily : 로그파일을 날짜별로 변환
  • compress : 지나간 로그파일들을 gzip으로 압축
  • dateext : 순환된 로그파일의 날짜확장자
  • missingok : 로그파일이 없더라도 오류를 발생시키지 않음
  • rotate 30 : 로그 파일은 30개만큼 저장된 다음 제거되거나 메일로 보내짐
  • notifempty : 파일의 내용이 없으면 새로운 로그 파일을 생성 안함

2. 그외 일자별로 저장 방법


출처 - http://www.mimul.com/pebble/default/2009/12/27/1261911840000.html


 





원문 : http://dev-world.springnote.com/pages/6460973?print=1



/etc/logrotate.d 을 이용한 catalina.out 나누기

 

Apache Tomcat의 로그파일인 catalina.out은 기본적으로 한개의 파일에 로그가 쌓이게 됩니다.


Tomcat을 재시작 하지 않는 이상 계속적으로 쌓이는 듯합니다. 벌써 용량이 후덜덜하네요.
이 파일을 다시는 볼일이 없다면 상관이 없지만...
열어 보려고 한다면... 시간 꽤 걸리듯합니다.
catalina.out의 만행을 그냥 두고 못 본척하신다면... 나중에 눈물 흘릴 수도 있습니다. :")

저도 모니터링 중에 문제가 생겨서 확인하려고 catalina.out 파일을 열어봤더니...
시간이 좀 걸리더군요...

그래서 catalina.out을 나누는 방법을 검색해봤습니다.

로그 파일을 rotate하는 방법에는 보통 4가지가 있습니다.

1. log4j
2. cronolog
3. logrotate
4. shell script


이번 포스트에서는 logrotate에 대하여 알아보겠습니다. 가장 사용하기 쉽고 제가 원하는 동작을 하더군요. :")

구분위치 및 실행 방법설명
데몬(위치)/usr/sbin/logrotate데몬의 위치 및 데몬프로그램
데몬 설정파일/etc/logrotate.conf설정파일
설정디렉토리/etc/logrotate.dlogrotate에 적용할 각종로그파일들 보관하는 디렉토리
상황파일/var/lib/logrotate.statuslogrotate한 작업내역을 보관한 파일
cron(일단위)/etc/cron.daily/logrotatelogrotate는 주기적으로 실행이되어야하므로 cron에 의해 일단위로 실행이 됨


Apache Tomcat 로그 순환 설정 : http://koov.net/blog/?/tag/rotate
위 블로그 가시면 간단히 catalina.out 로그 파일을 자동으로 나누게 설정하는

방법이 있습니다.

$ cd /etc/logrotate.d
$ cat > tomcat

/var/local/tomcat/logs/catalina.out {
copytruncate
daily
rotate 30
missingok
notifempty
}

$ logrotate -f /etc/logrotate.d/tomcat


실행 후 화면,


위 이미지와 같이 catalina.out.1 이라는 파일이 생성되는군요. 흠... 그럼 1, 2, 3 이런식으로 쌓일텐데 관리자의 입장에서는 좀 불편할 수도.... Buuuuuuuuuuut!!!!!

dateext 라는 옵션이 있군요!!!

$ cd /etc/logrotate.d
$ cat > tomcat

/var/local/tomcat/logs/catalina.out {
copytruncate
daily
rotate 30
missingok
notifempty
dateext
}

$ logrotate -f /etc/logrotate.d/tomcat




알아두셔야 할 점은 copytruncate 옵션은 반드시 써야 한다고 합니다.

copytruncate 옵션을 쓰지 않으면 기존의 맨처음 로그가 생성된 파일에 계속해서 로그가 쌓이게 됩니다. 이러한 원인은 톰캣의 로그가 System.err 객체나 System.out을 사용하기 때문에 시스템의 raw디바이스로 출력이 되어 파이프를 타지 않기 때문입니다.
따라서 원래 로그를 다른이름으로 저장하고 새로운 catalina.out을 생성한다해도 실제 로그 스트림은 다른이름으로 지정된 원래 로그쪽으로 계속해서 쌓이게 됩니다.
이걸 방지하기 위해 현재 로그내용을 복사하여 백업본으로 저장한후 원본 로그의 내용을 비우는 방식으로 저장해야 합니다.
그래서 옵션을 copytruncate를 사용해야 합니다.

copytruncate
Truncate the original log file in place after creating a copy, instead of moving the old log file and optionally creating a new one, It can be used when some program can not be told to close its logfile and thus might continue writing (appending) to the previous log file forever. Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost. When this option is used, the create option will have no effect, as the old log file stays in place.




logrotate의 설정 옵션에 대하여 조금 더 알아보면은,

dailyLog files are rotated every day.
weeklyLog files are rotated if the current weekday is less than the weekday of the last rotation or if more than a week has passed since the last rotation. This is normally the same as rotating logs on the first day of the week, but if logrotate is not being run every night a log rotation will happen at the first valid opportunity.
monthlyLog files are rotated the first time logrotate is run in a month (this is normally on the first day of the month).
notifemptyDo not rotate the log if it is empty (this overrides the ifempty option).
nocompressOld versions of log files are not compressed.
delaycompressPostpone compression of the previous log file to the next rotation cycle. This only has effect when used in combination with compress. It can be used when some program cannot be told to close its logfile and thus might continue writing to the previous log file for some time.
compressOld versions of log files are compressed with gzip by default.
mail addressWhen a log is rotated out of existence, it is mailed to address. If no mail should be generated by a particular log, the nomail directive may be used.
missingokIf the log file is missing, go on to the next one without issuing an error message.


보다 더 많은 옵션과 설명을 보시려면, http://linuxcommand.org/man_pages/logrotate8.html를 참고하세요.

superuser 사이트입니다. 옵션에 대해서 한글로 자세히 설명되어 있습니다.
http://www.superuser.co.kr/linux/logrotate/page04.htm






Posted by linuxism
,

php 오류해석기
글쓴이: 김영철
작성일: 09-01-13 12:23
글주소: http://marketingcode.co.kr/hots/community/bbs/board.php?bo_table=share91&wr_id=1390

부록 P. 해석기 토큰 목록

PHP 언어의 많은 부분은 내부적으로 T_SR같은 타입으로 표현된다. PHP는 해석 에러에서 이와 같은 식별자를 출력한다. 다음과 같은 형태이다. "Parse error: unexpected T_SR, expecting ',' or ';' in script.php on line 10."

위는 T_SR이 무슨 의미인지 안다고 가정한다. 그 의미를 알지못하는 모든 사람을 위해 그런 식별자,PHP-문법,매뉴얼에 위치한 적절한 레퍼런스의 테이블을 보인다.

표 P-1. 토큰

토큰문법레퍼런스
T_AND_EQUAL &= assignment operators
T_ARRAY array() array()array syntax
T_ARRAY_CAST (array) type-casting
T_AS as foreach
T_BAD_CHARACTER   anything below ASCII 32 except \t (0x09), \n (0x0a) and \r (0x0d)
T_BOOLEAN_AND && logical operators
T_BOOLEAN_OR || logical operators
T_BOOL_CAST (bool) or (boolean) type-casting
T_BREAK break break
T_CASE case switch
T_CHARACTER    
T_CLASS class classes and objects
T_CLOSE_TAG ?> or %>  
T_COMMENT // or # comments
T_CONCAT_EQUAL .= assignment operators
T_CONST const  
T_CONSTANT_ENCAPSED_STRING "foo" or 'bar' string syntax
T_CONTINUE continue  
T_CURLY_OPEN    
T_DEC -- incrementing/decrementing operators
T_DECLARE declare declare
T_DEFAULT default switch
T_DIV_EQUAL /= assignment operators
T_DNUMBER 0.12, etc floating point numbers
T_DO do do..while
T_DOLLAR_OPEN_CURLY_BRACES ${ complex variable parsed syntax
T_DOUBLE_ARROW => array syntax
T_DOUBLE_CAST (real), (double) or (float) type-casting
T_ECHO echo echo()
T_ELSE else else
T_ELSEIF elseif elseif
T_EMPTY empty empty()
T_ENCAPSED_AND_WHITESPACE    
T_ENDDECLARE enddeclare declarealternative syntax
T_ENDFOR endfor foralternative syntax
T_ENDFOREACH endforeach foreachalternative syntax
T_ENDIF endif ifalternative syntax
T_ENDSWITCH endswitch switchalternative syntax
T_ENDWHILE endwhile whilealternative syntax
T_END_HEREDOC   heredoc syntax
T_EVAL eval() eval()
T_EXIT exit or die exit()die()
T_EXTENDS extends extendsclasses and objects
T_FILE __FILE__ constants
T_FOR for for
T_FOREACH foreach foreach
T_FUNCTION function or cfunction functions
T_GLOBAL global variable scope
T_IF if if
T_INC ++ incrementing/decrementing operators
T_INCLUDE include() include()
T_INCLUDE_ONCE include_once() include_once()
T_INLINE_HTML    
T_INT_CAST (int) or (integer) type-casting
T_ISSET isset() isset()
T_IS_EQUAL == comparison operators
T_IS_GREATER_OR_EQUAL >= comparison operators
T_IS_IDENTICAL === comparison operators
T_IS_NOT_EQUAL != or <> comparison operators
T_IS_NOT_IDENTICAL !== comparison operators
T_SMALLER_OR_EQUAL <= comparison operators
T_LINE __LINE__ constants
T_LIST list() list()
T_LNUMBER 123, 012, 0x1ac, etc integers
T_LOGICAL_AND and logical operators
T_LOGICAL_OR or logical operators
T_LOGICAL_XOR xor logical operators
T_MINUS_EQUAL -= assignment operators
T_ML_COMMENT /* and */ comments
T_MOD_EQUAL %= assignment operators
T_MUL_EQUAL *= assignment operators
T_NEW new classes and objects
T_NUM_STRING    
T_OBJECT_CAST (object) type-casting
T_OBJECT_OPERATOR -> classes and objects
T_OLD_FUNCTION old_function old_function
T_OPEN_TAG <?php, <? or <% escaping from HTML
T_OPEN_TAG_WITH_ECHO <?= or <%= escaping from HTML
T_OR_EQUAL |= assignment operators
T_PAAMAYIM_NEKUDOTAYIM :: ::
T_PLUS_EQUAL += assignment operators
T_PRINT print() print()
T_REQUIRE require() require()
T_REQUIRE_ONCE require_once() require_once()
T_RETURN return returning values
T_SL << bitwise operators
T_SL_EQUAL <<= assignment operators
T_SR >> bitwise operators
T_SR_EQUAL >>= assignment operators
T_START_HEREDOC <<< heredoc syntax
T_STATIC static variable scope
T_STRING    
T_STRING_CAST (string) type-casting
T_STRING_VARNAME    
T_SWITCH switch switch
T_UNSET unset() unset()
T_UNSET_CAST (unset) (not documented; casts to NULL)
T_USE use (not implemented)
T_VAR var classes and objects
T_VARIABLE $foo variables
T_WHILE while whiledo..while
T_WHITESPACE    
T_XOR_EQUAL ^= assignment operators
T_FUNC_C __FUNCTION__ constants, since PHP 4.3.0
T_CLASS_C __CLASS__ constants, since PHP 4.3.0

[출처] 웹디황용




'Development > PHP' 카테고리의 다른 글

php - include vs require  (0) 2013.01.08
php - date() 오류  (0) 2012.07.21
php - mail 함수  (1) 2012.07.11
PHP Framework - CodeIgniter  (0) 2012.05.07
PHP framework 종류  (0) 2012.05.07
Posted by linuxism
,