2008-10-10 5 views
11

Windows에 오류 로그 파일 (예 : ErrorLog.txt)을 기록 하시겠습니까? 파일 쓰기 권한을 얻으려면 기본 사용자에게 경로를 개방해야합니다.Windows에서 오류 로그를 기록하는 가장 좋은 위치는 어디입니까?

이벤트 로그가 오류를 기록 할 수있는 위치라는 것을 알고 있지만 "사용자"수준의 권한으로 작동합니까?

편집 : Windows 2003을 대상으로하고 있지만 오류 로그 작성 위치에 대한 "일반 지침"이있는 방식으로 질문하고 있습니다.
EventLog의 경우 이전에 Windows 이벤트 로그에 로그온하려는 ASP.NET 응용 프로그램에서 문제가 있었지만 마음이 아프다는 보안 문제가있었습니다. (내가 가진 문제는 기억하지 못하고 기억하고 있습니다.)

+0

프로그램 유형이나 로그하려는 오류. 오류는 장기적 관점에서 얼마나 중요한가. (예 : 웹 서버) –

+0

어떤 기술로 개발하고 어떤 버전의 OS를 타겟팅하는지 알고 있으면 유용합니다. :) –

답변

14

이벤트 뷰어 대신 로깅을 고려한 적이 있습니까? 자신 만의 로그를 작성하려면 사용자의 로컬 앱 설정 디렉토리를 제안하십시오. 그 아래에 제품 디렉토리를 만드십시오. 그것은 다른 버전의 Windows에서 다릅니다.

Vista에서는이 파일을 c : \ program files에 넣을 수 없습니다. 당신은 그것으로 많은 문제에 부딪 칠 것입니다.

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

그리고 이벤트 로그가 너무 사용하기 매우 간단하다 : .NET에서

, 당신이 이것과 폴더를 찾을 수 있습니다

http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx

+0

앱 설정 디렉토리는 좋은 위치입니다. 응용 프로그램 개체 (.CommonAppDataPath, .LocalUserAppDataPath 등)의 정적 속성을 통해 .net WinForms에서 쉽게 검색 할 수 있습니다. –

+0

응용 프로그램 설정 폴더를 사용할 때의 문제는 대부분의 시간 로그 파일을 메모장에서 수동으로 열면 발생합니다 익스플로러의 경우 사용자가 파고 들어야합니다. –

+1

일반적으로 UI를 통해 로그 파일을 직접 여는 메커니즘을 제공합니다. 그리고 소프트웨어가 항상 작동하므로 언제 로그를 볼 필요가 있을까요? ;) –

0

% TEMP %는 항상 내가 찾은 로그에 적합한 위치입니다.

+0

로그가 비교적 중요하지 않은 경우 장기간, 나는 Temp가 옳다는 것에 동의 할 것입니다. –

-5

응용 프로그램의 디렉토리에 넣으십시오. 사용자는 응용 프로그램을 실행하고 실행하기 위해 폴더에 액세스해야하며 응용 프로그램 시작시 쓰기 액세스를 확인할 수 있습니다.

이벤트 로그는 문제 해결을 위해 사용하는 고통이지만 여전히 중요한 오류를 게시해야합니다.

EDIT - .NET을 사용하는 경우 로깅을 위해 MS 응용 프로그램 블록을 조사해야합니다. 그들은 정말로 삶을 편하게 만듭니다.

Jeez Karma-killers. 다음 번에는 포스터가 불완전한 게시물을 올릴 때 제안을하지 않을 것입니다.

+0

응용 프로그램 로그를 응용 프로그램 디렉터리에 배치하면 안됩니다. 보안 환경에서는 관리자가 아닌 사용자는 쓰기 권한이 없습니다. –

+0

앱이 설치된 디렉토리에 로그 파일을 저장하는 것은 * BAD * * BAD * 아이디어입니다. 나는 그것을 충분히 강하게 반복 할 수 없다. Vista 사용자는 앱을 실행할 수는 있지만 % PROGRAMFILES % – Rob

+0

의 앱 디렉토리에 쓸 수 없으며 불가능할 것입니다. Vista의 프로그램에는 옵션이 아닙니다. 일반. Vista에서는 프로그램이 '프로그램 파일'에 파일을 만들 수 없으므로 앱을 설치하면 로깅이 크게 실패합니다. – workmad3

3

을 개인적를, 내가 사용하는 것이 좋습니다 것입니다 Windows 이벤트 로그는 훌륭합니다. 그렇지 않으면 ApplicationData 디렉토리 또는 ProgramData (Windows XP의 경우 모든 사용자의 응용 프로그램 데이터) 디렉토리에 파일을 씁니다.

2

표준 위치 (들)은 다음과 같습니다

C:\Documents and Settings\All Users\Application Data\MyApp 

또는

C:\Documents and Settings\%Username%\Application Data\MyApp 

(일명 %UserProfile%\Application Data\MyApp) 당신의 사용자 수준 권한 요구 사항과 일치하는 것이다. 또한 다른 사용자가 작성한 로그를 구분합니다.

을 사용하십시오.

MyAppDir = IO.Path.Combine(AppDir,'MyApp') 

는 (어떤이, 희망, 비스타 프로파일도 매핑)에 의해

AppDir= 
    System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

또는

AppDir= 
    System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

을 따라 :로 런타임 NET이 내장 될 수있다.

+0

이것은 비스타에는 적합하지 않습니다 - (사용하는 것이 더 좋습니다.NET 환경 클래스, 또는 당신이 사용하는 언어로 올바른 호출을 래핑 뭔가) –

