1

我正在使用Web部署工具從VS 2010構建MVC站點並將其發佈到運行IIS的服務器。我還將log4net記錄到我要部署到的Web應用程序根目錄的子目錄中。我已經想出了在該目錄上使用此工具進行部署時如何保持寫權限,但現在我遇到了部署時不想丟失日誌的問題,而且部署失敗,因爲日誌log4net正在使用的文件被「另一個進程使用」(可能是w3wp),並且不會繼續部署。帶有log4Net的.NET Web部署工具:不覆蓋日誌

所以,我想保留日誌文件,而不是刪除或覆蓋它們,出於審計目的。在Web部署工具的範圍內有沒有辦法做到這一點?

編輯:以下是Web.Config中log4net配置的適用位。您的appender

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="RollingLog" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="Logs\Log.txt" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Composite" /> 
     <maxSizeRollBackups value="20" /> 
     <maximumFileSize value="10MB" /> 
     <datePattern value="yyyyMMdd" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="{%level}%date{MM/dd HH:mm:ss} - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingLog" /> 
    </root> 
    </log4net> 
</configuration> 
+0

添加您的log4net的配置,請 – bniwredyc 2011-05-19 15:51:58

+0

@bniwredyc:做,做,格拉西亞斯。 – Chris 2011-05-19 15:55:57

+0

你如何保持寫權限完整? – rudimenter 2012-02-06 16:35:39

回答

2

獵周圍發現:有一個「跳過」您可以在調用預打包的部署腳本時添加參數。您必須使用常規的舊CMD提示符來執行此操作; Powershell瘋狂地逃避報價使得幾乎不可能得到正確的報價,所以我放棄了。總之,這裏是我想出了最終結果:

.\MyProject.deploy.cmd /Y /M:MyServerName "-skip:skipAction=Delete,objectName=filePath,absolutePath=Logs" 

「MyProject.deploy.cmd」是預先包裝的部署命令的名稱,「MyServerName」是我被部署到服務器的名稱,而「日誌「是我想要跳過的文件夾的名稱。該命令似乎獨自留下Logs目錄並部署其他任何重要的東西。

來源在那裏我開始磨練的事情:http://blogs.iis.net/msdeploy/archive/2009/04/23/what-has-changed-about-skip-replace-rules-in-rc.aspx

0

設置鎖定模式,以最小的鎖,一切都會好起來:

<appender name="RollingLog" type="log4net.Appender.RollingFileAppender"> 
    ... 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    ... 
</appender> 

log4net.Appender.FileAppender(見備註)

+0

非常酷,非常感謝(這肯定解決了我爲其他項目的一些問題)。不幸的是,這個web部署工具仍然想覆蓋我想保留的日誌(現在成功了),所以我很好奇是否有辦法保存它們。那裏有任何想法?再次,非常感謝。 – Chris 2011-05-19 16:09:09

+0

@Chris,我只是將日誌存儲在服務器上的一個單獨的文件夾中。像C:\ Logs \ Project1,C:\ Logs \ Project2 ... – bniwredyc 2011-05-19 16:12:53

+0

最小鎖意味着該文件能夠被髮布刪除。這個問題問如何保留這些文件,而不是如何啓用它們的刪除。 – 2012-02-16 16:08:48