我想使用PatternString在C#中使用log4net在RollingFileAppender的文件名中指定一个模式。这可以在配置文件中轻松完成,并且有许多在线示例。但是,我想在C#代码中做同样的事情。
这是在配置文件中完成的:
<file type="log4net.Util.PatternString" value="C:\Log\MyLogFile.[%processid].txt" />
下面的代码完成了有关在没有配置文件的情况下设置log4net的所有操作。 除了上面的PatternString行。如何为代码中的RollingFileAppender 指定PatternString?
我的代码如下所示:
public class Log4NetInitializer
{
public static void Setup()
{
Hierarchy hierarchy = (Hierarchy) LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %-5level %logger [%ndc] %thread %newline%message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender fileLogRoot = new RollingFileAppender();
fileLogRoot.AppendToFile = true;
fileLogRoot.File = @"C:\Log\MyLogFile.txt";
fileLogRoot.Layout = patternLayout;
fileLogRoot.MaxSizeRollBackups = 5;
fileLogRoot.Encoding = Encoding.UTF8;
fileLogRoot.LockingModel = new FileAppender.MinimalLock();
fileLogRoot.ActivateOptions();
hierarchy.Root.AddAppender(fileLogRoot);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
}
}
答案 0 :(得分:2)
似乎没有相应的(或者我没有找到它),你可能无论如何“欺骗”并自己照顾替换:
...
var pId = System.Diagnostics.Process.GetCurrentProcess().Id;
fileLogRoot.File = string.Format(@"C:\Log\MyLogFile.{0}.txt", pId);
...
答案 1 :(得分:1)
log4net.Util中的PatternString类允许您解析模式字符串,就像在xml配置文件中编写它们一样。
fileLogRoot.File = new PatternString(@"C:\Log\MyLogFile.[%processid].txt").Format();
答案 2 :(得分:-1)
这可能不会直接回答您的问题,但您可以在代码中通过XML配置log4net(和NLog)(而不是将XML放在配置文件中)。我在一段时间后发布了一个问题/答案。
这是一个链接:
Configure log4net or NLog with XML from code
我的帖子是从某处预定义/存储XML的角度出发的(在我的例子中,我们的项目正考虑定义XML配置并将其存储在数据库中),读取XML(作为字符串)并设置它直接在log4net或NLog配置对象上。我们从来没有实际使用这种方法来实现任何东西,但在我的有限测试中,它确实似乎工作正常。