2010-11-03 32 views
6

Chúng tôi đang cố gắng thực hiện một số ghi nhật ký có thể định cấu hình động vào ứng dụng Azure của chúng tôi và chúng tôi đang sử dụng thư viện doanh nghiệp để thực hiện việc này, tuy nhiên yêu cầu xml để tạo điều kiện thuận lợi hơn phức tạp hơn cài đặt kiểu 'appSetting' đơn giản mà tệp ServiceConfiguration.cscfg dường như chấp nhận ở chỗ nó yêu cầu nút xml lồng nhau,Cài đặt XML tùy chỉnh/lồng nhau trong ServiceConfiguration.cscfg

ví dụ

<configSections> 
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
</configSections> 

được giải quyết bằng cách (tha thứ cho các định dạng trong cửa sổ này xin vui lòng):

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
     <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      type="OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
      name="AzureDiagnosticTraceListener" /> 
    </listeners> 
    <formatters> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
      name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
      <listeners> 
       <add name="AzureDiagnosticTraceListener" /> 
      </listeners> 
     </add> 
    </categorySources> 
</loggingConfiguration> 

Tôi không thể nhìn thấy một cách để lừa ServiceDefinition hoặc ServiceConfiguration tập tin để chấp nhận điều này, mặc dù nếu tôi có thể Tôi có thể thấy một cách nói cho các thư viện doanh nghiệp sử dụng tệp ServiceConfiguration mà tôi có thể thực hiện trong app.config.

Tại sao chúng tôi cố giải quyết điều này là cho phép chúng tôi tự động điều chỉnh cài đặt cho ghi nhật ký, nghĩa là thay đổi từ Không đăng nhập thành Verbose mà không phải thực hiện triển khai lại, điều này chứng tỏ mất thời gian và không thực tế trong ứng dụng trực tiếp của chúng tôi chỉ thời gian gần đây đã đi vào vận hành nên vẫn có thể có những lỗi lẻ hiện ;-)

Bất kỳ suy nghĩ sẽ biết ơn nhất nhận Trân Kindo Malay

Trả lời

1

tùy chọn khác:

  • mã hóa Base64 cho configs tùy ý và đặt chúng vào giá trị của cscfg
  • (yêu thích của tôi) Đơn giản chỉ cần giữ configs thêm trong việc lưu trữ blob hoặc cơ sở dữ liệu (làm cho cuộc sống đơn giản hơn để quản lý triển khai)
+0

Tôi thích ý tưởng đặt các cài đặt trong bộ nhớ blob, nhưng bạn sẽ mất khả năng phát hiện các thay đổi cấu hình.Đó không phải là để nói rằng bạn không thể đến với một cái gì đó chính mình để làm điều đó. – knightpfhor

+0

Về cơ bản, bạn chỉ có thể tải cài đặt từ BLOB chỉ khi khởi động và có một chủ đề phụ luôn ngủ gần như mọi lúc. Sau một vài phút, nó sẽ kiểm tra các thay đổi trong BLOB và, nếu được phát hiện, chỉ cần yêu cầu API quản lý để khởi động lại nhân viên. –

+0

Chúng tôi đã đi một cách khác nhau cuối cùng nhưng cảm ơn rất nhiều vì thông tin –

1

Tại thời điểm các tập tin ServiceConfiguration bị hạn chế để <Setting name="foo" value="bar" /> cấu trúc cơ bản.

Nhưng giá trị chỉ đơn giản là giá trị chuỗi. Những gì tôi đã làm khi cần một cái gì đó mang tính biểu cảm hơn là đặt XML thành một chuỗi trong giá trị của thiết lập và sau đó deserialize nó thành XML khi tôi đọc nó. Điều này làm cho các tập tin cấu hình trông khá xấu xí khi bạn đang chỉnh sửa nó trực tiếp bởi vì nó mã hóa tất cả các XML trong thiết lập của bạn, nhưng nó hoạt động.

Nếu chúng ta chỉ cần nhìn vào phần nghe của bạn để giữ ví dụ nhỏ:

<listeners> 
    <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    type="OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
    name="AzureDiagnosticTraceListener" /> 
</listeners> 

này có thể được đặt trong file ServiceConfiguration trông như:

<Setting name="Logging" value="&lt;listeners&gt;&lt;add listenerDataType=&quot;Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot; type=&quot;OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&quot; name=&quot;AzureDiagnosticTraceListener&quot; /&gt;&lt;/listeners&gt;" /> 

Cách đơn giản nhất để làm điều này là lấy XML nguồn của bạn, thay thế tất cả các tab và trả về vận chuyển và cập nhật cài đặt thông qua phần cài đặt thuộc tính dự án đám mây.

Thay đổi điều này khi nó được triển khai không hoàn toàn thẳng về phía trước, nhưng có thể thực hiện được.

+0

Cảm ơn đống này, tôi sẽ thử này, bạn có biết nếu có giới hạn về chuỗi 'chuỗi' này có thể dài bao nhiêu? –

+0

Không, tôi không biết. Tôi chỉ sử dụng các cài đặt nhỏ hơn nhiều so với những gì bạn đang xem. – knightpfhor

Các vấn đề liên quan