2008-10-10 51 views
11

Bạn sẽ viết tệp nhật ký lỗi ở đâu, giả sử ErrorLog.txt, trong Windows? Hãy nhớ rằng đường dẫn sẽ cần phải được mở cho người dùng cơ bản cho quyền ghi tệp.Các vị trí tốt nhất để viết nhật ký lỗi trong Windows ở đâu?

Tôi biết bản ghi sự kiện là một vị trí có thể để viết lỗi, nhưng nó có hoạt động đối với quyền cấp "người dùng" không?

EDIT: Tôi đang nhắm mục tiêu Windows 2003, nhưng tôi đã đặt câu hỏi theo cách như vậy để có một "Hướng dẫn chung" cho nơi để viết nhật ký lỗi.
Đối với EventLog, tôi đã có vấn đề trước khi trong một ứng dụng ASP.NET mà tôi muốn đăng nhập vào sổ ghi sự kiện Windows, nhưng tôi đã có vấn đề an ninh gây ra cho tôi đau lòng. (Tôi không nhớ những vấn đề tôi có, nhưng hãy nhớ có chúng.)

+0

Bạn có thể cụ thể hơn về loại chương trình hoặc loại lỗi bạn định đăng nhập. Làm thế nào quan trọng là các lỗi về lâu dài. (ví dụ: máy chủ web?) –

+0

Sẽ hữu ích khi biết bạn đang phát triển công nghệ gì và phiên bản hệ điều hành nào bạn đang nhắm mục tiêu. :) –

Trả lời

14

Bạn đã cân nhắc việc ghi nhật ký trình xem sự kiện để thay thế? Nếu bạn muốn viết nhật ký của riêng mình, tôi đề xuất thư mục cài đặt ứng dụng cục bộ cho người dùng. Tạo một thư mục sản phẩm ở dưới đó. Nó khác nhau trên phiên bản Windows khác nhau.

Trên Vista, bạn không thể đặt các tệp như thế này trong tệp c: \ program. Bạn sẽ gặp rất nhiều vấn đề với nó.

Trong .NET, bạn có thể tìm ra thư mục này với điều này:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

Và Event Log là khá đơn giản để sử dụng quá:

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

+0

Thư mục cài đặt ứng dụng là một vị trí tốt. Dễ dàng lấy ra trong .net WinForms, mà không có thêm munging, thông qua tính chất tĩnh trên đối tượng ứng dụng của bạn (.CommonAppDataPath, .LocalUserAppDataPath, vv) –

+0

Vấn đề với việc sử dụng thư mục cài đặt ứng dụng là hầu hết các tệp nhật ký thời gian được mở bằng tay trong notepad cho Explorer, có nghĩa là người dùng sẽ phải đào bới cho nó. –

+1

Theo quy tắc, tôi cung cấp một cơ chế thông qua giao diện người dùng để mở trực tiếp tệp nhật ký. Và phần mềm của bạn luôn hoạt động, vì vậy khi nào thì họ sẽ cần phải nhìn vào nhật ký, đúng không? ;) –

0

% TEMP% luôn là vị trí tốt cho các nhật ký mà tôi tìm thấy.

+0

Nếu nhật ký tương đối không quan trọng trong thời gian dài, tôi đồng ý rằng Temp là điều đúng đắn. –

-5

Đặt nó vào thư mục của ứng dụng. Người dùng sẽ cần quyền truy cập vào thư mục để chạy và chạy ứng dụng, và bạn có thể kiểm tra quyền truy cập ghi khi khởi động ứng dụng.

Nhật ký sự kiện là một cơn đau để sử dụng để khắc phục sự cố, nhưng bạn vẫn nên đăng các lỗi nghiêm trọng ở đó.

EDIT - Bạn nên xem xét các khối ứng dụng MS để ghi nhật ký nếu bạn đang sử dụng .NET. Họ thực sự làm cho cuộc sống dễ dàng.

Jeez Karma-killer. Lần tới, tôi thậm chí sẽ không đưa ra đề xuất khi người đăng ký đăng lên một bài đăng chưa hoàn chỉnh.

