W przypadku aplikacji typu sharepoint nie powinniśmy używać zewnętrznych bibliotek. Jak opisuje to avishnyakov za pomocą spdevlab.com:
Suggestion #0 – Do not use 3rd part logging framework
Even if you stick to log4net, NLog, EventLog or System.Diagnostic.Trace, or trying to invent your own wheel, then DO NOT EVER USE THAT STUFF AGAIN.
SharePoint has its own logging system called “Unified Logging System (ULS)“. If you still wonder why would you use ULS instead your lovely logging framework, then consider the following facts:
- ULS is used by SharePoint, so if you used 3rd part logging, you would need to consolidate logs from few different sources
- ULS can be easily configured from Central Administration as well as by PowerShell
- ULS can write to Windows Event Log without elevated privileges (!)
- ULS shrinks text log files on the hard drives (!)
- ULS does not require web.config changes/modifications (!). That’s quite important concern for multi-server farm
- SharePoint can aggregate ULS log (and not just logs..) from multiple servers to the logging data base (Usage and Health Data Collection Service Application)
Dlatego w rozwiązaniach typu sharepoint 2010 dużo lepszym rozwiązaniem jest napisanie/skopiowanie klasy LoggingService dziedziczącej po SPDiagnosticsServiceBase.
Takie rozwiązanie znajdziemy w wielu miejscach w sieci, więc wydaje się ono być najlepsze.
Sama klasa, wygląda następująco:
natomiast jej użycie wygląda tak:public
class
LoggingService : SPDiagnosticsServiceBase
{
public
static
string
DiagnosticAreaName =
"My"
;
private
static
LoggingService _Current;
public
static
LoggingService Current
{
get
{
if
(_Current ==
null
)
{
_Current =
new
LoggingService();
}
return
_Current;
}
}
private
LoggingService()
:
base
(
"My Logging Service"
, SPFarm.Local)
{
}
protected
override
IEnumerable<SPDiagnosticsArea> ProvideAreas()
{
List<SPDiagnosticsArea> areas =
new
List<SPDiagnosticsArea>
{
new
SPDiagnosticsArea(DiagnosticAreaName,
new
List<SPDiagnosticsCategory>
{
new
SPDiagnosticsCategory(
"WebParts"
, TraceSeverity.Unexpected, EventSeverity.Error)
})
};
return
areas;
}
public
static
void
LogError(
string
categoryName,
string
errorMessage)
{
SPDiagnosticsCategory category = LoggingService.Current.Areas[DiagnosticAreaName].Categories[categoryName];
LoggingService.Current.WriteTrace(0, category, TraceSeverity.Unexpected, errorMessage);
}
}
Do przeglądania logów polecam program ULSViewer dostępny na mocy licencji MICROSOFT PUBLIC LICENSE (Ms-PL)LoggingService.LogError(
"WebParts"
, ex.ToString);
Przydatne linki:
wpis Avishnyakov'a na spdevlab.com
wpis na blogu Waldka Mastykarza
wpis na blogu Jurgena Baurle
Brak komentarzy:
Prześlij komentarz