Index: mythbuild/mythtv/libs/libmyth/mythcommandlineparser.cpp
===================================================================
--- mythbuild.orig/mythtv/libs/libmyth/mythcommandlineparser.cpp
+++ mythbuild/mythtv/libs/libmyth/mythcommandlineparser.cpp
@@ -21,6 +21,7 @@ MythCommandLineParser::MythCommandLinePa
     parseTypes(things_to_parse),
     display(), geometry(),
     logfile(),
+    newlogfile(),
     pidfile(),
     infile(),
     outfile(),
@@ -37,6 +38,7 @@ MythCommandLineParser::MythCommandLinePa
     printsched(false),
     testsched(false),
     setverbose(false),
+    setlogfile(false),
     resched(false),
     nosched(false),
     noupnp(false),
@@ -412,6 +414,30 @@ bool MythCommandLineParser::Parse(
         ++argpos;
         return true;
     }
+    else if ((parseTypes & kCLPSetLogFile) &&
+             (!strcmp(argv[argpos],"--setlogfile")))
+    {
+        setlogfile = true;
+        if ((argc - 1) > argpos)
+        {
+            newlogfile = argv[argpos+1];
+            if (newlogfile.startsWith("-"))
+            {
+                cerr << "Invalid argument to --setlogfile option\n";
+                err = true;
+                return true;
+            }
+        }
+        else
+        {
+            cerr << "Missing argument to --setlogfile option\n";
+            err = true;
+            return true;
+        }
+
+        ++argpos;
+        return true;
+    }
     else if ((parseTypes & kCLPPidFile) &&
              (!strcmp(argv[argpos],"-p") ||
               !strcmp(argv[argpos],"--pidfile")))
@@ -684,6 +710,12 @@ QString MythCommandLineParser::GetHelpSt
             << "Writes STDERR and STDOUT messages to filename" << endl;
     }
 
+    if (parseTypes & kCLPSetLogFile)
+    {
+        msg << "--setlogfile filename          "
+            << "Change running backend to use new logfile" << endl;
+    }
+
     if (parseTypes & kCLPPidFile)
     {
         msg << "-p or --pidfile filename       "
Index: mythbuild/mythtv/libs/libmyth/mythcommandlineparser.h
===================================================================
--- mythbuild.orig/mythtv/libs/libmyth/mythcommandlineparser.h
+++ mythbuild/mythtv/libs/libmyth/mythcommandlineparser.h
@@ -44,6 +44,7 @@ typedef enum {
     kCLPStartTime            = 0x0080000000ULL,
     kCLPPrintExpire          = 0x0100000000ULL,
     kCLPGeneratePreview      = 0x0200000000ULL,
+    kCLPSetLogFile           = 0x0400000000ULL,
 } ParseType;
 
 class MPUBLIC MythCommandLineParser
@@ -62,6 +63,7 @@ class MPUBLIC MythCommandLineParser
     QString GetDisplay(void)        const { return display;     }
     QString GetGeometry(void)       const { return geometry;    }
     QString GetLogFilename(void)    const { return logfile;     }
+    QString GetNewLogFilename(void) const { return newlogfile;  }
     QString GetPIDFilename(void)    const { return pidfile;     }
     QString GetInputFilename(void)  const { return infile;      }
     QString GetOutputFilename(void) const { return outfile;     }
@@ -86,6 +88,7 @@ class MPUBLIC MythCommandLineParser
     bool IsAutoExpirerEnabled(void) const { return !noexpirer;  }
 
     bool SetVerbose(void)           const { return setverbose;  }
+    bool SetLogFile(void)           const { return setlogfile;  }
     bool Reschedule(void)           const { return resched;     }
     bool ClearSettingsCache(void)   const { return clearsettingscache; }
     bool WantUPnPRebuild(void)      const { return wantupnprebuild; }
@@ -101,6 +104,7 @@ class MPUBLIC MythCommandLineParser
         return 
             !eventString.isEmpty()    || wantupnprebuild       ||
             setverbose                || clearsettingscache    ||
+            setlogfile                ||
             printsched                || testsched             ||
             resched                   || !printexpire.isEmpty() ||
             (previewFrameNumber >= -1) || (previewSeconds >= -1);
@@ -118,6 +122,7 @@ class MPUBLIC MythCommandLineParser
     QString               display;
     QString               geometry;
     QString               logfile;
+    QString               newlogfile;
     QString               pidfile;
     QString               infile;
     QString               outfile;
@@ -137,6 +142,7 @@ class MPUBLIC MythCommandLineParser
     bool                  printsched;
     bool                  testsched;
     bool                  setverbose;
+    bool                  setlogfile;
     bool                  resched;
     bool                  nosched;
     bool                  noupnp;
Index: mythbuild/mythtv/programs/mythbackend/main.cpp
===================================================================
--- mythbuild.orig/mythtv/programs/mythbackend/main.cpp
+++ mythbuild/mythtv/programs/mythbackend/main.cpp
@@ -105,7 +105,8 @@ int main(int argc, char **argv)
         kCLPChannelId            |
         kCLPStartTime            |
         kCLPPrintExpire          |
-        kCLPGeneratePreview);
+        kCLPGeneratePreview      |
+        kCLPSetLogFile);
 
     for (int argpos = 0; argpos < argc; ++argpos)
     {
Index: mythbuild/mythtv/programs/mythbackend/main_helpers.cpp
===================================================================
--- mythbuild.orig/mythtv/programs/mythbackend/main_helpers.cpp
+++ mythbuild/mythtv/programs/mythbackend/main_helpers.cpp
@@ -536,6 +536,25 @@ int handle_command(const MythCommandLine
         }
     }
 
