【发布时间】:2021-10-18 02:11:09
【问题描述】:
我已从Can you configure log4net in code instead of using a config file? 获取代码并将其放入我的小型 NET5 应用程序中。到目前为止,日志文件似乎还可以,但是由于我没有配置任何进入控制台的附加程序,而只有一个滚动文件附加程序,所以我没想到会有任何东西进入控制台。然而,这正是正在发生的事情——我的消息将发送到控制台,尽管格式不同,它也没有使用我的模式布局。
这是我目前需要设置的:
private void SetupLog4Net()
{
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders();
hierarchy.Root.Level = Level.Debug;
var patternLayout = new PatternLayout
{
ConversionPattern = "%date{yyyy-MM-dd HH:mm:ss.fff} [%logger] %message%newline%exception",
};
patternLayout.ActivateOptions();
var rollingFileAppender = new RollingFileAppender
{
AppendToFile = true,
File = @"Logs/uav.log",
Layout = patternLayout,
MaxSizeRollBackups = 5,
MaxFileSize = 1_000_000,
RollingStyle = RollingFileAppender.RollingMode.Size,
StaticLogFileName = true,
Encoding = System.Text.Encoding.UTF8,
};
rollingFileAppender.ActivateOptions();
hierarchy.Root.AddAppender(rollingFileAppender);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
BasicConfigurator.Configure(hierarchy);
}
这被称为 Main 所做的第一件事中的第一件事(构造应用程序对象,这是通过构造函数调用的),然后我们才开始做任何其他事情。
然后,稍后,当我们调用记录内容时,例如,
var logger = LogManager.GetLogger(this.GetType());
logger.Info(message.Message, message.Exception);
我得到如下输出:
1780 [6] INFO MyClass.MainApp (null) - Ready
我什至无法理解其中的一半,但有意义不是重点 - 清除这个 appender 是。对实际配置的评论与 cmets 一样好,但主要问题是如何删除该控制台输出。
在 Linux 上使用 Log4NET 2.0.12 和 .NET 5.0.400
【问题讨论】:
-
如果您在 .NET 5 中使用 SeriLog,那就太好了。它比现代更现代,您可以在那里为 seriLog 使用更多功能。 infoworld.com/article/3624022/…
-
我不记得说过我正在构建一个 ASP 应用程序。我不是。另外,我在多种语言中使用 Log4* 系列,通常不会有这个问题,并且希望尽可能保持一致。此外,这个“答案”对可能搜索这个的普通人没有帮助。
-
问:问题是您收到一条无关的日志消息,上面写着“准备就绪”......并且您想抑制它。其他一切都按您的预期工作。正确的?问:您能否向我们展示更多的“无关信息”?也许这可能会给我们一个线索,它们来自哪里……以及如何关闭它们。
-
“就绪”消息是一条有效消息,但我只希望它出现在“Logs/uav.log”日志文件中。它显示在那里,但也显示在控制台上。事实上,进入日志文件的所有内容(正确!)也在控制台上以不同的格式复制,而目标是控制台为空。
-
嘿伙计,尝试删除行“BasicConfigurator.Configure(hierarchy);”如果您不写信给控制台,我认为您不需要它。
标签: c# configuration log4net