gpt4 book ai didi

c# - 程序化 Log4Net 配置复制条目

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:32 27 4
gpt4 key购买 nike

我想以编程方式(因为文件路径是在运行时生成的)为 SQL 语句创建一个单独的日志文件。我的代码看起来像这样

  public static void InitializeLogger(FileInfo logFile, FileInfo sqlLogFile, 
Level threshhold, string layout = PATTERN_LAYOUT, bool rolling = true)
{
var hierarchy = (Hierarchy)LogManager.GetRepository();
var appender = CreateAppender(true, layout, APPENDER_NAME, logFile, threshhold);
hierarchy.Root.AddAppender(appender);

var sqlAppender = CreateAppender(rolling, layout, SQL_APPENDER_NAME, sqlLogFile, Level.Info);

var sqlLogger = (Logger)LogManager.GetLogger(SQL_LOGGER_NAME).Logger;
sqlLogger.RemoveAllAppenders();
sqlLogger.AddAppender(sqlAppender);
sqlLogger.Level = Level.Info;
}

private static FileAppender CreateAppender(bool rolling, string layout, string appenderName, FileInfo fileInfo, Level threshhold)
{
FileAppender result;
if (rolling)
{
result = new RollingFileAppender
{
AppendToFile = true,
ImmediateFlush = true,
Name = appenderName,
Layout = new PatternLayout(layout),
Threshold = threshhold,
File = fileInfo.FullName,
RollingStyle = RollingFileAppender.RollingMode.Date,
StaticLogFileName = true
};
}
else
{
result = new FileAppender
{
AppendToFile = true,
ImmediateFlush = true,
Name = appenderName,
Layout = new PatternLayout(layout),
Threshold = threshhold,
File = fileInfo.FullName
};
}
result.ActivateOptions();
return result;
}

public static void LogSQL(this ILog logger, string sql)
{
var sqlLogger = LogManager.GetLogger(SQL_LOGGER_NAME);
sqlLogger.InfoFormat("Sql: {0}", sql);
}

问题是 LogSQL 似乎同时记录到两个日志文件。有什么建议吗?

最佳答案

ColeW 的回答是正确的。为了防止调用调用层次结构中的所有 appender,请通过设置 Additivity 标志禁用继承的 appender。

从程序上看,这看起来如下:

((log4net.Repository.Hierarchy.Logger)log.Logger).Additivity = false; 

关于c# - 程序化 Log4Net 配置复制条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12045664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com