+0

Nhật ký ứng dụng không được đặt trong thư mục ứng dụng. Trong một môi trường an toàn, các quản trị viên không có quyền ghi. –

+0

Đặt tệp nhật ký trong thư mục mà ứng dụng được cài đặt là một ý tưởng * BAD * * BAD *. Tôi không thể nhắc lại điều đó đủ mạnh. Người dùng trên Vista có thể chạy ứng dụng nhưng họ KHÔNG thể (và KHÔNG thể) ghi vào thư mục ứng dụng trong% PROGRAMFILES% – Rob

+0

Không phải tùy chọn cho các chương trình trong vista và ý tưởng tồi trong chung. Vista sẽ không cho phép chương trình tạo tập tin trong 'Program Files' vì vậy nếu ứng dụng được cài đặt ở đó việc ghi nhật ký sẽ thất bại mạnh. – workmad3

3

Cá nhân, tôi sẽ đề nghị sử dụng bản ghi sự kiện Windows, thật tuyệt. Nếu bạn không thể, sau đó ghi tệp vào thư mục ApplicationData hoặc thư mục ProgramData (Dữ liệu ứng dụng cho tất cả người dùng trên Windows XP).

2

Vị trí chuẩn (s) là:

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

hoặc

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

(aka %UserProfile%\Application Data\MyApp) mà sẽ phù hợp với người sử dụng mức yêu cầu phép của bạn. Nó cũng tách nhật ký được tạo bởi những người dùng khác nhau.

Sử dụng .NET chạy, chúng có thể được xây dựng như:

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

hoặc

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

tiếp theo:

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

(Trong đó, hy vọng, bản đồ Vista hồ sơ quá).

+0

Điều này không phù hợp với Vista - (tốt hơn để sử dụng.Lớp môi trường hoặc thứ gì đó kết thúc cuộc gọi phù hợp với bất kỳ ngôn ngữ nào bạn đang sử dụng) –

2

Nhật ký sự kiện Windows chắc chắn là cách để ghi nhật ký lỗi. Bạn không bị giới hạn trong nhật ký "Ứng dụng" vì có thể tạo mục tiêu nhật ký mới (ví dụ: "Ứng dụng của tôi"). Điều đó có thể cần phải được thực hiện như là một phần của thiết lập như tôi không chắc chắn nếu nó đòi hỏi quyền quản trị hay không. Có một ví dụ của Microsoft trong C# tại http://support.microsoft.com/kb/307024.

Windows 2008 cũng có Event Log Forwarding có thể khá tiện dụng với các ứng dụng máy chủ.

+0

Tạo "Nguồn sự kiện" mới (văn bản trong một trường) trong nhật ký hiện có yêu cầu quyền quản trị, vì vậy tôi phải giả định việc tạo Nhật ký mới (một tệp hoàn toàn mới) cũng sẽ yêu cầu quyền quản trị. –

+0

Đây là "vấn đề" mà tôi đã có trước đó, quyền quản trị được yêu cầu cho ứng dụng web để tạo nhật ký trong Nhật ký sự kiện Windows. –

0

Đi ngược lại hạt ở đây - nó phụ thuộc vào những gì bạn cần làm. Đôi khi bạn cần phải thao tác các kết quả, do đó, log.txt là cách để đi. Nó đơn giản, có thể thay đổi và dễ tìm kiếm.

Lấy ví dụ từ Joel. Fogbugz sẽ gửi một log/dump các thông báo lỗi qua http đến máy chủ của họ. Bạn có thể làm tương tự và không phải lo lắng về quyền truy cập của người dùng trên ổ đĩa của họ.

5

Tệp văn bản thật tuyệt vời cho ứng dụng máy chủ (bạn đã nói Windows 2003). Bạn nên có một tệp nhật ký riêng cho mỗi ứng dụng máy chủ, vị trí thực sự là vấn đề của quy ước để đồng ý với quản trị viên. Ví dụ. cho các ứng dụng ASP.NET tôi thường thấy chúng được đặt trên một đĩa riêng biệt từ ứng dụng theo cấu trúc thư mục bắt chước cấu trúc thư mục ảo.

