forked from apache/logging-log4net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExceptionEvaluator.cs
133 lines (121 loc) · 4.04 KB
/
ExceptionEvaluator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#region Apache License
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to you under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#endregion
using System;
#if NETSTANDARD1_3
using System.Reflection;
#endif
namespace log4net.Core
{
/// <summary>
/// An evaluator that triggers on an Exception type
/// </summary>
/// <remarks>
/// <para>
/// This evaluator will trigger if the type of the Exception
/// passed to <see cref="M:IsTriggeringEvent(LoggingEvent)"/>
/// is equal to a Type in <see cref="ExceptionType"/>. ///
/// </para>
/// </remarks>
/// <author>Drew Schaeffer</author>
public class ExceptionEvaluator : ITriggeringEventEvaluator
{
/// <summary>
/// The type that causes the trigger to fire.
/// </summary>
private Type m_type;
/// <summary>
/// Causes subclasses of <see cref="ExceptionType"/> to cause the trigger to fire.
/// </summary>
private bool m_triggerOnSubclass;
/// <summary>
/// Default ctor to allow dynamic creation through a configurator.
/// </summary>
public ExceptionEvaluator()
{
// empty
}
/// <summary>
/// Constructs an evaluator and initializes to trigger on <paramref name="exType"/>
/// </summary>
/// <param name="exType">the type that triggers this evaluator.</param>
/// <param name="triggerOnSubClass">If true, this evaluator will trigger on subclasses of <see cref="ExceptionType"/>.</param>
public ExceptionEvaluator(Type exType, bool triggerOnSubClass)
{
if (exType == null)
{
throw new ArgumentNullException("exType");
}
m_type = exType;
m_triggerOnSubclass = triggerOnSubClass;
}
/// <summary>
/// The type that triggers this evaluator.
/// </summary>
public Type ExceptionType
{
get { return m_type; }
set { m_type = value; }
}
/// <summary>
/// If true, this evaluator will trigger on subclasses of <see cref="ExceptionType"/>.
/// </summary>
public bool TriggerOnSubclass
{
get { return m_triggerOnSubclass; }
set { m_triggerOnSubclass = value; }
}
#region ITriggeringEventEvaluator Members
/// <summary>
/// Is this <paramref name="loggingEvent"/> the triggering event?
/// </summary>
/// <param name="loggingEvent">The event to check</param>
/// <returns>This method returns <c>true</c>, if the logging event Exception
/// Type is <see cref="ExceptionType"/>.
/// Otherwise it returns <c>false</c></returns>
/// <remarks>
/// <para>
/// This evaluator will trigger if the Exception Type of the event
/// passed to <see cref="M:IsTriggeringEvent(LoggingEvent)"/>
/// is <see cref="ExceptionType"/>.
/// </para>
/// </remarks>
public bool IsTriggeringEvent(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
{
throw new ArgumentNullException("loggingEvent");
}
if (m_triggerOnSubclass && loggingEvent.ExceptionObject != null)
{
// check if loggingEvent.ExceptionObject is of type ExceptionType or subclass of ExceptionType
Type exceptionObjectType = loggingEvent.ExceptionObject.GetType();
return exceptionObjectType == m_type || exceptionObjectType.IsSubclassOf(m_type);
}
else if (!m_triggerOnSubclass && loggingEvent.ExceptionObject != null)
{ // check if loggingEvent.ExceptionObject is of type ExceptionType
return loggingEvent.ExceptionObject.GetType() == m_type;
}
else
{ // loggingEvent.ExceptionObject is null
return false;
}
}
#endregion
}
}