서버프로그램에서 로그파일을 삭제하면 다시 새 파일을 생성해서 로그를 계속남기고 싶은데요

Iinux의 이미지

서버프로그램이 시작되면서 로그파일을 생성하여 로그를 남기고 있습니다.

제가 테스트로 터미널에서 로그 파일을 삭제했는데요

서버 프로그램은 로그파일이 없는데도.. 로그를 남기는 write() 함수는 정상리턴합니다.
(리눅스에서만 그런건지..)
파일은 없는데..로그가 어디로 쌓이는 건지..

서버프로그램에서 매번 로그남길 때마다 로그파일 존재를 체크하여
파일이 없으면 파일을 생성하고 open 한 후에 write()하면 되긴 되겠는데요

이러면 매번 파일존재 체크하는 부하가 있으니..
로그를 남기는 write()가 실패하면 로그파일을 새로 생성하라고 하고 싶습니다.

좋은 방법없을까요?

왜 파일을 삭제했는데.. 그 파일에 대한 파일 디스크립터에 대한 system call 호출이 오류가 안나는 걸까요?

세이군의 이미지

우선 생각을 해 주셔야 하는 것이 파일시스템의 내부 구조입니다.
파일이 하나의 부분으로 되어 있다고 보시면 큰 오산입니다.
파일은 정보블럭과 데이터블럭 두개의 부분으로 되어 있습니다.

어떤 프로그램이 파일을 열고 있을때 외부에서 파일을 삭제하게 되면 정보블럭이 삭제됩니다.
그런데 프로그램에서는 정보블럭과 데이터블럭 모두에 대한 정보를 디스크립터 안에 저장합니다.
이 상태에서 write()를 호출하면 데이터블럭을 알고 있으므로 계속 쓰기가 가능한 것입니다.
외부에서 보면 이름없는 파일(파일시스템에 그 파일에 대한 정보가 없으므로)에 계속 쓰고 있는 것이지요.

항상 로그파일의 유무를 판단하시려면 속도저하는 있지만 매 로그를 작성할때마다 파일을 열고 닫는 작업을 해 주셔야 할 것으로 보입니다.

koreanginseng의 이미지

질문의 예제의 경우엔 write() 함수 호출시 오류가 발생하는 상황이 딱 한 경우, 파일이 없는 경우로만 제한하고 있는데요.
혹여나 이미 파일이 있는 상황에서 실패가 발생하여 파일 생성 로직이 정상적으로 동작하면 이 전의 로그는 모두 사라지는 것이 아닌지요;;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.