เครื่องมือการปรับใช้เว็บ .NET พร้อม log4Net: ไม่เขียนทับบันทึก

ฉันใช้เครื่องมือการปรับใช้เว็บเพื่อสร้างและเผยแพร่ไซต์ MVC จาก VS 2010 ไปยังเซิร์ฟเวอร์ที่ใช้ IIS ฉันยังมีการบันทึก log4net ไปยังไดเร็กทอรีย่อยที่อยู่นอกรูทของเว็บแอปพลิเคชันที่ฉันกำลังปรับใช้ด้วย ฉันพบวิธีรักษาสิทธิ์ในการเขียนไว้เมื่อปรับใช้ด้วยเครื่องมือนี้ในไดเร็กทอรีนั้น แต่ตอนนี้ฉันกำลังประสบปัญหาที่ฉันไม่อยากให้บันทึกสูญหายเมื่อทำการปรับใช้ และการปรับใช้ล้มเหลวเนื่องจากบันทึก ไฟล์ที่ log4net ใช้นั้น "ใช้โดยกระบวนการอื่น" (น่าจะเป็น w3wp) และจะไม่ยอมให้การปรับใช้ดำเนินต่อไป

ดังนั้น ฉันต้องการเก็บไฟล์บันทึกไว้ และไม่ลบหรือเขียนทับ เพื่อวัตถุประสงค์ในการตรวจสอบ มีวิธีทำเช่นนั้นภายในขอบเขตของ Web Deployment Tool หรือไม่

แก้ไข: นี่คือบิตที่เกี่ยวข้องของการกำหนดค่า log4net ใน Web.Config

<?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>

comment
โปรดเพิ่มการกำหนดค่า log4net ของคุณ   -  person bniwredyc    schedule 19.05.2011
comment
@bniwredyc: เสร็จแล้ว เสร็จแล้ว ขอบคุณ   -  person Chris    schedule 19.05.2011
comment
คุณจะรักษาสิทธิ์ในการเขียนให้เหมือนเดิมได้อย่างไร??   -  person rudimenter    schedule 06.02.2012


คำตอบ (2)


พบได้โดยการค้นหา: มีพารามิเตอร์ "ข้าม" ที่คุณสามารถใช้กับคำสั่งได้เมื่อคุณเรียกใช้สคริปต์การปรับใช้แพ็กเกจล่วงหน้า คุณต้องใช้พรอมต์ CMD เก่าปกติสำหรับสิ่งนี้ การหลีกเลี่ยงคำพูดอย่างบ้าคลั่งของ Powershell ทำให้แทบจะเป็นไปไม่ได้เลยที่จะพูดถูก ดังนั้นฉันจึงยอมแพ้ อย่างไรก็ตาม นี่คือผลลัพธ์สุดท้ายที่ฉันได้มา:

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

"MyProject.deploy.cmd" เป็นชื่อของคำสั่งปรับใช้แบบแพ็กเกจล่วงหน้า "MyServerName" เป็นชื่อของเซิร์ฟเวอร์ที่ฉันใช้งาน และ "Logs" เป็นชื่อของโฟลเดอร์ที่ฉันต้องการข้าม คำสั่งนี้ดูเหมือนว่าจะปล่อยไดเรกทอรี Logs ไว้ตามลำพังและปรับใช้สิ่งอื่นที่สำคัญ

แหล่งที่มาที่ฉันเริ่มฝึกฝนสิ่งต่าง ๆ: http://blogs.iis.net/msdeploy/archive/2009/04/23/what-has-changed-about-skip-replace-rules-in-rc.aspx

person Chris    schedule 19.05.2011

ตั้งค่ารูปแบบการล็อคของ appender ของคุณเป็นแบบล็อคขั้นต่ำแล้วทุกอย่างจะเรียบร้อยดี:

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

log4net.Appender.FileAppender (ดูหมายเหตุ)

person bniwredyc    schedule 19.05.2011
comment
เจ๋งมาก ชื่นชมอย่างสูง (นั่นช่วยแก้ปัญหาบางอย่างสำหรับโครงการอื่น ๆ ให้ฉันได้อย่างแน่นอน) น่าเสียดายที่เครื่องมือปรับใช้เว็บนี้ยังคงต้องการเขียนทับบันทึก (และตอนนี้ทำได้สำเร็จแล้ว) ที่ฉันต้องการเก็บไว้ ดังนั้นฉันจึงสงสัยว่ามีวิธีที่จะเก็บรักษาบันทึกเหล่านั้นหรือไม่ มีความคิดอะไรบ้าง? ขอบคุณมากอีกครั้ง - person Chris; 19.05.2011
comment
@Chris ฉันเพิ่งเก็บบันทึกไว้ในโฟลเดอร์แยกต่างหากบนเซิร์ฟเวอร์ เช่น C:\Logs\Project1, C:\Logs\Project2... - person bniwredyc; 19.05.2011
comment
การล็อกขั้นต่ำหมายความว่าไฟล์สามารถถูกลบโดยการเผยแพร่ได้ คำถามถามว่าจะเก็บรักษาไฟล์เหล่านั้นอย่างไรไม่ใช่วิธีเปิดใช้งานการลบ - person Brian Leeming; 16.02.2012