lraulea commented on issue #234:
URL:
https://github.com/apache/logging-log4net/issues/234#issuecomment-2770007469
@FreeAndNil may i share with you a test result?
overriding the `OpenFile()` looks promising, but I'm not there yet.
```
protected override void OpenFile(string fileName, bool append)
{
ProcessFileBeforeOpen(fileName, append);
base.OpenFile(fileName, append);
}
```
```
private void ProcessFileBeforeOpen(string baseFileName, bool append)
{
string traceFile = Path.Combine(_traceLogPath,
"Logger-Log4net-OpenFile-Trace.log");
string logEntry = $"{DateTime.Now}, ProcessFileBeforeOpen >
(baseFileName = {baseFileName.Remove(0, baseFileName.LastIndexOf('\\') + 1)},
append = {append})" + Environment.NewLine;
string tracesDirectory =
baseFileName.Remove(baseFileName.LastIndexOf('\\'));
var traceLogFiles = Directory.EnumerateFiles(tracesDirectory,
$"*{baseFileName.Remove(0, baseFileName.LastIndexOf('\\') + 1)}*.log.*");
foreach (var logFile in traceLogFiles)
{
if (!Path.GetExtension(logFile).Equals(".tip"))
{
try
{
System.IO.File.Move(logFile, logFile + ".tip");
logEntry += $"{DateTime.Now}, ProcessFileBeforeOpen
| logFile {logFile.Remove(0, logFile.LastIndexOf('\\') + 1)} (.tip added)" +
Environment.NewLine;
}
catch (Exception ex)
{
logEntry += $"{DateTime.Now}, ProcessFileBeforeOpen
| logFile {logFile.Remove(0, logFile.LastIndexOf('\\') + 1)}
({ex.Message.Remove(ex.Message.LastIndexOf('.'))})" + Environment.NewLine;
}
}
else
{
logEntry += $"{DateTime.Now}, ProcessFileBeforeOpen |
logFile {logFile.Remove(0, logFile.LastIndexOf('\\') + 1)} (nothing to be
done)" + Environment.NewLine;
}
}
logEntry += $"{DateTime.Now}, ProcessFileBeforeOpen < ()";
using (StreamWriter outputStream = new StreamWriter(path:
traceFile, append: true))
{
outputStream.WriteLine(logEntry);
}
}
```
> You can override OpenFile() and check (before base.OpenFile()) whether the
file already exists. When it already exists, you can zip and delete it.
Results:
```
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen > (baseFileName = CM-Starter,
append = True)
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen < ()
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen > (baseFileName = LM-Starter,
append = True)
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen < ()
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen > (baseFileName = LM-Starter,
append = True)
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen | logFile
LM-Starter-202504011533.log.0 (.tip added)
4/1/2025 3:33:59 PM, ProcessFileBeforeOpen < ()
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen > (baseFileName = LM-Starter,
append = False)
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen | logFile
LM-Starter-202504011533.log.0 (The process cannot access the file because it is
being used by another process)
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen | logFile
LM-Starter-202504011533.log.0.tip (nothing to be done)
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen < ()
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen > (baseFileName = CM-Starter,
append = False)
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen | logFile
CM-Starter-202504011533.log.0 (The process cannot access the file because it is
being used by another process)
4/1/2025 3:34:01 PM, ProcessFileBeforeOpen < ()
```
The following line is unexpected:
`4/1/2025 3:33:59 PM, ProcessFileBeforeOpen | logFile
LM-Starter-202504011533.log.0 (.tip added)
`
because LM-Starter-202504011533.log.0 has just been created just two lines
above.
It seems there are two OpenFile() calls on opening
LM-Starter-202504011533.log.0
The second OpenFile() call zips it (tips it in this test) but the second
OpenFile() still creates LM-Starter-202504011533.log.0
@FreeAndNil do you recognize this double OpenFile()? It looks intermitent,
not always.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]