2013-05-10 1 views
1

엔터프라이즈 라이브러리 5.0 로깅 및 필터링과 관련된 설명서를 살펴 보았지만 엔터프라이즈 라이브러리 CHM 외부의 내 시나리오와 관련된 내용을 찾을 수 없습니다.일부 값처럼 범주별로 필터링 할 Enterprise 라이브러리 로깅

몇 가지 유형의 범주가 기록되며 특정 범주 만 선택하도록 로깅을 필터링하려고합니다. 일반, 거북이, Rhino.A, Rhino.B, Rhino.C 등 많은 카테고리의 Rhinos가 있습니다.

Rhino와 같은 카테고리 만 선택하고 싶습니다. __

내가 믿는 것은 일반 또는 거북이가 아닌 필터 일 뿐이므로 오히려 Rhino와 같은 것을 선택하려고합니다. __ 이것에 대한 문서조차 도움이 될 것입니다.

이것은 현재 구성입니다.

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General" logWarningsWhenNoCategoriesMatch="false"> 
    <listeners> 
    <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" source="Enterprise Library Logging" formatter="Text Formatter" log="" machineName="." traceOutputOptions="None" /> 
    <add name="Rolling Flat File Trace Listener" 
     type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     fileName="AppLog.log" 
     formatter="Short Text Formatter" header="------------------------------------------------------" footer="------------------------------------------------------" 
     rollInterval="Day" rollSizeKB="1024" 
     timeStampPattern="yyyy-MM-dd" 
     rollFileExistsBehavior="Increment" 
     traceOutputOptions="LogicalOperationStack, DateTime" /> 
    </listeners> 
    <formatters> 
    <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp(local)}{newline}App Domain: {localAppDomain}{newline}Machine: {localMachine}{newline}Title:{title}{newline}Severity: {severity}{tab}Message: {message}{newline}Category: {category}{newline}ProcessId: {localProcessId}{tab}Process Name: {localProcessName}{newline}Thread Name: {threadName}{tab}ThreadId:{win32ThreadId}&#xA;" name="Text Formatter" /> 
    </formatters> 
    <logFilters> 
    <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     categoryFilterMode="AllowAllExceptDenied" name="Category Filter"> 
     <categoryFilters> 
     <add name="General" /> 
     <add name="Turtle" /> 
     </categoryFilters> 
    </add> 
    </logFilters> 
    <categorySources> 
    <add switchValue="All" name="General" /> 
    <add switchValue="All" name="Turtle" /> 
    </categorySources> 
    <specialSources> 
    <allEvents switchValue="All" name="All Events" /> 
    <notProcessed switchValue="All" name="Unprocessed Category"> 
     <listeners> 
     <add name="Rolling Flat File Trace Listener" /> 
     </listeners> 
    </notProcessed> 
    <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
     <add name="Event Log Listener" /> 
     </listeners> 
    </errors> 
    </specialSources> 
</loggingConfiguration> 

은 필터링은 너무보고, 나는 작동하지만 오히려 코뿔소처럼 만 일을 캡처하기 때문에 관련된 조금 보인다 일반 및 거북이,하지만 모든 것을 포착하고있다. __ 로그가 다른 범주에서 깨끗한 지 확실히 확인하십시오.

<logFilters> 
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    categoryFilterMode="AllowAllExceptDenied" name="Category Filter"> 
    <categoryFilters> 
    <add name="General" /> 
    <add name="Turtle" /> 
    </categoryFilters> 
</add> 
</logFilters> 
<categorySources> 
    <add switchValue="All" name="General" /> 
    <add switchValue="All" name="Turtle" /> 
</categorySources> 

답변

3

엔터프라이즈 라이브러리는 사용자 시나리오를 직접 지원하지 않는 것으로 보입니다. 사용자 정의 로깅 필터를 구현해야 할 수도 있습니다.

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; 
using Microsoft.Practices.EnterpriseLibrary.Logging; 
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration; 
using Microsoft.Practices.EnterpriseLibrary.Logging.Filters; 
using System; 
using System.Linq; 

[ConfigurationElementType(typeof (CustomLogFilterData))] 
public class RhinoFilter : LogFilter 
{ 
    public RhinoFilter(string name) 
     : base(name) 
    { 
    } 

    public RhinoFilter(NameValueCollection settings) 
     : this("RhinoFilter") 
    { 
    } 

    public override bool Filter(LogEntry log) 
    { 
     return log.Categories.Any(x => x.StartsWith("Rhino.")); 
    } 
} 
: 여기

그것이 어떻게 보이는지이다 (이 테스트되지 않은 코드)