我的应用程序登录到控制台和文件(log4net 1.2.11):
<root>
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<logger name="MyClass" additivity="false">
<appender-ref ref="ConsoleAppender">
<threshold value="INFO" />
</appender-ref>
<appender-ref ref="RollingLogFileAppender" />
</logger>
<logger name="MyClass">
<level value="INFO" />
</logger>
您运气不好,当log4net解析appender-ref
标记时,它不会向通过名称引用的appender传递任何信息(代码来自1.2.10):
// log4net.Repository.Hierarchy.XmlHierarchyConfigurator
if (xmlElement.LocalName == "appender-ref")
{
IAppender appender = this.FindAppenderByReference(xmlElement);
string attribute = xmlElement.GetAttribute("ref");
if (appender != null)
{
LogLog.Debug(string.Concat(new string[]
{
"XmlHierarchyConfigurator: Adding appender named [",
attribute,
"] to logger [",
log.Name,
"]."
}));
log.AddAppender(appender);
}
else
{
LogLog.Error("XmlHierarchyConfigurator: Appender named [" + attribute + "] not found.");
}
}
我很确定你链接的答案不是真的有效;Treshold
属性存在于appender上,但不在ref节点中对其进行解析。
哪一个是最好的--如果记录器可以从其引用中更改一些appender属性,你能想象配置噩梦吗?最后一个被解析的记录器将赢得配置,并幸运地跟踪为什么调试追加器现在保持沉默,因为其他记录器交换了treshold值:)
所以您必须添加另一个追加器;如果您不想复制粘贴RollingLogFileAppender配置,您可以使用转发appender,在将消息传递到它自己引用的appender之前,它可以用作筛选器。你最终会
但是这两条调试消息都记录到DebugAppender,而这两条信息消息都记录到InfoAppender。
我希望文件记录器以这样的方式配置日志类别'X' 记录器one在信息级别上记录“X”,在调试级别上记录其他东西 记录器在调试级别上有两个日志“x”
我很难理解可加性、类别日志级别和追加器阈值之间的关系。 下面的场景(我的log4j.properties文件): null
以下是我的java logback配置: 我想在这里做的是:我有两个日志追加器:一个用于控制台,另一个用于日志文件;但是对于相同的java软件包(例如:组织.apache.zookeeper),我想使用两个不同的日志级别,INFO用于文件追加器和错误用于康多尔;但是我的日志配置优势无法正常工作。任何人都可以找出我的错误或一些解决方案吗?
我想做的很直截了当: 我只希望在控制台追加器上显示重要的消息,而我希望将详细的消息路由到文件追加器。 我还尝试向添加一个ThresholdFilter,但这也不能过滤它。
我的团队使用来控制我们的, 在中,我们可以选择更改中的级别, 我们为每个(线程)有一个单独的记录器,如果我们想只看到一个线程的控制台日志,我们关闭所有其他线程记录器,问题是每个记录器都为和某个文件发送输出,我们只想关闭stdout输出。 log4j2.xml配置示例: 我们尝试了很多解决方案: 将父记录器与可加性结合使用,并将每个附加器分离到不同的记录器,对此有什么想法吗?