c# - 以编程方式配置 log4net,但额外的日志记录到控制台
问题描述
我从Can you configure log4net in code 而不是使用配置文件中获取了代码?并将其放入我的小 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 才是。对实际配置的评论可以作为评论,但主要问题是如何删除该控制台输出。
在 Linux 上使用 Log4NET 2.0.12 和 .NET 5.0.400
解决方案
好的:所以您真正的问题是“如何禁用 Log4Net 控制台日志记录?”
请记住:在 Java 中,“log4j”是“记录器”。然而,在 .Net 中,Log4net 与 Microsoft.Extensions.Logging 共存。所以有“额外的东西”,可能会产生“惊喜”。.Net 本身(例如 Net 5,nee “.Net Core”)也可能产生“惊喜”。
具体来说,这里讨论了几种解决方案:
一个。更改
log4net.Config.BasicConfigurator.Configure();
为log4net.Config.XmlConfigurator.Configure();
湾。设置调试 = 假
C。在您的应用配置文件中修改“log4net.Internal.Debug”(例如“appsettings.json”)
<appSettings> <add key="log4net.Internal.Debug" value="false"/>
另请查看 Log4Net 常见问题解答:
http://logging.apache.org/log4net/release/faq.html
内部调试消息被写入控制台和 System.Diagnostics.Trace 系统。如果应用程序没有控制台,那里记录的消息将会丢失。请注意,应用程序可以通过设置 System.Console.Out 来重定向控制台流。
由于 log4net 内部调试消息被写入 System.Diagnostics.Trace 系统,因此可以将这些消息重定向到本地文件。
推荐阅读
- regex - 正则表达式跳过以查找匹配项
- php - 在类中使用 Final 会减少内存吗?
- java - 如何快速检查字符串属于哪个范围
- c# - 如何在 .Net Core 5 api 中使用 ws-security soap 服务?
- flutter - 错误:一个文件不能属于多个库
- android - AndroidManifest.xml 此处不允许使用该属性
- python - python,tkinter,创建条形图时出现问题
- reactjs - 使多台机器可以访问流
- javascript - React js将对象转换为数组以供useState
- node.js - 使用 GridView/BoxView 组件时反应 nodegui 调用堆栈超出错误