4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Log4NetのNullオブジェクトを定義してNullチェックを不要にする

Posted at

実装中のクラスからロガー(Log4Net)に各種ログを出力させたい!
でもクラスが完成したらログを吐いてほしくない!
しかしLogger出力行をいちいち削除するのはもってのほか!

そんな時は、Nullオブジェクトに置き換えてやれば、ログ出力されなくなります。
Nullオブジェクトを用意してやることで、Null値チェックも不要になり一石二鳥。

サンプルコード

Program.cs
using log4net;

public static void Main(string[] args)
{
	// A. か B. のいずれかをコメントアウトしてください
	// A.ログを記録する版
	//ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
	// B.何もしない版
	ILog logger = NullLogger.GetInstance();

	logger.Debug("開発中のデバッグ/トレースに使用する");
	logger.Info("情報(操作履歴等)");
	logger.Warn("注意/警告(障害の一歩手前)");
	logger.Error("システムが停止するまではいかない障害が発生");
	logger.Fatal("システムが停止する致命的な障害が発生");
}

ソースコード:Log4Net ロガーのNullオブジェクト

Log4NetNullLogger.cs
using System;
using log4net;

namespace Rohinomiya
{
	/// <summary>
	/// Logger(Log4Net)クラスの Nullオブジェクトパターン
	/// </summary>
	public sealed class NullLogger: ILog
	{
		private static NullLogger _singleInstance = new NullLogger();

				
		public static NullLogger GetInstance()
		{
			return _singleInstance;
		}
		
		private NullLogger()
		{
		}
		
		public bool IsDebugEnabled
		{
			get { return true; }
		}
		
		public bool IsInfoEnabled
		{
			get { return true; }
		}
		
		public bool IsWarnEnabled
		{
			get { return true; }
		}
		
		public bool IsErrorEnabled
		{
			get { return true; }
		}
		
		public bool IsFatalEnabled
		{
			get { return true; }
		}
		
		public void Debug(object message)
		{
		}
		
		public void Debug(object message, Exception exception)
		{
		}

		public void DebugFormat(string format, params object[] args)
		{
		}

		public void DebugFormat(string format, object arg0)
		{
		}

		public void DebugFormat(string format, object arg0, object arg1)
		{
		}

		public void DebugFormat(string format, object arg0, object arg1, object arg2)
		{
		}

		public void DebugFormat(IFormatProvider provider, string format, params object[] args)
		{
		}

		public void Info(object message)
		{
		}

		public void Info(object message, Exception exception)
		{
		}

		public void InfoFormat(string format, params object[] args)
		{
		}

		public void InfoFormat(string format, object arg0)
		{
		}

		public void InfoFormat(string format, object arg0, object arg1)
		{
		}

		public void InfoFormat(string format, object arg0, object arg1, object arg2)
		{
		}

		public void InfoFormat(IFormatProvider provider, string format, params object[] args)
		{
		}

		public void Warn(object message)
		{
		}

		public void Warn(object message, Exception exception)
		{
		}

		public void WarnFormat(string format, params object[] args)
		{
		}

		public void WarnFormat(string format, object arg0)
		{
		}

		public void WarnFormat(string format, object arg0, object arg1)
		{
		}

		public void WarnFormat(string format, object arg0, object arg1, object arg2)
		{
		}

		public void WarnFormat(IFormatProvider provider, string format, params object[] args)
		{
		}

		public void Error(object message)
		{
		}

		public void Error(object message, Exception exception)
		{
		}

		public void ErrorFormat(string format, params object[] args)
		{
		}

		public void ErrorFormat(string format, object arg0)
		{
		}

		public void ErrorFormat(string format, object arg0, object arg1)
		{
		}

		public void ErrorFormat(string format, object arg0, object arg1, object arg2)
		{
		}

		public void ErrorFormat(IFormatProvider provider, string format, params object[] args)
		{
		}

		public void Fatal(object message)
		{
		}

		public void Fatal(object message, Exception exception)
		{
		}

		public void FatalFormat(string format, params object[] args)
		{
		}

		public void FatalFormat(string format, object arg0)
		{
		}


		public void FatalFormat(string format, object arg0, object arg1)
		{
		}

		public void FatalFormat(string format, object arg0, object arg1, object arg2)
		{
		}

		public void FatalFormat(IFormatProvider provider, string format, params object[] args)
		{
		}

		//CS0535 対応
		//(http://old.nabble.com/-jira---Created--(LOG4NET-326)-Add-a-null-logger-implementation-td33520340.html)
		public global::log4net.Core.ILogger Logger
		{
			get { return null; }
		}
	}
	
}

参考

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?