おそらく過度に単純化されたソリューション:
public interface ILoggable {
string ToLogFormat();
}
次に、ログに記録できる任意のオブジェクトにこのインターフェイスを実装します。ロギング レイヤーはインターフェイスのみに依存するようになり、どのレベルでも使用できるようになりました。
別の方法は、「ヘルパー」クラスを使用して、オーバーロードを介して ToLogFormat を実装することです。
public class LogHelper {
public string ToLogFormat(DAO obj) { ... }
public string ToLogFormat(SomeOtherClass obj) { ... }
...
}
1 つのモノリシック ログ ヘルパーを使用することもできますが (すべてのライブラリを参照する必要があるため、これは不適切です)、アセンブリまたはクラスごとにログ ヘルパーを実装し、カスタム属性を使用してログ ヘルパー クラスの名前を指定することをお勧めします。
個人的には、より柔軟な ILoggable アプローチを好みます。logging パッケージには、次のような単純な機能を含めることができます。
public class Logger {
public string ToLogFormat(object obj) {
if (obj is ILoggable) {
return ((ILoggable)obj).ToLogFormat();
}
return obj.ToString();
}
}