【发布时间】:2020-08-05 22:59:20
【问题描述】:
我尝试为我的自动化框架实现 log4net。 我还没有编写 XML 配置文件。我只使用代码文件来配置它。
class log4netHelper
{
private static ILog _logger;
private static ConsoleAppender _conAppender;
private static FileAppender _fileAppender;
private static RollingFileAppender _rollingFileAppender;
private static string _layout = "%date{ABSOLUTE} [%class] [%level] [%method] - %message%newline";
public static string Layout
{
set { _layout = value; }
}
private static PatternLayout GetPatternLayout()
{
var patternLayout = new PatternLayout()
{
ConversionPattern = _layout
};
patternLayout.ActivateOptions();
return patternLayout;
}
private static ConsoleAppender GetConsoleAppender()
{
var consoleAppender = new ConsoleAppender()
{
Name = "ConsoleAppender",
Layout = GetPatternLayout(),
Threshold = Level.Error
};
consoleAppender.ActivateOptions();
return consoleAppender;
}
private static FileAppender GetFileAppender()
{
var fileAppender = new FileAppender()
{
Name = "FileAppender",
Layout = GetPatternLayout(),
Threshold = Level.All,
AppendToFile = false,
File = @"C:\FileLogger.log"
};
fileAppender.ActivateOptions();
return fileAppender;
}
private static RollingFileAppender GetRollingFileAppender()
{
var rollingFileAppender = new RollingFileAppender()
{
Name = "RollingFileAppender",
Layout = GetPatternLayout(),
Threshold = Level.All,
AppendToFile = true,
File = "RollingfileLogger.log",
MaximumFileSize = "1MB",
MaxSizeRollBackups = 15
};
rollingFileAppender.ActivateOptions();
return rollingFileAppender;
}
public static ILog GetLogger([CallerFilePath]string filename = "")
{
if (_conAppender == null)
_conAppender = GetConsoleAppender();
if (_fileAppender == null)
_fileAppender = GetFileAppender();
if (_rollingFileAppender == null)
_rollingFileAppender = GetRollingFileAppender();
BasicConfigurator.Configure(_conAppender, _fileAppender, _rollingFileAppender);
return LogManager.GetLogger(filename);
}
}
我想要每个测试用例运行的测试用例名称,而不是 FileLogger.log 文件。 我还不能想出任何关于如何做到这一点的解决方案。 我尝试更改 GetAppender() 中的 File 变量值,但做不到。 也尝试在测试用例中传递参数文件名,但文件仍然是由 FileLogger 的名称创建的。
【问题讨论】:
-
我在您发布的代码中没有看到任何与测试用例相关的内容?
-
@stuartd 我刚刚调用了——“private static readonly ILog log = log4netHelper.GetLogger();”——在测试用例和日志消息中需要的地方作为 log.info("message") ;
标签: c# logging log4net log4net-configuration log4net-appender