我在我寫的C#web服務中使用Log4net(v2.0.50727)。其配置爲創建2個appender。第一個是我監控的一般調試文件,以確保服務正常運行,第二個是我以各種間隔(手動現在,但可能會自動化)轉發給客戶的報告。Log4net xml appender不創建根元素
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\Service.log.xml"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="20"/>
<maximumFileSize value="10000KB"/>
<staticLogFileName value="true"/>
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<conversionPattern value="%utcdate [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<appender name="CustomerReportAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\Customer.Report.xml"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="20"/>
<maximumFileSize value="10000KB"/>
<staticLogFileName value="true"/>
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<conversionPattern value="%utcdate [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<logger name="CustomerReport">
<level value="ALL" />
<appender-ref ref="CustomerReportAppender" />
</logger>
</log4net>
對兩個文件的記錄工作正常。問題是,如果我將Customer.Report.xml文件發送給我的客戶,它不會在Excel中作爲無效的XML打開。該文件由多行事件元素組成 -
<event logger="CustomerReport" timestamp="1453717399436" level="INFO" thread="8">
<message>Customer Info</message>
<properties>
<data name="UserName" value="IIS APPPOOL\Customer Service" />
<data name="log4jmachinename" value="MyServer" />
<data name="log4japp" value="/LM/W3SVC/3/ROOT-2-130981905203581113" />
<data name="HostName" value="MyServer" />
</properties>
</event>
我假設Excel抱怨,因爲它沒有1個根元素。如果我包裝整個文件 -
然後Excel加載它OK。是否有可能讓Log4net爲我生成這個?或者Excel可以處理它?謝謝。
您可以添加頁眉和頁腳元素到佈局(請注意,您的轉換模式被忽略爲[XmlLayoutSchemaLog4j沒有這樣的屬性](http://logging.apache.org/log4net/log4net-1.2.12/release/ sdk/log4net.Layout.XmlLayoutSchemaLog4jMembers.html)) - 或者您有多種選擇來對流程進行更多控制,例如自定義appender或自定義佈局, – stuartd
Log4net無法自行處理,因爲RollingFileAppender沒有確定的結束。它不可能知道何時關閉根xml標記。如果您的用戶可以接受(您會收到這些病毒警告),則可以使用VBA從Excel處理此問題,否則您將不得不介入一些自定義代碼。 –