| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #region Copyright notice and license
- // Copyright 2015 gRPC authors.
- //
- // Licensed 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;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using Grpc.Core.Utils;
- namespace Grpc.Core.Logging
- {
- /// <summary>Logger that logs to an arbitrary <c>System.IO.TextWriter</c>.</summary>
- public class TextWriterLogger : ILogger
- {
- // Format similar enough to C core log format except nanosecond precision is not supported.
- const string DateTimeFormatString = "MMdd HH:mm:ss.ffffff";
- readonly Func<TextWriter> textWriterProvider;
- readonly Type forType;
- readonly string forTypeString;
- /// <summary>
- /// Creates a console logger not associated to any specific type and writes to given <c>System.IO.TextWriter</c>.
- /// User is responsible for providing an instance of TextWriter that is thread-safe.
- /// </summary>
- public TextWriterLogger(TextWriter textWriter) : this(() => textWriter)
- {
- GrpcPreconditions.CheckNotNull(textWriter);
- }
- /// <summary>
- /// Creates a console logger not associated to any specific type and writes to a <c>System.IO.TextWriter</c> obtained from given provider.
- /// User is responsible for providing an instance of TextWriter that is thread-safe.
- /// </summary>
- public TextWriterLogger(Func<TextWriter> textWriterProvider) : this(textWriterProvider, null)
- {
- }
- /// <summary>Creates a console logger that logs messsage specific for given type.</summary>
- protected TextWriterLogger(Func<TextWriter> textWriterProvider, Type forType)
- {
- this.textWriterProvider = GrpcPreconditions.CheckNotNull(textWriterProvider);
- this.forType = forType;
- if (forType != null)
- {
- var namespaceStr = forType.Namespace ?? "";
- if (namespaceStr.Length > 0)
- {
- namespaceStr += ".";
- }
- this.forTypeString = namespaceStr + forType.Name + " ";
- }
- else
- {
- this.forTypeString = "";
- }
- }
- /// <summary>
- /// Returns a logger associated with the specified type.
- /// </summary>
- public virtual ILogger ForType<T>()
- {
- if (typeof(T) == forType)
- {
- return this;
- }
- return new TextWriterLogger(this.textWriterProvider, typeof(T));
- }
- /// <summary>Logs a message with severity Debug.</summary>
- public void Debug(string message)
- {
- Log("D", message);
- }
- /// <summary>Logs a formatted message with severity Debug.</summary>
- public void Debug(string format, params object[] formatArgs)
- {
- Debug(string.Format(format, formatArgs));
- }
- /// <summary>Logs a message with severity Info.</summary>
- public void Info(string message)
- {
- Log("I", message);
- }
- /// <summary>Logs a formatted message with severity Info.</summary>
- public void Info(string format, params object[] formatArgs)
- {
- Info(string.Format(format, formatArgs));
- }
- /// <summary>Logs a message with severity Warning.</summary>
- public void Warning(string message)
- {
- Log("W", message);
- }
- /// <summary>Logs a formatted message with severity Warning.</summary>
- public void Warning(string format, params object[] formatArgs)
- {
- Warning(string.Format(format, formatArgs));
- }
- /// <summary>Logs a message and an associated exception with severity Warning.</summary>
- public void Warning(Exception exception, string message)
- {
- Warning(message + " " + exception);
- }
- /// <summary>Logs a message with severity Error.</summary>
- public void Error(string message)
- {
- Log("E", message);
- }
- /// <summary>Logs a formatted message with severity Error.</summary>
- public void Error(string format, params object[] formatArgs)
- {
- Error(string.Format(format, formatArgs));
- }
- /// <summary>Logs a message and an associated exception with severity Error.</summary>
- public void Error(Exception exception, string message)
- {
- Error(message + " " + exception);
- }
- /// <summary>Gets the type associated with this logger.</summary>
- protected Type AssociatedType
- {
- get { return forType; }
- }
- private void Log(string severityString, string message)
- {
- textWriterProvider().WriteLine("{0}{1} {2}{3}",
- severityString,
- DateTime.Now.ToString(DateTimeFormatString, CultureInfo.InvariantCulture),
- forTypeString,
- message);
- }
- }
- }
|