Đối với ứng dụng khách, một nhược điểm của tệp văn bản là người dùng có thể bắt đầu nhiều bản sao của ứng dụng của bạn (trừ khi bạn đã thực hiện các bước cụ thể để ngăn điều này). Vì vậy, bạn có vấn đề tranh chấp nếu nhiều trường hợp cố gắng ghi vào cùng một tệp nhật ký. Vì lý do này, tôi sẽ luôn luôn thích Nhật ký sự kiện Windows cho các ứng dụng khách. Một lưu ý là bạn cần phải là quản trị viên để tạo nhật ký sự kiện - điều này có thể được thực hiện, ví dụ: theo gói cài đặt.

Nếu bạn sử dụng tệp, tôi khuyên bạn nên sử dụng thư mục Environment.SpecialFolder. Địa phương ApplicationData thay vì SpecialFolder.ApplicationData theo đề xuất của người khác. LocalApplicationData nằm trên đĩa cục bộ: bạn không muốn các sự cố mạng ngăn bạn đăng nhập khi người dùng có hồ sơ chuyển vùng. Đối với một ứng dụng WinForms, sử dụng Application.LocalUserAppDataPath.

Trong cả hai trường hợp, tôi sẽ sử dụng tệp cấu hình để quyết định nơi đăng nhập để bạn có thể dễ dàng thay đổi. Ví dụ. nếu bạn sử dụng Log4Net hoặc một khung tương tự, bạn có thể dễ dàng định cấu hình có đăng nhập vào tệp văn bản, nhật ký sự kiện, cả hai hoặc ở nơi khác (ví dụ: cơ sở dữ liệu) mà không thay đổi ứng dụng của bạn.

1

Tôi đồng ý với Lou về việc này, nhưng tôi muốn thiết lập điều này trong tệp cấu hình như Joe đã nói. Bạn có thể sử dụng

giá trị file = "$ {} APPDATA /Test/log-file.txt"

("Test" có thể là bất cứ điều gì bạn muốn, hoặc gỡ bỏ hoàn toàn) trong tập tin cấu hình, mà làm cho tệp nhật ký sẽ được ghi vào "/ Tài liệu và Cài đặt/Người dùng đăng nhập/Ứng dụng Dữ liệu/Thử nghiệm" trên Windows XP và "/ Người dùng/Người dùng đăng nhập/AppData/Roaming/Thử nghiệm trên Windows Vista.

Tôi chỉ thêm này như tôi chỉ cần bỏ ra quá nhiều thời gian để tìm cách làm cho công việc này trên Windows Vista ...

này hoạt động như nó vốn có với các ứng dụng Windows. Để sử dụng đăng nhập vào các ứng dụng web, tôi thấy blog của Phil Haack về điều này là một nguồn tài nguyên tuyệt vời: http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

0

Cá nhân tôi không thích sử dụng Nhật ký sự kiện Windows nơi tôi đang ở đây vì chúng tôi không có quyền truy cập với các máy chủ sản xuất, điều đó có nghĩa là chúng tôi cần phải yêu cầu quyền truy cập mỗi khi chúng tôi muốn xem lỗi. Nó không phải là một quá trình nhanh chóng không may, do đó, xử lý sự cố của bạn là hoàn toàn haulted bằng cách chờ đợi cho người khác. Tôi cũng không thích rằng họ bị lạc trong những người từ các ứng dụng khác. Chắc chắn bạn có thể sắp xếp, nhưng nó chỉ là một chút của một nucance di chuyển xuống. Những gì bạn sử dụng sẽ kết thúc là một sự kết hợp của sở thích cá nhân cùng với những hạn chế của môi trường bạn đang làm việc. (Log file, bản ghi sự kiện, hoặc cơ sở dữ liệu)

Các vấn đề liên quan