ロギングイベントを発行しているアセンブリバージョンのアセンブリを追加する方法はありますか?log4netでログ記録するコードを含むログアセンブリバージョン?
0
A
答えて
1
私はあなたがおそらく独自のカスタムPatternConverterを作成する必要がありますので、内蔵されたことは何がこれを行いますがあると思いとPatternLayoutは(非常に簡単です)していない
最大の問題は速度です、以来、これは、発信者情報を生成するためにlog4netを必要とします(自分自身の言葉で)
警告発信者クラス情報の生成が遅いです。したがって、実行速度が問題とならない限り、その使用は避けるべきです。
速度が問題でない場合は、このようなものは動作するはずです。
public class AssemblyVersionPatternConverter : log4net.Util.PatternConverter
{
protected override void Convert(TextWriter writer, object state)
{
var le = state as log4net.Core.LoggingEvent;
if (le != null)
writer.Write(GetAssemblyVersion(le.LocationInformation.ClassName));
}
}
public class AssemblyVersionPatternLayout : log4net.Layout.PatternLayout
{
public AssemblyVersionPatternLayout()
{
AddConverter(new ConverterInfo
{
Name = "AssemblyVersion",
Type = typeof(AssemblyVersionPatternConverter)
});
}
}
別にGetAssemblyVersion方法を書いてから、それはそれは自分のPatternConverterとPatternLayoutはを実装するのにかかるすべてのです。
これで、カスタムルーチンを使用するようにlog4net構成ファイルを変更する必要があります。
例えばあなたが
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5level %message%newline" />
</layout>
のようなものを持っている場合は、
<layout type="MyNameSpace.AssemblyVersionPatternLayout, MyDllname">
<conversionPattern value="%5level %AssemblyVersion %message%newline" />
</layout>
のようなものGetAssemblyVersion方法に変更し、以下の
のようなものかもしれませんprivate string GetAssemblyVersion(string className)
{
Type type = Type.GetType(className);
System.Reflection.Assembly assembly ;
if (type != null)
assembly = type.Assembly ;
else
assembly = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.GetType(className) != null);
if (assembly == null)
return String.Empty;
return assembly.FullName.Split(',')[1].Replace("Version=", "");
}
注意:Assembly.GetName()。Versionを使用することは推奨されていません。アカウントにローカル権限がある場合、SecurityExceptionがスローされる可能性があります。
0
チェックこのアウト:ログイベントのコンテキストのプロパティではThreadContextセット開始時http://www.beefycode.com/post/Log4Net-Tutorial-pt-6-Log-Event-Context.aspx
次のものが必要です。
class Program
{
private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
log4net.ThreadContext.Properties["myContext"] = "Logging from Main";
log4net.ThreadContext.Properties["AssemblyVersion"] = GetType().Assembly.GetName().Version;
Log.Info("this is an info message");
Console.ReadLine();
}
}
}
使用このプロパティあなたのアペンダのconversionPattern中:
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger (%property{myContext}) (%property{AssemblyVersion}) [%level]- %message%newline" />
</layout>
</appender>
関連する問題
- 1. log4netでログアセンブリバージョン?
- 2. log4netのは、ファイルまたはコンソール(外部log4net.configファイル)をログに記録するログ記録されていない
- 3. 偽装後にlog4netがログに記録されない
- 4. Log4Netで未処理の例外をログに記録する方法
- 5. log4netを使用して複数のアセンブリをログに記録する
- 6. log4netはエラーをログに記録せず、別のファイルに致命的です
- 7. log4netは、異なるレベルの2つのファイルをログに記録します。
- 8. log4netのは、私が活動をログに記録するlog4netのを使用しています
- 9. ユーザーアクティビティをログに記録
- 10. プログラムでElmahでエラーをログに記録する:特定の情報をログに記録する
- 11. セロリタスクのキューにログを記録する
- 12. PreparedStatementをログに記録するには?
- 13. SQLスクリプトエラーをログに記録する
- 14. ユーザーアクティビティをログに記録するには
- 15. Authlogic。ログアウトタイムアウトをログに記録する
- 16. Log4Netで大きなメッセージを記録するAdoNetAppender
- 17. Postgres Windows用のログ記録
- 18. 治療スプラッシュ - ログ記録中
- 19. Grails log4J linuxのログ記録
- 20. エンタープライズライブラリのログ記録ログファイル
- 21. ログに記録されるユーザーに応じたコード
- 22. log4netを使用してWindowsサービスで未処理例外をログに記録する
- 23. SpringでJedisクライアントをログに記録
- 24. Alfresco 4.2+でCMISクエリーをログに記録
- 25. iPhoneでobjc_msgSend()をログに記録
- 26. RailsアプリケーションでRestClientをログに記録
- 27. すべてのlog4net ThreadContext/GlobalContext/LogicalThreadContextプロパティをログに記録するようにappenderを設定するには?
- 28. ログに記録する方法
- 29. RoR:テスト前にログに記録する
- 30. cordova-plugin-crosswalk-webview - 機密データを含むすべてのUIのやりとりをログに記録する