To jest naprawdę powszechne pytanie, ale nie byłem w stanie uzyskać odpowiedzi na temat pracy. Oto mój plik konfiguracyjny:log4net: Jak ustawić nazwę pliku rejestratora dynamicznie?
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="CraneUserInterface.log" />
<appendToFile value="true" />
<maxSizeRollBackups value="90" />
<rollingStyle value="Size" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</root>
Ale muszę określić rzeczywistą nazwę pliku rejestrowania w czasie wykonywania. Znalazłem ładny przykład: here, ale kiedy próbuję przechwycić kolekcję zwróconą przez wywołanie funkcji GetIterators(), stwierdzam, że ta kolekcja jest pusta.
Muszę zmienić nazwę "CraneUserInterface.log" na "CraneUserInterface_1.log" lub 2 lub 3, zależnie od tego, co program odczyta w czasie wykonywania. Jak mogę to zrobić?
Oto mój pierwszy przebieg w użyciu kodu przedstawionego w tej próbce:
static bool ChangeLogFileName(string AppenderName, string NewFilename)
{
// log4net.Repository.ILoggerRepository RootRep;
// RootRep = log4net.LogManager.GetRepository();
log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository;
foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders())
{
string appenderName = iApp.Name;
if (iApp.Name.CompareTo(AppenderName) == 0
&& iApp is log4net.Appender.FileAppender)
{
log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp;
fApp.File = NewFilename;
fApp.ActivateOptions();
return true; // Appender found and name changed to NewFilename
}
}
return false; // appender not found
}
Dzięki bardzo!
Pomimo dwukrotnie czytanie, nie mam pojęcia, dlaczego chcesz to zrobić. –
To jest do użytku w laptopie, który będzie w kabinie dźwigu w urządzeniu do wyżarzania. Zakład ma 3 dźwigi. Ponieważ nie jestem w fabryce, ani nie będę w niedalekiej przyszłości, mam symulator, który udaje, że jest trzema żurawiami. W tym samym czasie pojawią się 3 instancje tego programu. Potrzebuję śledzić zdarzenia dla każdego z 3 żurawi oddzielnie i prawdopodobnie powinienem uniknąć jakiejkolwiek szansy, aby dwa wystąpienia tego programu zapisywały się w tym samym pliku dziennika w tym samym czasie. –
Myślę, że mój instynkt był prawidłowy. Próbujesz rozwiązać niewłaściwy problem. –