这是我对log4net的配置:
<log4net>
<appender name="MyLogger" type="log4net.Appender.RollingFileAppender">
<file value="MyLog.log" />
<appendToFile value="true" />
<rollingStyle value="Size"/>
<maxSizeRollBackups value="20"/>
<maximumFileSize value="1000KB"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss},%p,%m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="MyLogger" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
在C#中,我试图获取日志文件的名称(即MyLog.log).我用Google搜索并尝试了很多东西,但未能这样做.有帮助吗?
谢谢!
Yak*_*een 96
在您的情况下解决方案非常简单; 只需使用此代码:
var rootAppender = ((Hierarchy)LogManager.GetRepository())
.Root.Appenders.OfType<FileAppender>()
.FirstOrDefault();
string filename = rootAppender != null ? rootAppender.File : string.Empty;
Run Code Online (Sandbox Code Playgroud)
fal*_*aff 28
拥有多个文件追加程序时,您可能希望按名称获取它们.另外,为了确保获取appender,即使它没有被根节点引用,以下代码也有助于:
public static string GetLogFileName(string name)
{
var rootAppender = LogManager.GetRepository()
.GetAppenders()
.OfType<FileAppender>()
.FirstOrDefault(fa => fa.Name == name);
return rootAppender != null ? rootAppender.File : string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
因为我已经在类中定义了一个记录器,所以我只使用它.需要注意的一点是,可能有多个appender,通常第一个是控制台(没有文件).这是我的价值所在的解决方案.
using log4net;
using log4net.Appender;
using log4net.Repository;
namespace MyNameSpace {
public class MyClass {
private static readonly ILog logger = LogManager.GetLogger(typeof(MyClass));
public String GetLogFileName() {
String filename = null;
IAppender[] appenders = logger.Logger.Repository.GetAppenders();
// Check each appender this logger has
foreach (IAppender appender in appenders) {
Type t = appender.GetType();
// Get the file name from the first FileAppender found and return
if (t.Equals(typeof(FileAppender)) || t.Equals(typeof(RollingFileAppender))) {
filename = ((FileAppender)appender).File;
break;
}
}
return filename;
}
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
45367 次 |
| 最近记录: |