2

Windows 이벤트 로그는 오류 로깅을위한 방법입니다. 새 로그 대상 (예 : '내 애플리케이션')을 만들 수 있으므로 '애플리케이션'로그에만 국한되지 않습니다. 관리자 권한이 필요한지 아닌지 확실하지 않아 설치 과정에서이를 수행해야 할 수도 있습니다. C#의 Microsoft 예제가 http://support.microsoft.com/kb/307024입니다.

Windows 2008은 또한 서버 응용 프로그램에서 매우 유용 할 수있는 Event Log Forwarding을 가지고 있습니다.

+0

기존 로그에서 새로운 "이벤트 소스"(한 필드의 텍스트)를 만들려면 관리자 권한이 필요합니다. 새 로그 (완전히 새로운 파일)에는 관리자 권한이 필요합니다. –

+0

이것은 내가 전에 가지고 있던 "문제"였습니다. 웹 응용 프로그램이 Windows 이벤트 로그에 로그를 작성하는 데 필요한 관리자 권한입니다. –

0

곡물을 여기에 놓으십시오 - 필요한 작업에 따라 달라집니다. 때로는 결과를 조작해야하므로 log.txt가 필요합니다. 간단하고 변경 가능하며 쉽게 검색 할 수 있습니다.

요엘을 예로 들어 보겠습니다. Fogbugz는 http를 통해 오류 메시지의 로그/덤프를 서버로 보냅니다. 동일한 작업을 수행 할 수 있으며 드라이브에 대한 사용자의 액세스 권한에 대해 걱정할 필요가 없습니다.

5

텍스트 파일은 서버 응용 프로그램 (Windows 2003을 말한 것)에 적합합니다. 각 서버 응용 프로그램에 대해 별도의 로그 파일이 있어야하며 위치는 관 리자와 동의하는 관례입니다. 예 : ASP.NET 응용 프로그램의 경우 가상 디렉터리 구조를 모방 한 폴더 구조 아래에서 응용 프로그램과 별도의 디스크에 배치되는 경우가 많습니다.

클라이언트 응용 프로그램의 경우 텍스트 파일의 한 가지 단점은 사용자가 응용 프로그램의 여러 복사본을 시작할 수 있다는 것입니다. 따라서 여러 인스턴스가 동일한 로그 파일에 쓰려고하면 충돌 문제가 발생합니다. 이러한 이유로 저는 항상 클라이언트 응용 프로그램 용 Windows 이벤트 로그를 선호합니다. 한 가지주의 할 점은 이벤트 로그를 만들려면 관리자가되어야한다는 것입니다. 설치 패키지에 의해.

파일을 사용하는 경우 Environment.SpecialFolder 폴더를 사용하는 것이 좋습니다. 로컬 다른 사람이 제안한대로 SpecialFolder.ApplicationData보다는 ApplicationData입니다. LocalApplicationData가 로컬 디스크에 있습니다. 사용자가 로밍 프로필을 가지고있을 때 네트워크 문제 로깅을 중지하지 않으려합니다. WinForms 응용 프로그램의 경우 Application.LocalUserAppDataPath를 사용하십시오.

어느 경우 든 구성 파일을 사용하여 로그 할 위치를 결정하므로 쉽게 변경할 수 있습니다. 예 : Log4Net 또는 유사한 프레임 워크를 사용하는 경우 응용 프로그램을 변경하지 않고 텍스트 파일, 이벤트 로그 또는 둘 다 또는 데이터베이스 (예 : 데이터베이스)에 로깅할지 여부를 쉽게 구성 할 수 있습니다.

1

나는 이것에 Lou와 동의하지만 Joe가 말한 것처럼 설정 파일에 이것을 설정하는 것을 선호한다. 당신은

파일 값 = "$ {APPDATA} /Test/log-file.txt"를 사용할 수 있습니다

("테스트"당신이 원하는, 또는 완전히 제거 무엇이든 될 수있다) 어떤이의 원인, 구성 파일에 Windows XP에서는 "/ Documents and Settings/LoginUser/Application 데이터/테스트"로, Windows Vista에서는/Users/LoginUser/AppData/Roaming/Test에 기록 할 로그 파일을 선택하십시오.난 그냥 Windows Vista에서이 일을하는 방법을 파악 너무 많은 시간을 보냈다으로

난 그냥 Windows 응용 프로그램과 함께 그대로이 작동 ...

을이를 추가하고있다. 우리가 액세스 할 수 없기 때문에 지금 http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

0

내가 개인적으로 내가 어디에 Windows 이벤트 로그를 사용하고 싶지 않아요 : 웹 애플리케이션의 로깅을 사용하려면,이에 필 Haack의 블로그 항목은 훌륭한 자원이 될 것으로 프로덕션 서버로 전송되므로 오류를보고 싶을 때마다 액세스를 요청해야합니다. 불행히도 빠른 프로세스가 아니므로 다른 사람을 기다리면서 문제 해결을 완전히 마칠 수 있습니다. 나는 또한 다른 응용 프로그램에서 잃어버린 것을 좋아하지 않습니다. 물론 당신은 정렬 할 수 있지만, 그것은 아래로 스크롤하는 약간의 nucance입니다. 당신이 사용하는 것은 당신이 작업하고있는 환경의 제한과 결합 된 개인적 취향과 로그 파일, 이벤트 로그 또는 데이터베이스의 결합이 될 것입니다. (로그 파일, 이벤트 로그 또는 데이터베이스)