WixBundleLog is the burn variable that specifies the log file. It is not possible to override it in the bundle because you cannot set a variable in a bundle that contains the "Wix" prefix. Overriding it in the bootstrapper application doesn't work either because the bootstrapper continues to log to its default.
The burn bootstrapper sets string variables for the bootstrapper log and the installation package logs. I keep track of these variables in a list. So in my constructor I have something like:
this.LogsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"Company_Name\Logs\Installer\", DateTime.Now.ToString("yyyyMMdd_hhmmss"));
_logVariables = new List<string>();
_logVariables.Add("WixBundleLog");
Burn sets string variables for the log files in the format [WixBundleLog]_PackageId.
In my bootstrapper application when the PlanPackageComplete event is fired, I have an event handler that includes the following code to add the variables to my list.
//set *possible* log variables for a given package
_logVariables.Add("WixBundleLog_" + e.PackageId);
_logVariables.Add("WixBundleRollbackLog_" + e.PackageId);
At the end of installation or if my bootstrapper encounters an error, I call the following method:
private void CopyLogs()
{
if (!Directory.Exists(this.LogsDirectory))
Directory.CreateDirectory(this.LogsDirectory);
foreach (string logVariable in _logVariables)
{
if (this.Bootstrapper.Engine.StringVariables.Contains(logVariable))
{
string file = this.Bootstrapper.Engine.StringVariables[logVariable];
if (File.Exists(file))
{
FileInfo fileInfo = new FileInfo(file);
fileInfo.CopyTo(Path.Combine(this.LogsDirectory, fileInfo.Name), false);
}
}
}
}