有沒有辦法添加發布日誌事件的程序集的程序集版本?包含與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
檢查了這一點:登錄事件上下文http://www.beefycode.com/post/Log4Net-Tutorial-pt-6-Log-Event-Context.aspx
在啓動設置ThreadContext與性能,你需要:
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();
}
}
}
使用此屬性在您的appender 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的日誌記錄
- 3. MassTransit log4net記錄與城堡log4net日誌記錄設施
- 4. Log4Net日誌記錄異常
- 5. 不同級別的log4net日誌記錄
- 6. log4net的設置日誌記錄
- 7. 暫時禁用log4net的日誌記錄
- 8. 力log4net的日誌記錄級別
- 9. 事件日誌記錄的log4net配置
- 10. SLF4J版本的日誌記錄事件
- 11. nHibernate與Log4Net日誌記錄,線程會話問題
- 12. NUnit - 如何包含日誌記錄
- 13. log4net的日誌記錄在Windows事件日誌內部錯誤
- 14. 使用log4net記錄多個程序集
- 15. ASP.NET MVC(2)log4net日誌記錄模式
- 16. log4net - 按用戶日誌記錄
- 17. Log4Net/C# - 禁用默認日誌記錄
- 18. log4net自定義日誌記錄
- 19. 在dll中配置log4net日誌記錄
- 20. nHibernate Log4Net日誌記錄異常
- 21. 使用log4net啓用日誌記錄!
- 22. 還有什麼其他的log4net日誌記錄替代方法?
- 23. 禁用活動記錄的Log4Net日誌記錄
- 24. Sitecore與日誌記錄應用程序塊集成
- 25. db版本的版本控制/日誌記錄更改
- 26. 從代碼而不是從配置啓用log4net的文件日誌記錄
- 27. log4net日誌記錄沒有創建日誌文件
- 28. log4net - 通過COM interop調用一個dll的日誌記錄
- 29. SSIS包腳本日誌記錄
- 30. 使用facebook sdk的最新版本的應用程序日誌記錄