log file 남기는법

hermian의 이미지

특정 디렉토리에 log file을 남기다가 일정 크기가 되면 backup file을 만들고 새로 파일을 만들어 로그를 남기고 싶습니다.

아피치의 로그를 보면 error.log error.log.1 error.log.2.gz이런식으로 생기는데 어떻게 하면 이렇게 만들 수 있을 까요?

좋은 아이디어가 있으신 분들의 가르침을 기다립니다.

huricool의 이미지

로그 파일은 평상시 처럼 그냥 남기시고
한달이나 일주일 단위로 cron 에서 savelog 를 실행하세요.

savelog -q -u root -g adm -m 640 -c 7 /var/log/xferlog

이런식으로 넣어서 사용하시면 원하시는 대로 로그파일뒤에 숫자로 남겨서
저장하실수 있습니다.

savelog 패키지는 구글에서 검색하세요.
그럼 빠이~

무인도에 갇힌다면 당신이 가지고 갈 세가지는?

ifyou의 이미지

로그 남기는 부분 쉽게 생각했는데..
이것도 프로그램 종류에 따라서 간단하지가 않더라고요..
얼마전에 개발한 프로그램은 실제 내용 보다는 로그 남기는
부분의 코드가 더 많을 지경이었으니까요..

그리고, OS의 도움을 받아서 위에서 말한 것을 구현 할 수도
있겠지만, 경우에 따라서는 독자적으로 구현해야 할 경우가
생길 수도 있지요.

다른 사람은 어떻게 구현했는지 궁금해서 공개소스 좀 봤는데,
원하는 내용 찾기가 싶지않더군요. 그냥 os나 외부 프로그램 이용해서
백업하는 것 같더라구요. 유닉스라면 문제가 아닌데, 윈도에서는
어떻게 해야 할지 좀 감각해서.. 좀 무식하게 구현했습니다.

log.txt, log.txt.1 log.txt.2 ..와 같이 있을때, 최대 100개까지 백업하겠다고
정해 놓고, 먼저 log.txt가 원하는 크지를 넘는지 검사하고, 크기가 크면, access()와
같은 명령어로 log.txt.99, log.txt.98.. 와 같이 파일이 존재하는지 살펴봐서..
log.txt.99는 지우고, log.txt.98은 log.txt.97로 이름 바꾸고...

그런데, 로그 한번 남길때 마다 파일 검사하는것도 문제가 생길 소지가 있어서
(제 경우에 한해서..) 정적변수 하나 선언해서 대충 크기를 넘길 정도가 되었을때
사이즈 검사해보고.. 아니면, 변수 값을 적당히 마이너스 시키고..

상당히 무식하지만, 윈도, unix에서 동일한 코드로 잘 돌아가고 있습니다 :)

무한포옹의 이미지

로그 크기 제한 조절,
로테이션 갯수,
주기별로(일,주,월) 조절,
로그 전환 전에 할 작업,
로그 전환 후에 할 작업( 예: 아파치 리스타트 ),
압축 여부,
파일을 바꾸지 않고 카피해서 백업하고 원본 로그 파일 비우기

등등

웬만한 로그 관련 작업은 다 가능하더 군요.

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

morison77의 이미지

stat , lstat, fstat 함수를 사용하면 file의 속성을 얻어올수 있습니다
이때 file속성은 stat라는 구조체에 담기는데
stat 구조체의 st_size로 파일의 크기를 알수 있습니다.

로그를 쌓을때마다 size를 검사하시던지 혹은 윗분 말씀처럼
정적 변수를둬서 size를 검사하시던지 하시면 됩니다.

light my fire

은빛연어의 이미지

윗분과 마찬가지 생각임댜.
전역변수를 하나 둬서 기록할때 기록되는 octet만큼 계속 +시키다가 특정한 크기가되면 파일을 새로 만들면 되져..^^*

ukira의 이미지

로그 남기는 것과 관련해서...
log4cpp라는것을 써봤는데 괜찮더군요..
아마 이게 log4j(java용)인가를 cpp용으로 포팅한거 같더군요
말씀하신 로그파일 로테이션도 가능하고
단계별 로깅도 가능하고 쓸만하더군요...

소스포지에 있을겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.