예제 #1
0
				public void Fatal(PubLogger.Level level, string message, params object[] list)
				{
					Log (level, PubLogger.Severity.Fatal, message, list);
				}
예제 #2
0
				public void Warning(PubLogger.Level level, string message, params object[] list)
				{
					Log (level, PubLogger.Severity.Warning, message, list);
				}
예제 #3
0
				public void Error(PubLogger.Level level, string message, params object[] list)
				{
					Log (level, PubLogger.Severity.Error, message, list);
				}
예제 #4
0
				protected void Log(PubLogger.Level level, PubLogger.Severity severity, string message, params object[] list)
				{
					StringBuilder builder = new StringBuilder ();

					builder.Append (level.ToString ());

					if (severity != PubLogger.Severity.Informational) {
						builder.Append (" (");
						builder.Append (severity.ToString ());
						builder.Append ("): ");
					} else {
						builder.Append (": ");
					}

					StackTrace trace = new StackTrace (3);

					if (null != trace) {
						int total = trace.FrameCount;

						StackFrame frame = null;
						UseLoggerSubsystemAttribute subsystem = null;

						for (int current = 0; current < total; ++current) {
							frame = trace.GetFrame (current);

							var methodBase = frame.GetMethod ();
							var classType = methodBase.ReflectedType;

							subsystem = (UseLoggerSubsystemAttribute)Attribute.GetCustomAttribute (classType, typeof(UseLoggerSubsystemAttribute));
							if (null != subsystem) {
								break;
							}
							frame = null;
						}

						if (null == frame) {
							frame = trace.GetFrame (0);
						}

						if (null != frame) {
							var methodBase = frame.GetMethod ();
							var classType = methodBase.ReflectedType;

							string className = classType.Name;
							string @namespace = classType.Namespace;

							if (null == subsystem) {
								subsystem = UseLoggerSubsystemAttribute.GetRegisteredNamespace (@namespace);
							}

							builder.Append ("[");
							if (subsystem != null) {
								builder.Append (subsystem.Name);
								builder.Append ("(");
								builder.Append (subsystem.Id.ToString ());
								builder.Append (")");
							} else {
								builder.Append (@namespace);
							}
							builder.Append ("] ");

							if (className.StartsWith ("<")) {
								builder.Append (classType.FullName);
							} else {
								builder.Append (className);
							}

							builder.Append (".");
							builder.Append (methodBase.Name);
							builder.Append (" ");
						}
					}

					if (list.Length > 0) {
						builder.AppendFormat (message, list);
					} else {
						builder.Append( message);
					}

					ActualDebug.Write (builder.ToString ());
				}