0
我无法找到关于我正在寻找的信息。基本上需要能够即时创建日志文件。详细地说,我们希望能够根据某些事件更改日志文件的位置。log4net动态创建日志文件
例如: 所以我从C:\ Type1Logs \ Log.txt开始,并正常写入文件。接下来会出现一个事件,它会要求在C:\ Type2Logs \ Logs.dat中创建的新文件以及发送到该文件的所有新日志消息。
以下是我用作原型的一些简单代码。我添加了hier进行调试,看看我是否可以使用该路线进行更改。它确实让我发现我现在的代码创建了另一个appender,而不是改变现有的appender。
using log4net;
using log4net.Appender;
using log4net.Config;
using log4net.Core;
using log4net.Layout;
using log4net.Repository.Hierarchy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestConsoleApp
{
class Program
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
string Input = "";
Logger.ConfigureFileAppender("log.txt"); // This only has to be called once.
while (Input.ToUpper() != "QUIT")
{
Console.WriteLine("Enter text to write to the log");
Input = Console.ReadLine();
if (Input.Length > 7 && Input.ToUpper().Substring(0,6) == "NEWLOG")
{
Logger.ConfigureFileAppender(Input.Substring(6));
Hierarchy hier = log4net.LogManager.GetRepository() as Hierarchy;
}
Log.Info(Input);
}
}
}
class Logger
{
public static void ConfigureFileAppender(string logFile)
{
var fileAppender = GetFileAppender(logFile);
BasicConfigurator.Configure(fileAppender);
((Hierarchy)LogManager.GetRepository()).Root.Level = Level.Debug;
}
private static IAppender GetFileAppender(string logFile)
{
var layout = new PatternLayout("%date %-5level %logger - %message%newline");
layout.ActivateOptions(); // According to the docs this must be called as soon as any properties have been changed.
var appender = new FileAppender
{
File = logFile,
Encoding = Encoding.UTF8,
Threshold = Level.Debug,
Layout = layout
};
appender.ActivateOptions();
return appender;
}
}
}
看看这个帖子是你在寻找: [log4net的:以编程方式指定多个记录器(http://stackoverflow.com/ a/308544/2794484) –
[This answer](http://stackoverflow.com/a/6963420/43846)显示如何更改现有appender上的文件位置 – stuartd
感谢您的链接。 Stuartd的是我需要的。有趣的是,我只是在十分钟前找出答案,当我看到你的评论时即将发布答案:) –