Я использую шаблон Singleton для Log4Net в своих Windows и веб-приложениях, и у меня периодически возникает проблема, при которой файл журнала создается несколько раз, а имя файла добавляется в новый файл.Поэтому я получаю файлы журналов, как показано ниже: -
05-07-2019 - Service.log
05-07-2019 - Service.log05-07-2019 - Service.log
05-07-2019 - Service.log05-07-2019 - Service.log05-07-2019 - Service.log
Эта проблема возникает не при переворачивании, а, по-видимому, случайно в течение дня, но не каждый день.
Мой файл конфигурацииследующим образом: -
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="LogFiles/" />
<datePattern value="dd-MM-yyyy' - Service.log'" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date]-[%-5level]-[%logger]-%message%newline" />
</layout>
</appender>
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<localPort value="64667" />
<remoteAddress value="127.0.0.2" />
<remotePort value="64666" />
<layout type="log4net.Layout.PatternLayout, log4net">
<conversionPattern value="[%-5level]-[%logger]-%message%newline" />
</layout>
</appender>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="INFO" />
<foreColor value="White, HighIntensity" />
<backColor value="Green" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="White, HighIntensity" />
<backColor value="Blue" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="Yellow, HighIntensity" />
<backColor value="Purple" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="Yellow, HighIntensity" />
<backColor value="Red" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="UdpAppender" />
</root>
</log4net>
Соответствующие части класса ведения журнала следующие: -
public class LogBase
{
/// <summary>
/// Logger.
/// </summary>
public static ILog m_logger;
/// <summary>
/// New Line.
/// </summary>
public static readonly string NewLine = Environment.NewLine;
/// <summary>
/// Current Directory
/// </summary>
public static string CurrentDirectory;
/// <summary>
/// Base Instance
/// </summary>
static LogBase()
{
try
{
try {
Console.WriteLine("Starting logging initialisation.");
log4net.Config.XmlConfigurator.Configure();
} catch {
Console.WriteLine("Unable to load logging configuration check that the app.config file exists and is well formed.");
ConfigureConsoleLogger();
} finally {
try {
if ( Assembly.GetEntryAssembly() == null )
m_logger = LogManager.GetLogger("WEB");
else
m_logger = LogManager.GetLogger(Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location));
} catch ( Exception excp ) {
}
}
CurrentDirectory = Regex.Replace(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase), @"^file:\\", ""); // There's undoubtedly a better way!
} catch ( Exception excp ) {
}
}
/// <summary>
/// Get a logger.
/// </summary>
/// <param name="logName"></param>
/// <returns></returns>
public static ILog GetLogger(string logName)
{
if ( logName == string.Empty )
return GetLogger();
else
return LogManager.GetLogger(logName);
}
/// <summary>
/// Get a logger.
/// </summary>
/// <param name="logName"></param>
/// <returns></returns>
public static ILog GetLogger() {
return m_logger;
}
/// <summary>
/// Configures the logging object to use a console logger. This would normally be used
/// as a fallback when either the application does not have any logging configuration
/// or there is an error in it.
/// </summary>
public static void ConfigureConsoleLogger() {
log4net.Appender.ConsoleAppender appender = new log4net.Appender.ConsoleAppender();
log4net.Layout.ILayout fallbackLayout = new log4net.Layout.PatternLayout("%m%n");
appender.Layout = fallbackLayout;
log4net.Config.BasicConfigurator.Configure(appender);
}
/// <summary>
/// <summary>
/// Constructor.
/// </summary>
public LogBase () {
}
}
Мне не удалось найти причину, по которой файлы журнала воссоздаются случайным образомкак новые файлы с соответствующими именами.
Любая помощь будет оценена.
Спасибо