c# - log4net 1 个附加程序 2 个文件
问题描述
如果满足阈值级别,是否有可能为log4net提供一个附加程序,它将信息记录到两个文件中。它是 INFO 级别,如果它是调试,它将写入除调试之外的所有内容,它会写入包括调试在内的所有内容,并只保留这两个。我可以使用两个附加程序来做到这一点,但是我希望只有一个变量可以根据日志文件写入的阈值级别、仅写入一个或同时写入两者来计算。
<appender name="Name"
type="log4net.Appender.RollingFileAppender,log4net">
<file value="Path" />
<treshold value="info" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="2000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<Header value="[Start] " />
<Footer value="[End] " />
<ConversionPattern value="%-5level %message%newline" />
</layout>
</appender>
解决方案
您可以将 log4net 配置为将单独的日志消息写入两个(或更多)不同的文件。您甚至可以让每个文件使用不同的阈值。
这是一个包含两个日志文件的示例,一个名为 basic.log 包含 INFO 或更高级别的消息,另一个名为 details.log 包含 DEBUG 或更高级别的消息。该示例显示 log.Debug() 调用将使其输出仅转到 details.log 文件,而 log.Info() 调用将在两个文件中都有其输出。
这是主程序:
class Program
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
log.Debug("This is a debug message");
log.Info("This is an info message");
}
}
和 app.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
</startup>
<log4net>
<appender name="BasicFile" type="log4net.Appender.RollingFileAppender, log4net">
<file value="C:\temp\basic.log"/>
<threshold value="INFO"/>
<appendToFile value="True"/>
<layout type="log4net.Layout.PatternLayout">
<Header value="[Start] " />
<Footer value="[End] " />
<ConversionPattern value="%-5level %message%newline" />
</layout>
</appender>
<appender name="DetailsFile" type="log4net.Appender.RollingFileAppender, log4net">
<file value="C:\temp\details.log"/>
<threshold value="DEBUG"/>
<appendToFile value="True"/>
<layout type="log4net.Layout.PatternLayout">
<Header value="[Start] " />
<Footer value="[End] " />
<ConversionPattern value="%-5level %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="BasicFile"/>
<appender-ref ref="DetailsFile"/>
</root>
</log4net>
</configuration>
当我运行它时, c:\temp\basic.log 只有 INFO 消息,而 c:\temp\details.log 有两条消息。
推荐阅读
- visual-studio - 我可以在 IIS Express 中禁用 loaduserprofile 吗?
- c++ - Esp8266 & Nodemcu:返回请求字符串的方法
- sql-server - 使用 AD 身份验证从 Azure SQL Server 导入/导出数据库
- ios - iOS Rich Push Notifications 左侧附加图片
- google-cloud-platform - Google Datastore 自定义名称键的最大长度
- javascript - How to check if the class is added to div element using react or javascript?
- google-cloud-platform - 为什么服务帐号会出现在 CLI gcloud 中,而不是出现在 IAM Cloud Console 中?
- javascript - 如何使用 UrlFetchApp.fetch(url, params) 在 Google Apps 脚本中正确查询 Facebook Graph API?
- java - 在 forEach 中使用时 OrElseThrow 出错
- php - 如何根据php中的两个值查找排名?