답변:
일반 사용자로 / var / log에 쓸 수는 없지만 syslog 데몬이 요청하면이를 수행합니다. 표준 시스템 로그 (예 /var/log/syslog
:)에 메시지를 기록하려면 시스템 에서 4.4BSD 유틸리티를 logger
사용할 수 있습니다. 기본적으로 데비안에 설치되어 bsdutils
있으며 데비안 파생 패키지에 있습니다.
시스템 로그 를 읽을 수 있는 권한이 필요 하지 않고 스크립트 메시지를 다른 프로그램의 메시지와 혼합 해야한다는 단점이있는 기존의 모든 로그 회전, 유지 관리 및 모니터링 도구 를 활용할 수 있습니다.
$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye
사용 가능한 몇 가지 구성 옵션이 있습니다. 에서 더 많은 내용을 읽을 수 있습니다 man logger
.
syslog
C 라이브러리 루틴이며 C ++는을 사용하여 C를 호출 할 수 있습니다 extern "C"
. 다른 언어는 종종 C에 대한 일반적인 바인딩 또는 특정 사물에 대한 바인딩을 제공하지만 언어에 따라 다릅니다.
일반 사용자로서 프로그램을 실행하기로 결정한 경우, 로그의 자연스러운 위치는 홈 디렉토리에 있습니다. 홈 디렉토리는 사용자가 실행하는 프로그램의 로그이든 다른 파일이든 관계없이 모든 파일을 저장하기위한 것입니다.
프로그램이 시스템의 일부로 실행되고 일반적으로 전용 시스템 사용자로 실행되는 경우 로그의 자연스러운 위치는입니다 /var/log
. 서브 디렉토리를 작성하고 /var/log/myapp
응용 프로그램이 해당 디렉토리에 쓸 수 있도록 적절한 권한을 부여하십시오.
관련성이 있고 운영 체제에서 허용하는 경우 로그 파일을 추가 전용으로 표시하십시오. 오직 루트 만이 이것을 할 수 있습니다. 이는 응용 프로그램이 손상되면 과거의 로그를 지울 수 없으므로 손상에 대한 법 의학적 분석에 매우 유용합니다. 로그를 회전하려면 루트의 개입이 필요 chown
합니다. 로그 파일을 더 이상 응용 프로그램, rename
로그 파일에서 열 수 없도록 하고 적절한 소유권을 가진 새 추가 전용 파일을 만든 다음 새 빈 파일을 열도록 응용 프로그램에 알리십시오. .
당신은 호출하여 시스템 로그에 대한 응용 프로그램 로그를 만들 수 있습니다 logger(1)
또는 syslog(3)
.
일반적으로 데몬의 경우 로그 파일이 생성되고 root
권한이없는 사용자가 쓸 수 있도록 권한이 변경됩니다. logrotate
그런 다음 회전 중에 권한을 유지하도록 설정됩니다.
데몬이 아닌 명령 인 경우 /tmp
(바람직하게 사용 mktemp
) STDOUT
에 로그인하고 로그가 어디로 갔는지 사용자에게 알리십시오 .
&
프롬프트를 유지하지 않기 위해를 추가하는 것을 고려하고 있었지만 dropbox 쓰기를 시작하면 콘솔에 기록됩니다. 현재 출력을로 리디렉션 /dev/null
중이지만 보관 용 계정이 시작되지 않으면 디버깅 할 수있는 방법이 필요합니다.
chmod
. 일반적으로 0644
또는 0664
사용자 / 그룹 소유권도 여기에 쓸 것으로 예상되는 데몬의 소유권으로 변경됩니다.
사용자 공간 프로그램은 기본적으로 로그를 버릴 것으로 예상됩니다. 다양한 프로그램이 원하는 곳에서 로그를 덤프하는 것을 보았습니다. 특히 내 시스템에서는 결코 환영받지 않습니다. 거대해질 때까지는 눈에 띄지 않는 어떤 위치에 쌓이는 경향이 있습니다.
나는 그들에게 명확한 장소가 있다면 선호합니다. 나는 그들을 위해 안정된 장소를 찾으려고 노력하고 있습니다.
내 첫 번째 아이디어는을 사용하는 /var/run/user/$UID/log
것이었지만 내 시스템에서는 TMPFS 마운트이거나 충분히 크지 않거나 로그와 함께 사용하기에 적합하다는 것을 알았습니다.
/ var / run / user를 잘 이해할 수 없기 때문에 사용자 1000을 위해 수동으로 에뮬레이션하기로 선택했습니다.
# mkdir /var/log/user
# install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700
이 폴더 내의 구조에 대해 FHS / var / log spc 를 고수하는 것이 좋지만 사양이 자유 형식이므로 준수하지 않아도됩니다.
시스템에서 제공 한이 디렉토리에는 기존 로그 순환이 없습니다. 시스템에 대한 로그 순환을 생성하는 것이 좋습니다.
# /etc/logrotate.d/userlogs
/var/log/user/*/log/*.log
/var/log/user/*/log/**/*.log
{
daily
missingok
rotate 7
compress
notifempty
nocreate
}
아래는 이전의 / var / run / user / 1000 / log 게시물입니다. 실제로 무엇을하는지 알지 못한다면 추천 할 수 없습니다 (그렇게하면 방법도 알려주십시오!)
어쩌면 다음과 같이 할 수 있지만, 나는 이것이 의미가 있기 때문에 이것을 만들었습니다.
/var/run/user/1000/log/<app>.log
/var/run/user/1000/log/<app>/<context>.log
/ var / log / user / 1000과 통합 :
# Integrate with above /var/run/user, probably a bad idea:
# ln -s /var/log/user/1000/ /var/run/user/1000/log