两种不同级别的log4net的记录到两个不同的附加目的地为同一记录器 [英] Log4Net Logging of two different levels to two different appenders for the same logger
问题描述
我们有log4net的日志记录两个不同的asp.net应用程序启用。
他们都有log4net的相同版本,1.2.10.0。
We have two different asp.net applications with Log4net logging enabled. They both have the same version of Log4Net, 1.2.10.0.
我们已经添加了 log4net.Appender.AdoNetAppender
记录到两个人身上,希望登录信息水平,它的根记录器,也希望登录到错误级别根记录到文件中追加程序。
我们的配置如下;
We have added the log4net.Appender.AdoNetAppender
logger to both of them and want to log Info level to it for the root logger, but also want to log to the Error level for a root logger to a file appender.
Our configuration is as follows;
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="filelogAppender" type="log4net.Appender.RollingFileAppender" >
<file value="..\logs\app.debug.log" />
<encoding value="utf-8" />
<staticLogFileName value="true" />
<datePattern value=".yyyyMMdd.'log'" />
<rollingStyle value="Composite" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%3thread] %-5level %property{log4net:HostName} [%property{Revision}] %logger %message%n" />
</layout>
</appender>
<!--
use [DB]
GO
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Application][varchar] (255) NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Server][varchar](255) NOT NULL,
[Revision][varchar](50) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
)
-->
<appender name="dbLogAppender" type="log4net.Appender.AdoNetAppender" xdt:Transform="InsertBefore(/log4net/root)">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=sqlserver;initial catalog=DB;integrated security=false;persist security info=True;User ID=USER;Password=PASSWORD" />
<commandText value="INSERT INTO Log ([Date],[Application],[Thread],[Level],[Logger],[Server],[Revision],[Message],[Exception]) VALUES (@log_date,'WebApp1', @thread, @log_level, @logger, @server, @revision, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@server" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@revision" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{Revision}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="Error"/>
<appender-ref ref="filelogAppender"/>
</root>
<root>
<level value="Info"/>
<appender-ref ref="dbLogAppender"/>
</root>
</log4net>
我们所看到的问题是,对于一个应用程序,我们看到在DB的条目,但对于其他的我们不知道。
The issue we are seeing is that for one application we see entries in the DB, but for the other we do not.
修改
是我们在设置
在这两个应用程序。而且,这两个配置之间的唯一区别是,我们有不同的硬盘codeD的价值 GlobalContext中
属性的Application_Start()应用
。
Revision
is GlobalContext
property we set in Application_Start()
in both applications. And the only difference between the two configurations is that we have a different hardcoded value for Application
.
我们能有两根伐木工人这样吗?难道这是我们的问题,我们看到在一个应用程序的源?
Can we have two root loggers like this? Could this be the source of our issue that we are seeing in one application?
推荐答案
您应该能够设置阈值分别各追加程序的
财产,包括他们在同根
You should be able to set the threshold
property of each appender separately and include them in the same root.
<appender name="filelogAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="Error" />
</appender>
<appender name="dblogAppender" type="log4net.Appender.AdoNetAppender">
<threshold value="Info" />
</appender>
<root>
<appender-ref ref="filelogAppender" />
<appender-ref ref="dblogAppender" />
</root>
REF:<一href=\"http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.Threshold.html\">http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.Threshold.html
这篇关于两种不同级别的log4net的记录到两个不同的附加目的地为同一记录器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!