Skip to content

Commit e9422fc

Browse files
committed
GZipFIle - Support Header / Footer / WriteBom
1 parent 19b3146 commit e9422fc

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/NLog/Targets/FileTarget.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ private Stream OpenNewFileStream(string filePath, int bufferSize, bool initialFi
12961296

12971297
if (WriteBom)
12981298
{
1299-
fileWasEmpty = ReplaceFileContentsOnEachWrite || fileStream.Length == 0;
1299+
fileWasEmpty = IsNewFileEmpty(initialFileOpen, fileStream);
13001300
if (fileWasEmpty == true)
13011301
{
13021302
InternalLogger.Trace("{0}: Write byte order mark from encoding={1}", this, Encoding);
@@ -1310,7 +1310,7 @@ private Stream OpenNewFileStream(string filePath, int bufferSize, bool initialFi
13101310

13111311
if (Header != null)
13121312
{
1313-
bool writeHeader = (initialFileOpen && WriteHeaderWhenInitialFileNotEmpty) || ReplaceFileContentsOnEachWrite || (fileWasEmpty ?? fileStream.Length == 0);
1313+
bool writeHeader = (initialFileOpen && WriteHeaderWhenInitialFileNotEmpty) || (fileWasEmpty ?? IsNewFileEmpty(initialFileOpen, fileStream));
13141314
if (writeHeader)
13151315
{
13161316
InternalLogger.Trace("{0}: Write header", this);
@@ -1328,6 +1328,15 @@ private Stream OpenNewFileStream(string filePath, int bufferSize, bool initialFi
13281328
}
13291329
}
13301330

1331+
private bool IsNewFileEmpty(bool initialFileOpen, Stream fileStream)
1332+
{
1333+
if (ReplaceFileContentsOnEachWrite)
1334+
return true;
1335+
if (initialFileOpen && ArchiveOldFileOnStartup && !typeof(FileStream).Equals(fileStream.GetType()))
1336+
return true;
1337+
return fileStream.Length == 0;
1338+
}
1339+
13311340
/// <summary>
13321341
/// Creates stream for appending to the specified <paramref name="filePath"/>
13331342
/// </summary>

tests/NLog.Targets.GZipFile.Tests/GZipFileTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ namespace NLog.Targets.GZipFile.Tests
4040
{
4141
public class GZipFileTests
4242
{
43+
public GZipFileTests()
44+
{
45+
LogManager.ThrowExceptions = true;
46+
}
47+
4348
[Fact]
4449
public void SimpleFileGZipStream()
4550
{
@@ -102,6 +107,45 @@ public void SimpleFileGZipStream_AutoFlush_False()
102107
}
103108
}
104109

110+
[Fact]
111+
public void SimpleFileGZipStream_HeaderFooterBom()
112+
{
113+
var tempDir = Path.Combine(Path.GetTempPath(), "nlog_" + Guid.NewGuid().ToString());
114+
var logFileName = Path.Combine(tempDir, "log.gzip");
115+
116+
try
117+
{
118+
var logFactory = new LogFactory().Setup().LoadConfiguration(cfg =>
119+
{
120+
cfg.ForLogger().WriteTo(new GZipFileTarget()
121+
{
122+
FileName = logFileName,
123+
Layout = "${message}",
124+
LineEnding = LineEndingMode.LF,
125+
Header = "Hello World",
126+
Footer = "Goodbye World",
127+
WriteBom = true,
128+
});
129+
}).LogFactory;
130+
131+
logFactory.GetCurrentClassLogger().Info("There was light");
132+
logFactory.Shutdown();
133+
134+
using (var logFile = new StreamReader(new GZipStream(new FileStream(logFileName, FileMode.Open), CompressionMode.Decompress)))
135+
{
136+
Assert.Equal("Hello World", logFile.ReadLine());
137+
Assert.Equal("There was light", logFile.ReadLine());
138+
Assert.Equal("Goodbye World", logFile.ReadLine());
139+
Assert.Null(logFile.ReadLine());
140+
}
141+
}
142+
finally
143+
{
144+
if (Directory.Exists(tempDir))
145+
Directory.Delete(tempDir, true);
146+
}
147+
}
148+
105149
[Fact]
106150
public void SimpleFileGZipStream_ArchiveAboveSize()
107151
{

0 commit comments

Comments
 (0)