我正在尝试编写一个C#代码,它通过log4net API 在运行时检索log4net日志文件的名称模式.
也就是说,如果在log4net.config中定义了以下appender:
<appender name="MyAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%date{yyyy}\%date{MM}\%date{dd}\%property{Id}.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="16" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
我想在代码中的字符串变量中获取%date {yyyy} \%date {MM} \%date {dd} \%property {Id} .log(不将log4net.config解析为纯XML).
有没有人有想法来拉这个伎俩?
先感谢您.
此模式的值将位于属于日志存储库的实例File的属性中。FileAppender
可以通过几种不同的方式来获取附加程序。
ILogger实例(例如您从 获得的实例LogManager.GetLogger()),那么它就有一个Appenders属性。这将为您提供与日志记录层次结构的特定级别关联的任何附加程序。LogManager.GetRepository()以获取Heirarchy包含整个记录器和附加器层次结构的对象。该方法需要一个程序集,因此请传递GetCallingAssembly()以获取默认程序集。此类有一个GetAppenders()返回所有配置的附加程序的方法,但它不会告诉您哪些附加程序与哪些记录器关联。从那里,只需查找正确类型的附加程序(例如FileAppender或RollingFileAppender),然后读取它的File属性。