如何在网络配置中设置默认附加程序?
how set default appender in web config?
我在 web 配置中有 2 个 appender,第一个在 xml 文件中保存日志,另一个使用外部 API 保存日志,我的问题是:
我需要设置我的默认 appender 只是调用外部 API,不需要保存在 xml 文件上,如果 api reutred 失败,我想使用日志记录通过 xml 文件(我在 运行 时间完成)。
主要问题:如何设置第一个 appender 是默认登录 web.config 文件
web.config :
<log4net>
<!--workflow logging-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:/Workspaces/workflowLog/workflow-info.xml" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="Tahaluf.Workflow.Common.Core.Log.WorkFlowXmlLayout" />
</appender>
<!--Connect to Tahaluf Logging-->
<appender name="WorkFlowAppender" type="Tahaluf.Workflow.Common.Core.Log.WorkFlowAppender">
</appender>
<root>
<level value="ALL" />
<appender-ref ref="WorkFlowAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
仅在 web.config 中设置默认附加程序。你想使用
WorkFlowAppender
,所以删除 LogFileAppender
.
<root>
<level value="ALL"/>
<appender-ref ref="WorkFlowAppender"/>
</root>
如果您以后需要使用您的LogFileAppender
,您通过代码添加。
// Add an appender to a logger
public void AddAppender(string loggerName,
log4net.Appender.IAppender appender)
{
log4net.ILog log = log4net.LogManager.GetLogger(loggerName);
log4net.Repository.Hierarchy.Logger l =
(log4net.Repository.Hierarchy.Logger)log.Logger;
l.AddAppender(appender);
}
// Find a named appender already attached to a logger
public log4net.Appender.IAppender FindAppender(string
appenderName)
{
foreach (log4net.Appender.IAppender appender in
log4net.LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
return appender;
}
}
return null;
}
也看看thispost。
编辑
当未设置 LogFileAppender
的 appender-ref 时,此解决方案不起作用。
解决方法是修改appender的Threshold
web.config:
<root>
<level value="ALL" />
<appender-ref ref="WorkFlowAppender" />
<appender-ref ref="LogFileAppender" />
</root>
添加方法:
public static void SetThreshold(string appenderName, log4net.Core.Level threshold)
{
foreach (log4net.Appender.AppenderSkeleton appender in log4net.LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
appender.Threshold = threshold;
break;
}
}
}
关闭附加器:SetThreshold("LogFileAppender", log4net.Core.Level.Off);
打开 appender:SetThreshold("LogFileAppender", log4net.Core.Level.Debug);
级别可以是任何有效级别(不仅仅是Debug
)
我在 web 配置中有 2 个 appender,第一个在 xml 文件中保存日志,另一个使用外部 API 保存日志,我的问题是:
我需要设置我的默认 appender 只是调用外部 API,不需要保存在 xml 文件上,如果 api reutred 失败,我想使用日志记录通过 xml 文件(我在 运行 时间完成)。 主要问题:如何设置第一个 appender 是默认登录 web.config 文件
web.config :
<log4net>
<!--workflow logging-->
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:/Workspaces/workflowLog/workflow-info.xml" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="Tahaluf.Workflow.Common.Core.Log.WorkFlowXmlLayout" />
</appender>
<!--Connect to Tahaluf Logging-->
<appender name="WorkFlowAppender" type="Tahaluf.Workflow.Common.Core.Log.WorkFlowAppender">
</appender>
<root>
<level value="ALL" />
<appender-ref ref="WorkFlowAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
仅在 web.config 中设置默认附加程序。你想使用
WorkFlowAppender
,所以删除 LogFileAppender
.
<root>
<level value="ALL"/>
<appender-ref ref="WorkFlowAppender"/>
</root>
如果您以后需要使用您的LogFileAppender
,您通过代码添加。
// Add an appender to a logger
public void AddAppender(string loggerName,
log4net.Appender.IAppender appender)
{
log4net.ILog log = log4net.LogManager.GetLogger(loggerName);
log4net.Repository.Hierarchy.Logger l =
(log4net.Repository.Hierarchy.Logger)log.Logger;
l.AddAppender(appender);
}
// Find a named appender already attached to a logger
public log4net.Appender.IAppender FindAppender(string
appenderName)
{
foreach (log4net.Appender.IAppender appender in
log4net.LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
return appender;
}
}
return null;
}
也看看thispost。
编辑
当未设置 LogFileAppender
的 appender-ref 时,此解决方案不起作用。
解决方法是修改appender的Threshold
web.config:
<root>
<level value="ALL" />
<appender-ref ref="WorkFlowAppender" />
<appender-ref ref="LogFileAppender" />
</root>
添加方法:
public static void SetThreshold(string appenderName, log4net.Core.Level threshold)
{
foreach (log4net.Appender.AppenderSkeleton appender in log4net.LogManager.GetRepository().GetAppenders())
{
if (appender.Name == appenderName)
{
appender.Threshold = threshold;
break;
}
}
}
关闭附加器:SetThreshold("LogFileAppender", log4net.Core.Level.Off);
打开 appender:SetThreshold("LogFileAppender", log4net.Core.Level.Debug);
级别可以是任何有效级别(不仅仅是Debug
)