+    if (cmdline.SetLogFile())
+    {
+        if (gContext->ConnectToMasterServer())
+        {
+            QString message = "SET_LOGFILE ";
+            message += cmdline.GetNewLogFilename();
+
+            RemoteSendMessage(message);
+            VERBOSE(VB_IMPORTANT, QString("Sent '%1' message").arg(message));
+            return BACKEND_EXIT_OK;
+        }
+        else
+        {
+            VERBOSE(VB_IMPORTANT,
+                    "Unable to connect to backend, logfile unchanged ");
+            return BACKEND_EXIT_NO_CONNECT;
+        }
+    }
+
     if (cmdline.ClearSettingsCache())
     {
         if (gContext->ConnectToMasterServer())
Index: mythbuild/mythtv/programs/mythbackend/mainserver.cpp
===================================================================
--- mythbuild.orig/mythtv/programs/mythbackend/mainserver.cpp
+++ mythbuild/mythtv/programs/mythbackend/mainserver.cpp
@@ -559,6 +559,8 @@ void MainServer::ProcessRequestWork(Myth
     {
         if ((listline.size() >= 2) && (listline[1].left(11) == "SET_VERBOSE"))
             HandleSetVerbose(listline, pbs);
+        else if ((listline.size() >= 2) && (listline[1].left(11) == "SET_LOGFILE"))
+            HandleSetLogfile(listline, pbs);
         else
             HandleMessage(listline, pbs);
     }
@@ -4390,6 +4392,45 @@ void MainServer::HandleSetVerbose(QStrin
     SendResponse(pbssock, retlist);
 }
 
+void MainServer::HandleSetLogfile(QStringList &slist, PlaybackSock *pbs)
+{
+    MythSocket *pbssock = pbs->getSocket();
+    QStringList retlist = QStringList("OK");
+
+    QString newlogfile = slist[1];
+    int len=newlogfile.length();
+    if (len > 12)
+    {
+        newlogfile = newlogfile.right(len-12); // Chop off "SET_LOGFILE "
+
+        // Duplicate of log_rotate in main.cpp
+        VERBOSE(VB_GENERAL, QString("Setting new logfile to '%1'").arg(newlogfile));
+
+        int new_logfd = open(newlogfile.toLocal8Bit().constData(),
+                             O_WRONLY|O_CREAT|O_APPEND|O_SYNC, 0664);
+        if (new_logfd < 0)
+        {
+            VERBOSE(VB_IMPORTANT, QString("Couldn't open new logfile '%1'").arg(newlogfile));
+            retlist = QStringList("Failed");
+        }
+        else
+        {
+            while (dup2(new_logfd, 1) < 0 && errno == EINTR) ;
+            while (dup2(new_logfd, 2) < 0 && errno == EINTR) ;
+            while (close(new_logfd) < 0 && errno == EINTR) ;
+            VERBOSE(VB_GENERAL, QString("New Logfile: '%1'").arg(newlogfile));
+        }
+    }
+    else
+    {
+        VERBOSE(VB_IMPORTANT, QString("Invalid SET_LOGFILE string: '%1'").arg(newlogfile));
+        retlist = QStringList("Failed");
+    }
+
+    SendResponse(pbssock, retlist);
+}
+
+
 void MainServer::HandleIsRecording(QStringList &slist, PlaybackSock *pbs)
 {
     (void)slist;
Index: mythbuild/mythtv/programs/mythbackend/mainserver.h
===================================================================
--- mythbuild.orig/mythtv/programs/mythbackend/mainserver.h
+++ mythbuild/mythtv/programs/mythbackend/mainserver.h
@@ -127,6 +127,7 @@ class MainServer : public QObject, publi
     void HandleGetRecorderFromNum(QStringList &slist, PlaybackSock *pbs);
     void HandleMessage(QStringList &slist, PlaybackSock *pbs);
     void HandleSetVerbose(QStringList &slist, PlaybackSock *pbs);
+    void HandleSetLogfile(QStringList &slist, PlaybackSock *pbs);
     void HandleGenPreviewPixmap(QStringList &slist, PlaybackSock *pbs);
     void HandlePixmapLastModified(QStringList &slist, PlaybackSock *pbs);
     void HandlePixmapGetIfModified(const QStringList &slist, PlaybackSock *pbs);
