log4net的架构文件

一直在用log4net来记录日志,但每次都是把之前写好的配置文件拷贝一份稍加修改,按说这样也没什么。但每次都看VS提示一票找不到框架信息,搞的我排错都很困难,很不爽,于是尝试上网搜一个架构文件,但下来一看,写的很简单,大不到我的需求,于是自己就写一个,并加入了一些约束条件、候选值、默认值什么的,这回可以像.net里的智能提示一样来操作log4net的配置。
类似如下的额引用,那么配置文件里的一些元素就可以有自动提示完成的功能了。
<log4net debug="false" xmlns="dxz:log4net" xmlns:l="dxz:log4net">
 
</log4net>
方便了很多,下面贴出来代码,拷贝下面的代码保存为log4net.xsd拷贝到 C:/Program Files/Microsoft Visual Studio 8/Xml/Schemas下,按照上面的引入方法就可以实现想编辑web.comfig或App.config文件一样有自动提示的功能,很好用的。
  1. <?xml version="1.0" encoding="gb2312"?>
  2. <!--
  3.       作者:dxzhan
  4.      Email:zhandx@163.com
  5.         QQ:147977032
  6.   修改时间:2008-12-09
  7.       授权:这是一个log4net的架构文件,您可以任意使用和散播此文件的副本,同时您因为使用此文件造成的任何后果由您自己负责。
  8.             您使用此架构文件的前提是必须保留此授权。
  9.             任何有在此基础上进行改进的地方使用人有义务知会作者共同进步。
  10.   使用说明:将此文件拷贝到X:/Program Files/Microsoft Visual Studio 8/Xml/Schemas下
  11.                     在log4net配置文件里加入类似如下命名空间引入
  12.                     <log4net debug="false" xmlns="dxz:log4net" xmlns:l="dxz:log4net">
  13.   
  14.                         </log4net>
  15.                         即可享受像使用VS自带的配置文件一样的元素属性自动提示、候选值、默认值等功能。
  16. -->
  17. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="dxz:log4net" xmlns="dxz:log4net" elementFormDefault="qualified">
  18.   <xs:element name="level">
  19.     <xs:complexType>
  20.       <xs:simpleContent>
  21.         <xs:extension base="xs:string">
  22.           <xs:attribute name="value" use="required">
  23.             <xs:simpleType>
  24.               <xs:restriction base="xs:string">
  25.                 <xs:enumeration value="OFF" />
  26.                 <xs:enumeration value="FATAL" />
  27.                 <xs:enumeration value="ERROR" />
  28.                 <xs:enumeration value="WARN" />
  29.                 <xs:enumeration value="INFO" />
  30.                 <xs:enumeration value="DEBUG" />
  31.                 <xs:enumeration value="ALL" />
  32.               </xs:restriction>
  33.             </xs:simpleType>
  34.           </xs:attribute>
  35.         </xs:extension>
  36.       </xs:simpleContent>
  37.     </xs:complexType>
  38.   </xs:element>
  39.   <xs:element name="appender-ref">
  40.     <xs:complexType>
  41.       <xs:attribute name="ref" type="xs:string" use="required" />
  42.     </xs:complexType>
  43.   </xs:element>
  44.   <xs:element name="bufferSize">
  45.     <xs:complexType>
  46.       <xs:attribute name="value" type="xs:decimal" use="required" />
  47.     </xs:complexType>
  48.   </xs:element>
  49.   <xs:element name="connectionType">
  50.     <xs:complexType>
  51.       <xs:simpleContent>
  52.         <xs:extension base="xs:string">
  53.           <xs:attribute name="value">
  54.             <xs:simpleType>
  55.               <xs:restriction base="xs:string">
  56.                 <xs:enumeration value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  57.                 <xs:enumeration value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  58.                 <xs:enumeration value="IBM.Data.DB2.DB2Connection,IBM.Data.DB2, Version=8.1.2.1" />
  59.               </xs:restriction>
  60.             </xs:simpleType>
  61.           </xs:attribute>
  62.         </xs:extension>
  63.       </xs:simpleContent>
  64.     </xs:complexType>
  65.   </xs:element>
  66.   <xs:element name="connectionString">
  67.     <xs:complexType>
  68.       <xs:simpleContent>
  69.         <xs:extension base="xs:string">
  70.           <xs:attribute name="value" use="required">
  71.             <xs:simpleType>
  72.               <xs:restriction base="xs:string">
  73.                 <xs:enumeration value="data source=[mydatabase];User ID=[user];Password=[password]" />
  74.                 <xs:enumeration value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
  75.                 <xs:enumeration value="server=127.0.0.1;database=dbuser;user Id=username;password=password;persist security info=true" />
  76.                 <xs:enumeration value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/log/access.mdb;User Id=;Password=;" />
  77.               </xs:restriction>
  78.             </xs:simpleType>
  79.           </xs:attribute>
  80.         </xs:extension>
  81.       </xs:simpleContent>
  82.     </xs:complexType>
  83.   </xs:element>
  84.   <xs:element name="commandText">
  85.     <xs:complexType>
  86.       <xs:simpleContent>
  87.         <xs:extension base="xs:string">
  88.           <xs:attribute name="value">
  89.             <xs:simpleType>
  90.               <xs:restriction base="xs:string">
  91.                 <xs:enumeration value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
  92.                 <xs:enumeration value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
  93.                 <xs:enumeration value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
  94.                 <xs:enumeration value="INSERT INTO myschema.Log (Date,Thread,Level,Logger,Message,Exception) VALUES (@log_date,@thread,@log_level,@logger,@message,@exception)" />
  95.               </xs:restriction>
  96.             </xs:simpleType>
  97.           </xs:attribute>
  98.         </xs:extension>
  99.       </xs:simpleContent>
  100.     </xs:complexType>
  101.   </xs:element>
  102.   <xs:element name="parameter">
  103.     <xs:complexType>
  104.       <xs:sequence>
  105.         <xs:element name="parameterName">
  106.           <xs:complexType>
  107.             <xs:attribute name="value" type="xs:string" use="required" />
  108.           </xs:complexType>
  109.         </xs:element>
  110.         <xs:element name="dbType">
  111.           <xs:complexType>
  112.             <xs:simpleContent>
  113.               <xs:extension base="xs:string">
  114.                 <xs:attribute name="value" use="required">
  115.                   <xs:simpleType>
  116.                     <xs:restriction base="xs:string">
  117.                       <xs:enumeration value="DateTime" />
  118.                       <xs:enumeration value="String" />
  119.                       <xs:enumeration value="Boolean" />
  120.                       <xs:enumeration value="Byte" />
  121.                       <xs:enumeration value="Decimal" />
  122.                       <xs:enumeration value="Double" />
  123.                       <xs:enumeration value="Int16" />
  124.                       <xs:enumeration value="Int32" />
  125.                       <xs:enumeration value="Int64" />
  126.                       <xs:enumeration value="Binary" />
  127.                     </xs:restriction>
  128.                   </xs:simpleType>
  129.                 </xs:attribute>
  130.               </xs:extension>
  131.             </xs:simpleContent>
  132.           </xs:complexType>
  133.         </xs:element>
  134.         <xs:element minOccurs="0" name="size">
  135.           <xs:complexType>
  136.             <xs:attribute name="value" type="xs:decimal" use="required" />
  137.           </xs:complexType>
  138.         </xs:element>
  139.         <xs:element ref="layout" />
  140.       </xs:sequence>
  141.     </xs:complexType>
  142.   </xs:element>
  143.   <xs:element name="layout">
  144.     <xs:complexType>
  145.       <xs:sequence minOccurs="0">
  146.         <xs:choice maxOccurs="unbounded">
  147.           <xs:element name="conversionPattern">
  148.             <xs:complexType>
  149.               <xs:simpleContent>
  150.                 <xs:extension base="xs:string">
  151.                   <xs:attribute name="value">
  152.                     <xs:simpleType>
  153.                       <xs:restriction base="xs:string">
  154.                         <xs:enumeration value="%date %newline %message %newline %-20file %-5line %newline" />
  155.                         <xs:enumeration value="%date - %message %newline" />
  156.                         <xs:enumeration value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  157.                       </xs:restriction>
  158.                     </xs:simpleType>
  159.                   </xs:attribute>
  160.                 </xs:extension>
  161.               </xs:simpleContent>
  162.             </xs:complexType>
  163.           </xs:element>
  164.           <xs:element name="param">
  165.             <xs:complexType>
  166.               <xs:simpleContent>
  167.                 <xs:extension base="xs:string">
  168.                   <xs:attribute name="name">
  169.                     <xs:simpleType>
  170.                       <xs:restriction base="xs:string">
  171.                         <xs:enumeration value="Header" />
  172.                         <xs:enumeration value="Footer" />
  173.                       </xs:restriction>
  174.                     </xs:simpleType>
  175.                   </xs:attribute>
  176.                   <xs:attribute name="value">
  177.                     <xs:simpleType>
  178.                       <xs:restriction base="xs:string">
  179.                         <xs:enumeration value="------------------------------------------[Header]-----------------------------------------" />
  180.                         <xs:enumeration value="------------------------------------------[Footer]-----------------------------------------" />
  181.                       </xs:restriction>
  182.                     </xs:simpleType>
  183.                   </xs:attribute>
  184.                 </xs:extension>
  185.               </xs:simpleContent>
  186.             </xs:complexType>
  187.           </xs:element>
  188.         </xs:choice>
  189.       </xs:sequence>
  190.       <xs:attribute name="type" type="xs:string" use="optional" default="log4net.Layout.PatternLayout" />
  191.     </xs:complexType>
  192.   </xs:element>
  193.   <xs:element name="mapping">
  194.     <xs:complexType>
  195.       <xs:sequence>
  196.         <xs:choice>
  197.           <xs:element ref="level" />
  198.           <xs:element minOccurs="0" name="foreColor">
  199.             <xs:complexType>
  200.               <xs:attribute name="value" type="xs:string" use="required" />
  201.             </xs:complexType>
  202.           </xs:element>
  203.           <xs:element name="backColor">
  204.             <xs:complexType>
  205.               <xs:attribute name="value" type="xs:string" use="required" />
  206.             </xs:complexType>
  207.           </xs:element>
  208.           <xs:element minOccurs="0" name="attributes">
  209.             <xs:complexType>
  210.               <xs:attribute name="value" type="xs:string" use="required" />
  211.             </xs:complexType>
  212.           </xs:element>
  213.         </xs:choice>
  214.       </xs:sequence>
  215.     </xs:complexType>
  216.   </xs:element>
  217.   <xs:element name="file">
  218.     <xs:complexType>
  219.       <xs:simpleContent>
  220.         <xs:extension base="xs:string">
  221.           <xs:attribute name="value" use="required">
  222.             <xs:simpleType>
  223.               <xs:restriction base="xs:string">
  224.                 <xs:enumeration value="log/Error.log" />
  225.                 <xs:enumeration value="/log/${TMP}/Error.log" />
  226.               </xs:restriction>
  227.             </xs:simpleType>
  228.           </xs:attribute>
  229.         </xs:extension>
  230.       </xs:simpleContent>
  231.     </xs:complexType>
  232.   </xs:element>
  233.   <xs:element name="appendToFile">
  234.     <xs:complexType>
  235.       <xs:attribute name="value" type="xs:boolean" use="required" />
  236.     </xs:complexType>
  237.   </xs:element>
  238.   <xs:element name="rollingStyle">
  239.     <xs:complexType>
  240.       <xs:simpleContent>
  241.         <xs:extension base="xs:string">
  242.           <xs:attribute name="value">
  243.             <xs:simpleType>
  244.               <xs:restriction base="xs:string">
  245.                 <xs:enumeration value="Once" />
  246.                 <xs:enumeration value="Size" />
  247.                 <xs:enumeration value="Date" />
  248.                 <xs:enumeration value="Composite" />
  249.               </xs:restriction>
  250.             </xs:simpleType>
  251.           </xs:attribute>
  252.         </xs:extension>
  253.       </xs:simpleContent>
  254.     </xs:complexType>
  255.   </xs:element>
  256.   <xs:element name="maxSizeRollBackups">
  257.     <xs:complexType>
  258.       <xs:attribute name="value" type="xs:byte" use="required" />
  259.     </xs:complexType>
  260.   </xs:element>
  261.   <xs:element name="maximumFileSize">
  262.     <xs:complexType>
  263.       <xs:attribute name="value" type="xs:string" use="required" />
  264.     </xs:complexType>
  265.   </xs:element>
  266.   <xs:element name="filter">
  267.     <xs:complexType>
  268.       <xs:sequence>
  269.         <xs:element maxOccurs="unbounded" name="param">
  270.           <xs:complexType>
  271.             <xs:attribute name="name" type="xs:string" use="required" />
  272.             <xs:attribute name="value" type="xs:string" use="required" />
  273.           </xs:complexType>
  274.         </xs:element>
  275.       </xs:sequence>
  276.       <xs:attribute name="type" type="xs:string" use="optional" default="log4net.Filter.LevelRangeFilter"/>
  277.     </xs:complexType>
  278.   </xs:element>
  279.   <xs:element name="lossy">
  280.     <xs:complexType>
  281.       <xs:attribute name="value" type="xs:boolean" use="required" />
  282.     </xs:complexType>
  283.   </xs:element>
  284.   <xs:element name="evaluator">
  285.     <xs:complexType>
  286.       <xs:sequence>
  287.         <xs:element name="threshold">
  288.           <xs:complexType>
  289.             <xs:attribute name="value" type="xs:string" use="optional" default="ERROR" />
  290.           </xs:complexType>
  291.         </xs:element>
  292.       </xs:sequence>
  293.       <xs:attribute name="type" type="xs:string" use="optional"  default="log4net.Core.LevelEvaluator" />
  294.     </xs:complexType>
  295.   </xs:element>
  296.   <xs:element name="target">
  297.     <xs:complexType>
  298.       <xs:attribute name="value" type="xs:string" use="required" />
  299.     </xs:complexType>
  300.   </xs:element>
  301.   <xs:element name="applicationName">
  302.     <xs:complexType>
  303.       <xs:attribute name="value" type="xs:string" use="required" />
  304.     </xs:complexType>
  305.   </xs:element>
  306.   <xs:element name="encoding">
  307.     <xs:complexType>
  308.       <xs:attribute name="value" type="xs:string" use="optional" default="unicodeFFFE" />
  309.     </xs:complexType>
  310.   </xs:element>
  311.   <xs:element name="lockingModel">
  312.     <xs:complexType>
  313.       <xs:attribute name="type" type="xs:string" use="optional"  default="log4net.Appender.FileAppender+MinimalLock" />
  314.     </xs:complexType>
  315.   </xs:element>
  316.   <xs:element name="threshold">
  317.     <xs:complexType>
  318.       <xs:attribute name="value" type="xs:string" use="optional" default="true" />
  319.     </xs:complexType>
  320.   </xs:element>
  321.   <xs:element name="onlyFixPartialEventData">
  322.     <xs:complexType>
  323.       <xs:attribute name="value" type="xs:boolean" use="required" />
  324.     </xs:complexType>
  325.   </xs:element>
  326.   <xs:element name="server">
  327.     <xs:complexType>
  328.       <xs:attribute name="value" type="xs:string" use="optional" default="SQUARE" />
  329.     </xs:complexType>
  330.   </xs:element>
  331.   <xs:element name="recipient">
  332.     <xs:complexType>
  333.       <xs:attribute name="value" type="xs:string" use="optional" default="nicko" />
  334.     </xs:complexType>
  335.   </xs:element>
  336.   <xs:element name="sink">
  337.     <xs:complexType>
  338.       <xs:attribute name="value" type="xs:string" use="optional" default="tcp://localhost:8085/LoggingSink" />
  339.     </xs:complexType>
  340.   </xs:element>
  341.   <xs:element name="staticLogFileName">
  342.     <xs:complexType>
  343.       <xs:attribute name="value" type="xs:boolean" use="required" />
  344.     </xs:complexType>
  345.   </xs:element>
  346.   <xs:element name="datePattern">
  347.     <xs:complexType>
  348.       <xs:attribute name="value" type="xs:string" use="optional" default="yyyyMMdd-HHmm" />
  349.     </xs:complexType>
  350.   </xs:element>
  351.   <xs:element name="to">
  352.     <xs:complexType>
  353.       <xs:attribute name="value" type="xs:string" use="optional" default="to@domain.com" />
  354.     </xs:complexType>
  355.   </xs:element>
  356.   <xs:element name="from">
  357.     <xs:complexType>
  358.       <xs:attribute name="value" type="xs:string" use="optional"  default="from@domain.com" />
  359.     </xs:complexType>
  360.   </xs:element>
  361.   <xs:element name="subject">
  362.     <xs:complexType>
  363.       <xs:attribute name="value" type="xs:string" use="optional"  default="test logging message" />
  364.     </xs:complexType>
  365.   </xs:element>
  366.   <xs:element name="smtpHost">
  367.     <xs:complexType>
  368.       <xs:attribute name="value" type="xs:string" use="optional"  default="SMTPServer.domain.com" />
  369.     </xs:complexType>
  370.   </xs:element>
  371.   <xs:element name="pickupDir">
  372.     <xs:complexType>
  373.       <xs:attribute name="value" type="xs:string" use="optional"  default="C:/SmtpPickup" />
  374.     </xs:complexType>
  375.   </xs:element>
  376.   <xs:element name="localPort">
  377.     <xs:complexType>
  378.       <xs:attribute name="value" type="xs:decimal" use="required" />
  379.     </xs:complexType>
  380.   </xs:element>
  381.   <xs:element name="remoteAddress">
  382.     <xs:complexType>
  383.       <xs:attribute name="value" type="xs:string" use="optional"  default="127.0.0.1" />
  384.     </xs:complexType>
  385.   </xs:element>
  386.   <xs:element name="remotePort">
  387.     <xs:complexType>
  388.       <xs:attribute name="value" type="xs:decimal" use="required" />
  389.     </xs:complexType>
  390.   </xs:element>
  391.   <xs:element name="log4net">
  392.     <xs:complexType>
  393.       <xs:sequence>
  394.         <xs:element maxOccurs="unbounded" name="appender">
  395.           <xs:complexType>
  396.             <xs:sequence>
  397.               <xs:choice maxOccurs="unbounded">
  398.                 <xs:element ref="bufferSize" />
  399.                 <xs:element ref="connectionType" />
  400.                 <xs:element ref="connectionString" />
  401.                 <xs:element ref="commandText" />
  402.                 <xs:element ref="parameter" maxOccurs="unbounded" />
  403.                 <xs:element ref="mapping" maxOccurs="unbounded" />
  404.                 <xs:element ref="file" />
  405.                 <xs:element ref="appendToFile" />
  406.                 <xs:element ref="rollingStyle" />
  407.                 <xs:element ref="maxSizeRollBackups" />
  408.                 <xs:element ref="maximumFileSize" />
  409.                 <xs:element ref="layout" />
  410.                 <xs:element ref="filter" />
  411.                 <xs:element ref="appender-ref" />
  412.                 <xs:element ref="lossy" />
  413.                 <xs:element ref="evaluator" />
  414.                 <xs:element ref="target" />
  415.                 <xs:element ref="applicationName" />
  416.                 <xs:element ref="encoding" />
  417.                 <xs:element ref="lockingModel" />
  418.                 <xs:element ref="threshold" />
  419.                 <xs:element ref="onlyFixPartialEventData" />
  420.                 <xs:element ref="server" />
  421.                 <xs:element ref="recipient" />
  422.                 <xs:element ref="sink" />
  423.                 <xs:element ref="staticLogFileName" />
  424.                 <xs:element ref="datePattern" />
  425.                 <xs:element ref="to" />
  426.                 <xs:element ref="from" />
  427.                 <xs:element ref="subject" />
  428.                 <xs:element ref="smtpHost" />
  429.                 <xs:element ref="pickupDir" />
  430.                 <xs:element ref="localPort" />
  431.                 <xs:element ref="remoteAddress" />
  432.                 <xs:element ref="remotePort" />
  433.               </xs:choice>
  434.             </xs:sequence>
  435.             <xs:attribute name="name" type="xs:string" use="required" />
  436.             <xs:attribute name="type" type="xs:string" use="required" />
  437.           </xs:complexType>
  438.         </xs:element>
  439.         <xs:element name="root" maxOccurs="1">
  440.           <xs:complexType>
  441.             <xs:sequence>
  442.               <xs:element ref="level" />
  443.               <xs:element ref="appender-ref" maxOccurs="unbounded" />
  444.             </xs:sequence>
  445.           </xs:complexType>
  446.         </xs:element>
  447.         <xs:element maxOccurs="unbounded" name="logger">
  448.           <xs:complexType>
  449.             <xs:sequence>
  450.               <xs:element ref="level" />
  451.               <xs:element minOccurs="0" maxOccurs="unbounded" ref="appender-ref" />
  452.             </xs:sequence>
  453.             <xs:attribute name="name" type="xs:string" use="required" />
  454.             <xs:attribute name="additivity" type="xs:boolean" use="optional" />
  455.           </xs:complexType>
  456.         </xs:element>
  457.       </xs:sequence>
  458.       <xs:attribute name="debug" type="xs:boolean" use="required" />
  459.     </xs:complexType>
  460.   </xs:element>
  461. </xs:schema>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值