1: using System;
2: using System.Runtime.Remoting.Messaging;
3: using System.Text;
4:
5: public class LoggingProxy : IProxy
6: {
7: public void BeforeInvoke(IMethodCallMessage methodCallMessage)
8: {
9: //Ggf. Universellen XML-Serialisierer für die Methodenargumente anwenden
10: string methodCallMessageParameter
11: = GetMethodCallMessageParameter(methodCallMessage);
12:
13: string message = string.Format(
14: @"--------------------------------------------------
15: --> Methodeneintritt: {4}
16: Uhrzeit: {0}
17: Typinformation: {1}
18: Methodensignatur: {2}
19: Parameter:
20: {3}
21: ",
22: DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"),
23: methodCallMessage.TypeName,
24: methodCallMessage.MethodBase,
25: methodCallMessageParameter,
26: methodCallMessage.MethodName);
27:
28: WriteLogEntry(message);
29: }
30:
31: public void Initalize(Type targetInterface, object originalTarget)
32: {
33: // TODO
34: }
35:
36:
37:
38: private string GetMethodCallMessageParameter(IMethodMessage methodCallMessage)
39: {
40: StringBuilder stringBuilderInvocationParameter
41: = new StringBuilder();
42: for (int index = 0; index < methodCallMessage.Args.Length; index++)
43: {
44: object parameter = methodCallMessage.Args[index];
45: string parameterMessage = String.Format(
46: " [{0}]: {1}",
47: index,
48: parameter == null ? "[NULL]" : parameter.ToString());
49: stringBuilderInvocationParameter.AppendLine(parameterMessage);
50: }
51: return
52: stringBuilderInvocationParameter.ToString()
53: .TrimEnd(Environment.NewLine.ToCharArray())
54: .TrimEnd(',');
55: }
56:
57: private string GetMethodCallMessageParameterOutRef(IMethodReturnMessage methodCallMessage)
58: {
59: StringBuilder stringBuilderInvocationParameter
60: = new StringBuilder();
61: for (int index = 0; index < methodCallMessage.OutArgs.Length; index++)
62: {
63: object parameter = methodCallMessage.OutArgs[index];
64: string parameterMessage = String.Format(
65: " [{0}]: {1}",
66: index,
67: parameter == null ? "[NULL]" : parameter.ToString());
68: stringBuilderInvocationParameter.AppendLine(parameterMessage);
69: }
70: return stringBuilderInvocationParameter.ToString()
71: .TrimEnd(Environment.NewLine.ToCharArray())
72: .TrimEnd(',');
73: }
74:
75: public void AfterInvoke(IMethodCallMessage methodCallMessage, IMethodReturnMessage methodReturnMessage)
76: {
77: string methodCallMessageParameter
78: = GetMethodCallMessageParameter(methodCallMessage);
79: string methodCallMessageParameterOutRef
80: = GetMethodCallMessageParameterOutRef(methodReturnMessage);
81: string message = string.Format(
82: @"--------------------------------------------------
83: <-- Methodenaustritt: {6}
84: Uhrzeit: {0}
85: Typinformation: {1}
86: Methodensignatur: {2}
87: Parameter:
88: {3}
89: Rückgabe:
90: {4}
91: Rückgabe Out/Ref.:
92: {5}
93: ",
94: DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"),
95: methodReturnMessage.TypeName,
96: methodReturnMessage.MethodBase,
97: methodCallMessageParameter,
98: methodReturnMessage.ReturnValue,
99: methodCallMessageParameterOutRef,
100: methodReturnMessage.MethodName);
101:
102: WriteLogEntry(message);
103: }
104:
105:
106: public void ExceptionOccurred(IMethodCallMessage methodCallMessage, Exception exception)
107: {
108: string methodCallMessageParameter
109: = GetMethodCallMessageParameter(methodCallMessage);
110: string message = string.Format(
111: @"--------------------------------------------------
112: <-X Methodenaustritt: {5}
113: Uhrzeit: {0}
114: Typinformation: {1}
115: Methodensignatur: {2}
116: Parameter:
117: {3}
118: Fehler:
119: {4}
120: ",
121: DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"),
122: methodCallMessage.TypeName,
123: methodCallMessage.MethodBase,
124: methodCallMessageParameter,
125: exception,
126: methodCallMessage.MethodName);
127: WriteLogEntry(message);
128: }
129:
130: public void WriteLogEntry(string message)
131: {
132: Console.WriteLine(message);
133: }
134: }