From 1281b1c8544a568cd9f8724b5a146c6553de938a Mon Sep 17 00:00:00 2001 From: gaoguozheng Date: Sat, 25 Feb 2023 15:32:41 +0800 Subject: [PATCH] init --- DianBiao/.vs/DianBiao/v16/.suo | Bin 49152 -> 52736 bytes DianBiao/App.config | 26 + DianBiao/DianBiao.csproj | 6 +- DianBiao/dianbiao.cs | 69 +- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6707 -> 6837 bytes .../DianBiao.csproj.AssemblyReference.cache | Bin 4084 -> 11 bytes DianBiao/packages.config | 4 + .../packages/log4net.2.0.8/.signature.p7s | Bin 0 -> 9483 bytes .../log4net.2.0.8/lib/net20-full/log4net.dll | Bin 0 -> 278528 bytes .../log4net.2.0.8/lib/net20-full/log4net.xml | 31421 +++++++++++++++ .../lib/net35-client/log4net.dll | Bin 0 -> 282624 bytes .../lib/net35-client/log4net.xml | 32259 +++++++++++++++ .../log4net.2.0.8/lib/net35-full/log4net.dll | Bin 0 -> 286720 bytes .../log4net.2.0.8/lib/net35-full/log4net.xml | 32464 ++++++++++++++++ .../lib/net40-client/log4net.dll | Bin 0 -> 274944 bytes .../lib/net40-client/log4net.xml | 32259 +++++++++++++++ .../log4net.2.0.8/lib/net40-full/log4net.dll | Bin 0 -> 275968 bytes .../log4net.2.0.8/lib/net40-full/log4net.xml | 32464 ++++++++++++++++ .../log4net.2.0.8/lib/net45-full/log4net.dll | Bin 0 -> 276480 bytes .../log4net.2.0.8/lib/net45-full/log4net.xml | 32464 ++++++++++++++++ .../lib/netstandard1.3/log4net.dll | Bin 0 -> 221184 bytes .../log4net.2.0.8/log4net.2.0.8.nupkg | Bin 0 -> 1760575 bytes 22 files changed, 193434 insertions(+), 2 deletions(-) create mode 100644 DianBiao/packages.config create mode 100644 DianBiao/packages/log4net.2.0.8/.signature.p7s create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net20-full/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net20-full/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net35-client/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net35-client/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.xml create mode 100644 DianBiao/packages/log4net.2.0.8/lib/netstandard1.3/log4net.dll create mode 100644 DianBiao/packages/log4net.2.0.8/log4net.2.0.8.nupkg diff --git a/DianBiao/.vs/DianBiao/v16/.suo b/DianBiao/.vs/DianBiao/v16/.suo index f77a87a121a30627baf5b719567681fa6b53a0d9..e0b3f7be2451b3dae3e92a4c9ce39bfffe2626b4 100644 GIT binary patch delta 8123 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 delta 4094 zcmd5*BbgCqlp7VAe*ga)BP5I+X%Bt$CW=@9QJtd${}#^{lbMUcRR?}Yl2u^w^l zW1Hb4{TiVnG-34v=sj33M~t`zMZP*@ z5Uujz*D*+cxIt(mDr#K(G1jCCnS*##WK)rus7+>Cfsn0CW+FbBiOd-lYLhw0d@B*M znP?mqm9$9;cKmPblpw79^iizbZd?z(b-Y?mgLad zHH^$l>QjxrZw&NkeJm<9$q@WpF@>Y@G#Rd-tH&nsQic(Rp2d!SMr&vLLLqgF;UO%<_|PO+KdfutxJPE!3>A3D%J{j`1FYk2UAmE zr?sd^=PE*XX1{b?Mk5%EZ+=rJ^gqmH%m|NGIo0vFS5|00+6$#augE+0e|dJfOP(ES zV8AO(r@&)kY=qnEQpvIzg;sOEaHzuF(bY=Hqot&&=Y=LuW>ZVM`#^KMyR)eU`UNYT z9@AzAPibJ?hbPzFPJi*0PiFVsjrgK>pyGq~V=iw@dH(aEiNDuO_Xa){Rxp@-Cj%TM zd&19BF+*oril=CZ!)4|5y`7yM``f*c>d#Z~oMRYlZp@HnMHBh8c(yL7|PU{^mJOsxv`$r(&?ko&218b-O0uC=^p zMQTz}!HJ~gka{WoIzhQFLWU~|5j5a@|7`ZL>gAucE7*CNH-1u1`z^eGHtvcxdD zt2k+Qr7zP^*?IQkx2`MLsIsoB0G;eGY5+;voUd&NxN>6vkJ$p=P4$wCg{9RjHCcKe zNrpw-=2bcM?j(Ae3Sb+`f%@OYA++#^Z4>;Zm4V*vw^%H>wjE=&8)Ib`R}k3Q_puJ& zR{0z+CGBtrm7Wrq0p*lM+Deh~%g2TE=8d6ykw_w-u2;4uz)Eoy>~)nxxtJ(^UkB4C z%dsLVZs#gi6POp@R*GA$N?9Nm=g8|yS-?MiMk!W#znZLTeB|KZJBLwom5&(%k81N6 zWM!nmOlkpmGlG^W2wO|}5;l%)fy=0Z!cd#&I$Sp-j^ z$SmoWn;nz$T3HvK4I^1&*OC$w$gY zm2mZ3IYcF|$1~G46`4(zwnD4PT4Zf8wX~W&9*?!H&D`3?xB&`^`0KOVii!#=EEU&e z#VtkVwZ(1bW>d4pgY(^Hx2agb`JOgwbJ4SfZ7r=rA&>EHe6&{S>2P;-6;QNZ(0g$Q zslAw&qOwa9@m{efN$Bu5s3=;{CxC2*;gAWm^d%OwKmr*<;GX!QYv;oBc^yuZ1lf*~rpB5kduEek0~(&bMR@Lbc;X3Dlbs0b z(1U2zDTAtz(9sJ*hmR`5LsY}93*%sKCI zbM2g$lhP}m^K+5(#^PXnGCe4LMC0vfV9BLWe#r>gd?NTRZ4114GoJ-~lRxBj7!!)o zBo+7^m33J%iGD?yYPRIK|86GcDHB8N)G@LP%ZAFS?BGA>FM8mE3kg_f@u=)6eO54`z|r~)lCb`HY;KHor-?}OnIZd diff --git a/DianBiao/App.config b/DianBiao/App.config index 56efbc7..e8edcf8 100644 --- a/DianBiao/App.config +++ b/DianBiao/App.config @@ -3,4 +3,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DianBiao/DianBiao.csproj b/DianBiao/DianBiao.csproj index adcf537..a28a7af 100644 --- a/DianBiao/DianBiao.csproj +++ b/DianBiao/DianBiao.csproj @@ -33,6 +33,9 @@ 4 + + packages\log4net.2.0.8\lib\net45-full\log4net.dll + @@ -44,11 +47,12 @@ - + + \ No newline at end of file diff --git a/DianBiao/dianbiao.cs b/DianBiao/dianbiao.cs index dfffa54..0dece9b 100644 --- a/DianBiao/dianbiao.cs +++ b/DianBiao/dianbiao.cs @@ -3,14 +3,81 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Threading; using ToolKitlib; +using System.Net.Sockets; +using System.Net; namespace DianBiao { - class dianbiao + class Dianbiao { + static log4net.ILog log;//日志插件 + + public static Socket udpServer;//udp服务器 + public static bool memberReply;//是否回复消息 + public static int length = 0;//接收数据长度 + + public static EndPoint serverEnd; //服务端 + public static IPEndPoint ipEnd; //发送消息服务端 + public static Socket socket; //目标socket + public static Thread connectThread; //连接线程 + public static byte[] sendData;//发送的数据 + static void Main(string[] args) { + //初始化日志 + log4net.Config.XmlConfigurator.Configure(); + log = log4net.LogManager.GetLogger("loginfo"); + init(); + while (true) + { + Thread.Sleep(10000); + } + } + + + private static void init() + { + try + { + //var IP = "111.229.30.246"; + + var IP = "172.17.0.9"; + //string IP = "172.16.1.49"; + int Port = 12302; + + //建立udp服务器,参数2:udp协议以数据报的方式传输,参数3:UDP协议 + udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + //为服务器绑定IP + IPAddress ip = IPAddress.Parse(IP); + EndPoint ep = new IPEndPoint(ip, Port); + udpServer.Bind(ep); + //接收数据 + EndPoint endP = new IPEndPoint(IPAddress.Any, 0); + + string message; + byte[] data = new byte[1024 * 1024 * 2]; + length = 0; + //把数据的来源放到第二个参数上 + while (true) + { + length = udpServer.ReceiveFrom(data, ref endP); + //message = Encoding.Default.GetString(data, 0, length); + message = ToolKit.byteArrayToHexString(data, length); + log.Info("接收到 " + endP.ToString() + ": " + message); + message = message.Replace(" ", ""); + + + + } + } + catch (Exception e) + { + + Console.WriteLine("接收初始化:" + e.Message); + } + } } } diff --git a/DianBiao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/DianBiao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 26c71a5e4a0caeb17d828c0bd02d11bdd1c1d7fe..f63c7ebf981eaae6290b05c5ae4057121daece56 100644 GIT binary patch delta 361 zcmdmNvek4$KMy0%gpVF=Ix3pbMf{4S>?IK*xqoek?A;sJi)^xGfU^Y=>7? delta 285 zcmdmLy4hqyKMy0<F;{V~WVjXO=X#c;=GL-lP7;@A)S9dy?kS=TRKi;wlvwVTnUm_5n44P5 grZc%#+?Y`p=zu6zJ)m?f*!!sxLX66rDmYn~j(g6r@=FqP^wGT~l!KmVGllaP#thksYgZStDD41<+6 zJRy@f2FOnF*8O|GzhCw|xM9x(=p~w^Di+6Z({9&%;KKcw|KEdNw)}Y>e%{#r^)27Y zqC9rT_^FJM9(V(9}u}QWzw_d#UVAdtd zS+Znb$kQ6QZ`n++;Kl(5;Pw^BEdU01>WCUIq!9@x0at>?;=H*8%G3d@U5iTb7AaOW zu*Z!<*gLUXEB(<^6E$KxepbUnljs9 zbtAU^x7T$SaI{D=%VzC@;ST^$TzW-c@hO`LIc@aFWr3n~6o3tv+)x^>=1ORuwY{Za zycvq+{Hg`i>98{5hI}-p&hAiWLyRIqvb!q6tV@fs<6zaHQ2RaxxDTC}^T{PRjoXdf z_%8!h);eu0c511i4RwIWpbe|Bp!R_xSispr3A1Wp*HzkSC&gO40M~Gyr(lV{D^rz- fiKIlv^EJDW5&P$QVz2X?WOR~m6pMVP^a}b1GS}f? diff --git a/DianBiao/packages.config b/DianBiao/packages.config new file mode 100644 index 0000000..b43c0ef --- /dev/null +++ b/DianBiao/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/DianBiao/packages/log4net.2.0.8/.signature.p7s b/DianBiao/packages/log4net.2.0.8/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..c72b89b3b7864bffe125bb42c6e5447f95bc7492 GIT binary patch literal 9483 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

~ks{C2NHG;A47{`_*t3spQkfx=m zi0>dVzQrK*IX@fzi}LKWA|*@|c(|T{6w7dI$(Un0n<8@4xg#K~y5S%HS$pZH{m93I z`vTo(@C+l;4H>g4ieLLNe_|ua*b$pG@M8dV3YuiMEUM&79XUlhPADQp+Bh?c zA_8L$t#7rDBsl~caC57w-mi~@okD~!TunD3aaXOHrn%K>C%84sn;TY+a~_xXkJT0l z?QyGfctYaE`(bxlJ-~uZ&9T^*MG{A2c=`cfW6#H>b;LxuoIFGB5&{P}`X}w<>3E9W zT=^MHN$G^~Q=>u4>xIW;{c`nigT%{0PKe=Gd(pq=VX0aCWDo5&a_H_ zGHED@MZ1MuZz))cn9*n9k}1jq`Xu0l2Q?a`4DA~nv`#1IC#rO^?2w^i64I2n$1{%U z6J0vqQzvoZ%sedj!D3U!f0;ox^ACC!nGa5lYQBUqkOPw3$*i|{6%2aYZlnj(IL0E} zi+&sh^4O~nnHR|>j)Cf#R(h8{oJvY%t1};EcHVWKax)iT#u8>9zI$z2h_wVAid2Qc z(VmhV)eNG!bZoe3J95rR*dLlcFJo^^EGsBvxJY-2#dq2D77QZ}O*j4_Z9lE#DGW3W9B8_{A4H&T}qFf^HuAdGr}j$y2tt=#}5u zN-Iro%9N^3k#aPVGH@`Fr`ZujO3}eYawA7B96fC(6PiHvWI?c<&jn6BX&Q^lqr2tfS;#ldwO)Vrk%a0e7*xGIX$Mj3@$m*CFw?@M5>zl zBp+3+KCv*@zYE|VzHe0)TT9Mzl+ioK{ayr+XPSsf*`ZVTnl;Q9xYOhWx>APkitq|ehIOnm_~Mo^K?W zv1upNxIJx4q`U*saxhFYn8F9HuQc}f>Ez?i9!$%oWUyx1#Lb0Sn|qgb<-44IZ+zzW zE)mD1y{BYL=D!X&qQ!klx^>*AL|GH6L9-U-0>Xc`s^K_!!A^t3 zVuXe%Q6py01Y+GEWv2Nz=`x&S*hm@4WC8HoXV}IXo}vPAk7!KbX^KEOZ7NoHkQ^J%(tS#hWNYU~YS${qUVuphb-U#{%deE-z7RRJdiMD`9WoTqJf|FvoT#Zsj3`&$Fnb%k5`bBfbD~e1EYM{qce}XUqV+GyDzj?fM zzz&9%H*Dq$cb+zwrtw#~}F(GdgttVl7u#2fX2%~m>q@YH8@ zR3Kjo&;SqswJ}RRNS_7_BD-(Y3c#4(>SeVf@B2plEJu~H+ zWWahZiK9@?eDY1)bYB&?GGS{REG$&V$7z&32N*MR(FihZQHoT1h;YzHUK~BI087=_ zif`jUc^~2vyA$HQNHE@x&)E`l^<5P*Woxh-b>bL^7+vHF-uTj*jt>Tx$SLiNa#kPA zI0I76hnscg9VEq8ESamK0-5FE=^8BB7nWr@y7;e_N+p6bujV2Wu1eon<~cVV{9Xq- zxNH^^=uW}KX`fnA`S4ad1GM?%D zi@u^#H@fiatB)ojBFB;aFyiyVRV3bRX ziJ2sHt}jScGmV`;B*$gJOH9lpQ-D(zUF=U*=E#T{pK=lu~MB{9bMz_w;3`91c1k66kI96Ryw9^QaL<%Ay-clOHVvTHysl$ky1;}`0ZmYc6B*Iv{7lfTGy;*;@MYZV=5nQ`h5Is zZG2PBD(I4X7NAgo^E6WkXQB&W@JprZL=LC5XJp#%pI%^G+)J|)*;U813>ZxZ+OI;# z_RAcP`ACtm4R1$hr9ww0{G<@0xF=|aeak8_!y-yI;sl9__Bbg9zJNOE@f$k;RKtir_1+~9*ZT!@GLp9F-q>Mlst3R*BhNv9p#B+u0nwgEwrzGJ;8Fg$PGgS`%c=< z!NJ2iyJG0*5#N^Rr%dG6FeN2&tFfewjlK2Z)akegNof*r*##tSG2tMZU_0QBnPj^Q z#zTYq29693gd<0Xbr-_z2Q*JSrODg_XnTMF~aJ)Y##bdgddxs*zs)Uu$KCUi%wn(@=$b}LOw6PDT+ znx5!a2?bKr;*9;$s@IlhqHgLzNq-B14jd4Y;rEnsrPv5hXIrNHP>}a#5Yp?ZaF=o) z(OpStBl<8RSf`$d+tW&+)p_BPnpefa*8aM>QYalduRCn2h0VtQSDsLLoh+g2A+@bI zq@bc-4j1&mJNjD+1ELKmY(ZE0Gb`FDh2aEN%AD3e$J=?sA`~*E6ljWmr4UW2hU-J9 z{P~a?1gQ{7pN5aBM|5}8(6(PiviJMc?37hGs(j=2v`rN^u7x)bS<`b#-h09>)wffB zx9ZxDbyp#zJ3BD{7AgVM&Eh2K!BhhqyqrTBHumWe;x>}ASY6S?x^(R#V zOd_BnerXG#W$f@6?BMm0e#WQ)96G)Zt28yp1Xufg4e_3Z4b}mp(01r?JPhdxq3F@j4<(;f zdBHabCJ+J;LzM8-);gM{mJwEJMJ#X+TD37|k@eYe$U|YhEU(6>W9sLe;6h$UX0?T8 zCW(Q*asQ`9`kIc^+xZZ#rMEhiP*>OiA&a;R*VU#E2(zx?L)(V1RyM=hupxvs*U5g^ zDV#U8D6J(;xjQtq-7WDKbiKu{yY0HiuD9Fu4!cSyu0foFk#Kmwpx}-kr7VXIqtlSSJbe`r0%0}D@q@tf|Kh( zKxHqeozw)0%DYkRAQ!{Q2f}a!TzZE=1pv}8I^Hb|QvHtZK}(<0``A|O2DDTUGL+i1fY2IhfJDX&;h8Fi zICA;^#5NdT?^kTyEsb%5I$9mTE@b^mBP6C6W0>KPs6_4-j8KO|LrYPd(-s7fPn%Q@ zXf2Ws6ME-z?5IjkSPhNgjAH?5f&bW!k6|tJ;i_KMhPrj7 z6Ru@+&(|r{aIMQ-H&4<&h897*W1k>)3`cq4Hkm7JWB_Il#(_zoEsSfbA-sKivxzsU zzO-tALq`XALA7>Dv2)jw3*+SSwvT+Ywb8M^9n?ebjEE^VE$5pcQh{z4s8l~<4f zE)rl8h6(MqxK9 z=|0-=rSP!Yaj(ubOlm6CcGPK&uDf699S6Cf<*eY=vLBh9JM=G7uTx&1pundZRW7)R z*3VRP?N*Iw^BvY7q?H@JJ4B5m;c4Zk?n%{ogMQIUZjzTJ^=e^kx++Z>lw%PNHnJYv zzjFbf9T-aB{n3WY2rLn!_AbZ@$~$Aw%Xl05AT=`@+0rYta!;c=qlpfdo!+xBXZZAb zxCO-(`Mr+E&m9r;NI>M;j9sH`0@kq%-JU~^G7=xbOC30RiB_V|3tfQeNK;70T&%)O zw9ADk(o{>u%&2^gBo)P>82`2GK6P? zefJ?@XjEDu=5&Qmkca?N-t>rOox>Ndg3!~lI(*iIC{RQe&G*bT9ixjPcB3TL0lS2I z8wnYNGk6$J=pvSY1Yx+ewa^Cc<&_>&R%{eBioV-e?Hsn1`wrWb5t{WV8f1f&OSI7k zI@L8U*H!}JdX+k0bt0kAAx^vw8Y|0yIXOuH~3lWZbS4z?48%p7(a7<(B zR5xerjtw$vX4$NQa$yT}SKo%-T+JJDM}4ETmaQSIOTCS-FZLx(LkrS_Y?vwvlt$iF z5R|S*;SRTvfzYYKJ%CV-?OYzt`Zca&RvYH%W#j9U&K>wrU zl6~w+Yd)mf+}^C#dwZ<6{@o>OeYBBqLf^R!3^(BwMM0Xigj|Mz&Dcw1MKsI9)lrlY zL(v4TMk7o%(%X&bKjr6>8ig6f&rlam{VPXa5S*FTuHL2C$n6>lLecyYFR?If!x-0x z?=|s!odspMQZH}!K)F8?kAseZ->qA>2Ek4~+7P->$l1L4n&2Z`q3BjoL*uwb=%O## zyg_v7F+Nw-(B!OCyyu!wjOc*s!Yl~ADP{Vo*BTh6Vk<9U{AMkPXe>jB5CtL=@+7d) z7mlm?vi+SDs%ZRSy_uDc9yA6)(X32tC>nrCg$a{OaUw+4!-bWgNe4ArJ%~$(1aX-X zG;N^5+{nXLOASiIn72>h0b+DxSS{bl07ok-=3=N|pe&R)G$5Ec2JDM)ZJ&n3|818) zdsyxjBB!bHk4_lUpcpi%kC?W{h_Bq z6K(CZEyqS`8l^-*E&96(Sf5et7)*NJJ}CU9+M1Y#N7>*U=Z;9U%6<6qdZBgFMzCm? zSl`iVZFrs5_H|i|rZC&P%GXv$DiMwmnQyBh)osz8fdCvTAsdbL&Vq~xV66qcGIB-P zmEXJ^FpmhA^f_yU$B}Xk5lvYDiL?=OtPDV{bVK_=u~;oOP4me?@dmaF@(@0$!SbU( z4?}~Ne0bTBmd4(Q;dnIDXI7)0@!1Gkb$g0XvJCobQx1vVvyJN>T0|E@TTo}-HE_MP zAXved<3@D%=zvm2Rm$HW8a=)QR8d&KL)rdCo6W^c>_5LHQ9o9{YVI0NWPV9jnx!ZT zh$x$tHmpzEm8NNT=9GE?-+Od8jvE4^J363uKnh%V1*yydx7no!@CZgp95Ld#Ko0gJ zeRxO)i5a;~K48m{5KiXJ93SIsL_Est80AbyCGupg@=-6>3=3wn$T!4zgFRh6Bx#t= zqk4`gJM5`tRxm}MXEo0;LV)ygPsBAqLtpY_{X7dig~{^8<&;1wu3@ym+3&mPy^<)TD^H#Fi$8KkY{Z{v<$YAFVw-u z54+IePGjgVr}EnR=OhQ2pSC&bdx040!zSFWKStA|Pe?0L8^MTuM){`my+&osU%GAR zT=-ZZJ#`|GqrJxSzy+=Hl+M=i3|)`v4N&x|_tdEG*2^j=+goPy+@3CnrhBnW(F>!= zx(sMFU4}xRps^Dw%NUXqdiQ<`tH*(;Ub4=KX0gyCjYW%P_141T(~k&f?dDWrtp=?F zr(Xd0f(AF(eYH^|QAdZI596N6GB;fd>Ad$orseq^Rjv7m@0d8YTkI5j{tQJa}L=B(IJ}k9mSfx3F*vUix_< zuF*)>jw=9Re!*NO;ts=%wLxfjC58b}gT9~zisJs1Is@%`m^ZBtsu=jsnGvJJy4-=l zW3RWug~kUz`kT1x8czJ>1z?G45JLS0$a1;kS_WeFgh*VX4c&u9&` z8;N0QpwR#TlB?rv7eNy&6;*J)ndj!4Bc5X)6NQZ6hpo;;=qfO7u93y-@kJMg*4)BV|$g(a6C0=)8e| zBjIF$OvXxhM5fyzQ#oJx+m7|HhOq|Iq4EztJpKla(IPXhPWX+cWziVsl7FUF9y&hj z2E3;>9|Q?Wn64S!Cnm`HK%^tVm^<-t!rH6VM4!nq?SZ651ddaZvyAJ}rv644BgE+b zNQApF-5HeEUE-Y?KQTZHg&}cSHkJ2uYJ~&2uuTv{cyYGS>bhE7xea14jC>rJIw>X{ zx9RN$czUoAp7KGThXv^=bCrEw&ArAbZZpsxY*ZHlB3rH&t1*<3si%&5Xpwpt;c({T zz{yai#uX^&!ED$q8)QR>V?V|qTO(S^k9@fGLzJof=IRwUicvU%nTK;dj9J@A7v^R3 zYNXpQ67Z-;Lbi8a4s>}~(D*WND$7v(>L9t&Jt|)D6<5d%B!x?Omljw!4$!4JuMYg% zfg$x4;#fwiPURH=pEyaRr8;x<)YmV##x&QR^*laSS+>xKuYfq6_>5Z)9O171^E8-h z)oi~#NLb%%4b!>$p2h&Kdux{`v-4!O0aZyWQc>~QfbDOc&&G=}iMTr=kI)1i6U!wmOP99S}U-E@<2qjR{ z<=4P8<3p;0D2qocVeWqnW1$dnfNR&kAZ7a1P<~HKx(feNPV``6&HDb0MqP8yqsEcm zarqrG6!y$EKw6Bp1zRiO0_cdQ+=ta4uOISBB;%gEN5qnk?4WEnRaQ%4P1E2l6>UI) zk|7vY+d`wbbqt1LMy0ce9@?d@+B(9`_0D^vo;yx}E$as7-1*){Gxi^8a3 zm_oa+8w4-5*232aBJ0Txa)Ke8fyTLVeQRh&)(TmaQscVB5T`W*Uy{##l|`zU)YU;uyHB%$kssk>>%M7Xf~axU9nWnA}TMB z@bFeIfx%=K=m}AAYDhxSE0xLh%w}?&ucE=u`1uS!aK~-TsmoE{t6YtrY}CgTf8qK@ z?}vq3xT3wAWnnBjoguF>DAnu|06a?DPHB7YV?RC!TH*phtjT(0Uym?) zbidlTv|T|635*fO!coAMXoMZ6kTcQrQLz8>Gynv>Z7Tyai2WF0fXQnY>md3{;h=gk zuNXbn;j|{)=uN+HPv|pF!-Y+aSTcNOph2xMvJnNVM5rmOJS}0ZqezHU5&2*lnqcp_ z6#a$DZ!~JqrA#W58wZpxJ;UiyTLv|qYKB2B1x`B6X1r@s?xRiHCDSomFV$*a#`V&E z^$$m>jnJ6&`D3gyj^U*M%6eKe8c7z8d+?ihBsFRr=XtAlD{ zR6g2FZskSue+q~Qp0yg+YT8hi%#J!KY;n$x+hGRG%wTplT#e@N+g{6x$=J4mcKG7Kdirf{&vHV-aTaRbwJv>biZg= z^RRNTlQe8_XP7d|vxY4T2V}{Fbr~qM{e*Pt7*?r%&nq}Q^@Qdry_Ne_k~V`D4Ennv zAnO21L3=gaiLUgiHIA7HYvP1ixV16na)h&CcA8&}~)N$SoYiX3Y?qB_1MC`5mKE^B4j z;x-<(;{fNNYRl5C(`&5N+w>J2=@w)kdq~1ICC${m~x?XBv%ocGR4w zeZ^t4vredn)oQNsC>~p_om5MFuvTQR-TEQmk&E6~x(`YUuHL(_CI%lu!_Z_^bM@vm z03K%EXEANp;Q@ni9WQ45lKSdgC(4Z@LxX5j$6UxN<{zl2R$%CBm_ zbs5=q)nSza4(EulX*iMIv|TN6^>9-EkXk}G%_smy-OybWK2h|9u9K<{9^ zQ`|NbHu;Jn-{M1kz!WxQB}?cU6hyvq3r|?myYesV#a6k2gO?@ZOUq=OJjfh``brg^ zKn2XX-in?90NzO2hp$73y$B2VM7H6BnTKpZNVB+F{B4(z6{w#ev+vOMqWxqp^j8Dhcp z=ReLC8yi<{y}M%`^*2&eB+zk0tiDehTA$Nqbu7}*!l4Pz>xpx(kgxtPbj7>)8?KLc zEB%K4mEK%#df4GT!cMBU78i?mls0HAyEe>&xAGm zWkuQD2-aR)8W(M7#?k9@d4l{0jv1C>6yk7*`xx=kXMBvUb_IhLP0K z6<0CMo^JFCEy}Znp3f*Z`e3_g2D*XAntE#AxOeI8)V_tM(h0`ew`exF-}$YnWmNWK z98EYUv`C__<2(tsyF&|ci6}q9)%AvBXi?l|Oz&4tJ$@p+)Q8 zS`Mq_EKWmy2#Qmsx~D+ZHA|KDV4#EzxF-7Gt=+SM6lwbFa}uhEg`f&8aq8$?DFmWF1T>Gu(rZg3ih71j=D_ z$Jwh!L2~JwbNLyqxVw%Z3>#ik3W>{O@>W!z^d#eh(YczugMZl$+0>Qt&a=XUMr&Pq z>Pe(RjfzD#v-DN%^M3YG>8Lb$1D# zJXNQy=IEn?t*W<#aQ>*E@HKxvK9TE6wwd)7^*CA~K28yXpVgZ=VVG2?&h;PT7;Q*; z=QZcIauWLpb=K+wY6rfE+BwbfS*xFxplq<_Hl}khOYT3b6gEDDYg6cQIIc!)KP#P{ zr(I&rM3kuIF12pfVih{l8ji)LY$@j_jmjspsm{OnZE?S6sKyPbm%I(><65L6ybc%e zci8$D+MYv?$ZnM_dvc&|^y@A5SO<7JV#f9Wq*oHUr*cJecj6+K)3Fcwbn~NbKr9wml!Fo^WrYxfRBn6$s3uW3kZ#hcJ#L zTx!x1M?Y&{PUf1U_O(#az$GRFGo5*q3UT zE%fhZIX!H2#(Yzv7Mz%2#27%AId@O(WP;->-8Ms=C7oZvAY(B5Xhj<=t#YEY$X`k*PLmF(HjGI@E+tf-N{~5G zn>txNJMN4ess`g2h+y$p-dMQu3JpUZ5R6-ca1XMN!A!l)Y&H1&RG4!2p=!0R&mbzK zwR@;(^XSc5Fro$F_C%u`>7gY;%yn5=fo8~{=Z2Nv^~Eon+>pYWmb@vm0$VYptMK3= zQuW-!Gdx>AN3FMOkX=mMeUuMZWe3LDFV?C)55=7V`CR~UjIdoJt7EOzYI=Ord`ZP8 zuY7G-BlOM6 z>4=||%em5VO9>g`8kds1A#xt+A&X!2uFGxX%#rn7wN^{Gxsmv7r0OI-pG4qBOFXKt zsP6DBYQ;EG#-V40pnqZq=@;Rx!JaL_yGhnQ{K9D(i2JytAZ^!sS?g;>>y-n6LI+gt%GD_MLRfnE%a>Zfn(R{; z5q=<0+Lqdp@{Jg$L(`sqVaM%%aPE?zHg_GgH=}`E;;ou@=!9TPV@qipX}g#ksLSZv zu3D#^hw4@}erWy5UHCml%+uQQ_N=d;V{9>2`fG5R#Y?0X#vt9w;RZr&Im5ScZXC%d z<ICIxF{kpfsDFjG2Bgtg(u zK-MCR4c8(mHVUILya%_i1xOVILGKF;n3?K zviO#P%e=b*{Kj{YIkJH=!K$t27&F}l&x3&GzxUj zqz+fxFAc|Is@+utCt-xHPl*On6(^*%U(V;w7{Us~f_4N5gE6Hp`!I0GAFdu`?VFi=wby{sqFhYL0y2Y8 zTqhH$0fn%KTU8p=Yl%C@nKKwA(W<8L8b!T5vK{rUYv2ZH_9c%LaR^|c%68A@eKvdn zFP~*L*9o;|7ijAdYlh&Y~ zjU2P`t{Bpfd1M7Vt#~}GQHxO>r6iwaMYXVj-a0|*sTZ2dhC><>@w&7O>kG1VtBzY6 z^)HTD%51b#rHc%M=h;E^*#@smSg3c`!i@0sfCd4GXz4fXiG?d7%||?>utNJa41Bmz z@A5WDz6W_`Py26CuZ(KVmr}nwTup~FA4Vu4RMYdDSYMh3KZdMN%$-AZt^(EG+)?p< zx?C!y!>GLL`4%aV7k`(+L<5UVXNFNn?IFw$8AY=v9Qs9e3@02a*`h9mh3t2Nxff}aIlevBOd{D&FA#&ia^yD_jJ-Qc!<78?z4Y&2FMPdEBI zH=v$I3IAbMw_L71(YRIq8yNMYD>ST6I-Z}BgL%`_U_Gpk4RZM_@WOM%MzfZmvkc@H z+e}HLHgFgb??JwJ3N$Je%N;cFwIqm{X+_{i`2w?@7T>Yowk(7-C#6;gb;wkx{QA!q zU9JW308Z$CAL58xr_*5Tg`*kKTZDR$6n^$SBV0ERb?kvMH6> z;!5-AU4|mVXbYrarsC_~%4~0c7UmC5#s3j#^P?_z4G-3e+0?iIZFvcyDMsS{wa>*WG$J z2mwJv1^weLW-UHg9YPB!!r?}^ICZldMQzwwmBlqPdG3(8hOK=+thbF1Bp(rv#&}um zMK%qLn_XU=h+>qo(?(i3|6mLy)W35}8}9+9Dc#u}2^P`oarR`7)SgDVa-VSQOTDQt zg}4gc7Vcd4JzxwGk82M%G^#IM`(u6Ev05IY-kEO?Y3*nB`2TQcy@!NG&gWvBQ(K7l zl8APCENTkIcM1eoV3-)3`(>ybW})fd>T5PVYE5*}9esrnD*wDz{WK!!?38>A47<4n zIBpz5>`rwtyCI03pWs5b=YA$v|WXO~ImNql91F4iD>Gc+RN|Up&8*HIrRpkGRY_ zOCtQLmp2a>4sYCoz;X@&E|qZv*9{n z=x)a2a--JSpqSulyOG6rXMipq|KdR|@}Wc{Kb=ymNIX|G^c$1B{w*q(kxkd|#4wCn zySAQk3_BLw%i=N>O?l7hF%t+=f#~hFL}lv!+HFQfe0i;3caBA+TaYIk41xagMrT%J z3c_7r!f7^}H-_=(SJvGT_8T5tdTCQND(}=dRm*nPR5sYbf!L6ZdIAD{SREJbClcbJD6~ z+ac+Sw9w<@xWYi>#w(1@10@+O&5HrymA-JQ@R_jU11zkV5R{c=(d>3YAe19gjo zS-a%rh6O8jkuP@eS-!ZCF!EMy-n`G}J{Xi+t4@z-yx|8V22wVLz^ZK?A2bg3IW1qj zn6`Q8vMaz)`L!W6iW-Gj+y;p&2BH|aw3qH;9+2FOjEZAS&)6{pO&G*zOkq$Ch)`lA zt1fO)`6AS~dhF>xHdrr%DYw}`wTGAfc3|u`kkYmK1i9h5-X|l_*>P|_=%6rUEH1#2 zO@}lqi7`msRd(J*F4`Pt<-fhW;mo=x2+Wm_y2!5X_jM3>V$dJv391(H>1$q75LczU zn-8i3D14ux=~oBnLOcV^9VFjv5U$U!lVxo~K6iM+KN-vbOv)%ic%D}MZbmt0v3}gG zWnVh#g9V>(7Dm3l`!&2E*p)%pbx4qoDrXvh+poH*!OgV1$E!VFd+JLZQ*J_>i1<`p zQV(W=4PMQ;0cjjV;>)6aX#mR2p)9_X$Bd{`Ml|3O1rc{q;Bta*REp1QO19!{tLWtFcL@)cZmOlMS6;2U!~*10k?VT~ITQo{q66oa!r{DFa8~(3!wGRj%NhMmRgVNPCNp2x#qxf=O@*`wU;aa0 zAR9JD^J2>_rTv1M?J^z{Vgv|xVz5kURI*=hu7{&R8)YnB{2~v;!1U?3VI_f|R2=$N zSr1gB0p0sWus9pA6^hNZ&uMbwd8Iz5X^!XR>)fLL@rC+3bA30x1B9F zh0YG$^e9mY&4uRnLThLWp;iAvTPYM5U-U9B+QYm*%-h5JT$jFNN%qsMT0F!1`q9&i zYN%PaoqACyH8&NH(@whzHMe)_ckx9o^IYCw&*EKanx>xF76Sj`i<>bX^= z#@i^Qs~Z2F*Y-W77bi(it~XkZPlK-*gar?M%oz&G%@s2fe2N?MaHL$H!;~iRs)zI3?rNCt) zmlBuzxKwme-koF!tu0*IxU_TW;G&-Gw4UwccAMR91LmDvwzanR6btR4skpbeSJ>HW zFzlt*O1FnDE3#i`C8;3%bSp)7?Mf+FCcic(1vL1fc%SkVid0naiV8(l6zpEbM17)w z=b@8sHKUYn-P)y@yCz*iu}5g_Zo7%bT5nQD(sZYb`n=x;=*vDpUuG!2Y$Nbxa?y`s zp;Ir50*)ek!Rx--rxMq-?aWz7rF$^)4}3QOM6d?@>CXu#X?(XZrEU^4N`eW34oNh0F zuTW~CH=WH%x5NOUSb4$WdBGlBCRDxz!aKd&z3N*hJYRW%3yiP#s<85cUB4uv=-p6i zD^_0WX)6?pm0#;tjrx7bD}Je?)KcJ$T3x%gtMWxUy;g}$Bnk^_)muHQ!D8iQ7+ zc2&MYJ6{0g&SshxsJ#Z_7rfdptSPk=dpn!EDqk}&zCixpQjV_5?~o(;DOP^h5c@45 zc1>t5D7mZhEpYog&Fz~DLj7ja7=uD*rv|o3wJCud-)db0f2`%Qj>~#38@P0Gxr$2{ zmm-&|xm?3#6PHhLxmFj0>01udx2$%1C{|vzH{bL(-=xKF+H0kV4J3F&n_v=UXat&k zuwL=bzhap9wm*E^9)8aseh)Of!o}{sZMb>Gu73Y}t8kvc7wW2BG%S-RT7n@3#IFOG0;V>9TwycmJNtpTnkV|HsMiUy5c7vNzi8rgN=SE0DfXEEnvy zQ{9G|)osJ=#oc*Z>+-&op|%$T#Xqgj(I$xv^Mgkk6X-C^xS~ zen_k+Mdg}`Ws$ewe;NE~Y!HhYA(;)o%)PGkZ?pGq@e3Q&ROO}a;^G%vs+o)+OQBN; z!%RxJ#qZjrDHmTXh)@=PRsVa3f3-vXCY{Hw#V-jh_6U8Fo3;x6njZt^pXi+)C@S5k zqEc|mO2@tgDyUis&P=LEeJtof9r#rS#K7`0oz|^iZN68>Mzo@3#C6D)w++^}+i$W5 z=wl#ff=cD4rys-Ipx-d3=eMkl{a$}g**5)NYh;^H@Sxp*JEepTxsl`Q4y=&ta9 z>?uNw(RZoKFlaFb+&AC6P?zDP%4hwejiq)dhORi(bUFzw-`KVIyD~kE=y&Lm`V$I?^cZqHGJ$hj%^~@MJO8+YcP>k?b(xW|{GGsa>k$OZk zO~tLWz4#|KGJoPD^Cv1KTe#Z>ga_5|*Vd^&Chs2`QT?%zT1BI@UYfY_k`ckLbtkEb z_FsI*u<$O$-qB@w*!uM@Tp&ahk8i9!E36QY3hT_DDuxiG#9|Y5*`-ZwbuEceUKJ{r z#2&@PH8i($6W8S*8sPj$d>%KzmTuBZNUnIC>`OPT4Z_-SsQzSn`{GL3gR7$mWkrz2->cJ~#es{WHBr zka*irFMi>SJjloNeS6}xaekcntzPpN@J$I+@s!<#(kq{WV|n~|nAMsUc*To5ojR8P z$Y=%0S-g0M-bmufHjy7#hEPRXLfB%L5o)gtM-4CBwGce;zm(MiRncZ$!a zw>`zZGV8~h`3vRLD=LyMQcme2HDhi55Wf2f z(9)ceO$q72@|f;f`jK8QV-FRVuR)X=YhGi}Eni~~yZvFe;l%|lWw6MWck6QTkTKph zcHQl=aJdw9^KuE@Y@nK~S$d!Q#jgX9^pmT*UzXS_c6mF){_}|cJZ>F%$FA>lUHrNv zW3fx^E+Md%-q&UE>+*3(T7HDf<7U(KcbGfzTEQxk6$iqXU1BV+H=en8UvYW8^>Mv2 z%lyTDwBKPzh)kFD5*aF|oC#83K=I~&T3XMg+d95}BcdS2l2KC|YZu9Fu1$!$UDp!p z@|e>`XP|U9^G4W^sR*uw_6sq-Uw}QC;x|&@rfkaHHtecPgI!$yDz$b5G0g9XmxCBwZ8XcSrzzB# z^V;I8MjBXv9-OjDbix>A&HCNHA z_)-_yNra1bKa|%KAJ@`8I&ty7X2867UweQ}%r?3@T;1gIfIAx+4M^|W_D#j*pEirh zezrk<>a0GQ+2aOtuj&+LdX4pa>F@hU7?pwXmw(2Cey|pn&7JihB`N%B`F;jAlgIAj z#cQHqx_AwM6!VxMz};P&l${Fsh1!?tGBbg2vEaQftTjut6W2zzutKYfs;&(t3+qEip|EkY z{yGbr?RB??U+Rh~%u>`9r+SmUERkG-bS~O0UY49N%W<}q)l1FoEzQpd!e|OK$!zLe zE2v>T@roD{Z^C$@BeZnOm+01``gW2>WomBj4Hg{INV%c6bQ4YP7WEcHy&C_m*00KY z=CBpkXIFjv!pe(2)Mp{=4Y8#fU8B&BAW>^-)_#R#rN|>{h77wFw=0BHT-?>!jVIIG zxlsee4}H;3JGiL4Yn_z6-=jctA#~~wdaAr9JG@(Cr1r4e{qAMmX|NRfl$DFvkTHg} zdvUD8=*@pcu||^Lu|6*IQ@r?8C#1-a&n30;Lx@Ypo8m9vkE>!zl4Td41xI@rmW$6) zi+-#xdz5Q!XeToRuEAHFGqf~s)&s-m1@E+m7w@El%Rf?8%Re$X@uRiroQGOjyr=t8 z^Bzqaf0h3U*Nd(6vejz&i4l%s)B^oG!Yp3ucZ3X{+$;S~>Xm*c@k&YRuo4pIo;UGM zd4r@?Q#X=B=6;!e70g%vj_icB=GT4)AJ@_u>e?eE zz&r-Euh(cfR}6xBl06E?m6nyD$7<*FQb6|6i>6!++TP+h2eE-`qWW-(%B1{y%?b z>$cqw|M@e&G5;S1Ui+`VHF5L*{^Y-S^HYmo`~3g=fBX;6z4^s|{ZFs^%GEbb|KY#; z`+xfT|N2*N{9pc!BB2`jPP*0I+R;>0j9XgrW&Nt#<*r3Jq0nZz6}8mWp?MSiS_Tpn z<<%g)FK?_(Wf$LH+ad0F)!rBmztY|zd91mj4zX7U@sd})f^N&Rp_-k?wV{m}0R3O+ z>}Vk+{%vXs8&A%aO9#fEEzQhM&y;89b-V(!y!g%5QYbzR&`%309xk+rx{FWiZE^9H zo{sfJ=4XmG+E1r7TkI)rwHrD-!etWj@L|W3D=vPwQ;_qMphMKu)Y;RyuA|KauF7}P zWB2zLU$@@B4h6kw&5KC==}6-X=G}wG*_Ot_lHI3&Ydr%2W58y8ZT%J)?VW+jZxyyURQ8xU<+a+`QrB)a1z2$eHrk zzUi@YlSrwjWkW|{b4PKevumQKr69GdNeP5h()!+56QI`?cqhnaOrTTOt+@auBDS* zOOI+=No9FZnXMg~@!>yA35f-@Q~5eg>`i{O~htwR8q z>?y33Ak`y(%Fxr+(;{MI%1x6%Ym~K3bVJlol(OLTxIobYkLpC_Wvoh7r0%J7XIIA> zv89SjbSs&nboiab@-nR;Gfe1Px`0^I+5;iIu(7blyQLy3ph+6JFUdrXJ-?>@uPs*o zf-#bqY7-2|&i61(y1NU)wq}D6Xw5xBwKz@FMS??8lSG1lo$3uSK=`JkMe=j&x{h|` z(G1>e(!@fJ)J{u537R^-`Uf0OHt%)q<<=;7=u?JQ^t_ctih7ju;_Q98|}{c%m<#3k$LpBj63WPbGQWz`om zYw3cJxIsqP#!hjCXf^&Bc~pMDkXL@-vgHRD+oF~q=>IJp>vVPI@Smk0z?+qq2b#it z4FIi<-X-9x=FtK;5ul=(KV$$G|3uQW8+IoKv-ECfr=}Q|j#ou9gu8THVaY$oSrUu= zSfCk~{iPH6UmD@QClk}&iNoGQ_DhyAUA2rNSo&+ry4<9n;&PkWV3j{BbcwE({z`Aj zB|)&U z~nx9Po!P?l}Hm4E>O0gpyYQkQHGr%W$vo)c4- zNmBJ*bFE*ucVD+h&9Hu*p4()n?it0(UxQ%HazU%hy%NNKO`7DH-ThUer+d8&cEb*{ zz&<=%_cVo_(C@+Wd@3KZM5`Bvrq7%y&!(?~maJ&hZ6pf2n!+|J*f(1qnJ=fAvUT`7 z7cef)mhQBU2<$h`HHFj1X3LWIvd$&)OT*)n<)QhJ$(fV$quWYK8ZDP5rbkC6O7nVC z8XcJ`ohp|`CQnHsO)t!;A%F3?>8bKu>HPTo+0xj^g^BSqXXi_EBhRSHIm@7x)N0g} z)@!{@0eLtvGFl!how^`DVA2G0xpd53Dl^jC6`2&qgesLXk7#KVR*w0+iXXtOdtklg z?cjcSSLLgJTa5VYWW;}BNIG<6V*GO>^Ku9dOwUe^%*)PgLcU=T+|U$$F&X=TXGhC3 zK0M1I6wY^6C^tKZ_;=9V~TVvinZiG1wS~xo2V2 z%ZROtq{Pc2MCLA+?-2xA0kuKAr3VqY7Tvr?JC%2fixvCd<)N+$@fKttu0_S`ZPJ6~ zeh7bg0L!ym2Am8lEv}M%gY9O1b~AFuY*xjB87EsWcG3pRua6qkem^2ngG^U-3IgaN zj%qHn$f;?Qus1Jstz?#iE?`wu_u>Wd>Dy}bZ6Q`ocWSPR--7sE7MkoR-K*M9fV7>$ zSaJD}xIQYAOMfr|bF;q;D@wpV>WCp6_#CwC}{odB2k`eMU}yc~-1M zkuSl@UCZNEk|?_wd&^JDX2p^%e4=BmEL)8igT>wAHyAEyna;I(r!I)d{cU_Fz!m4% zq-8NDi!wr`WrTLc^1#msmZiGWY2komN>0%|>>{3Y(UZkMG#iEx)07!~{9$qFeY^RQ zZVdAGHSb(pe!e&;CX*T6TpZ-R=E@XGSI-J=p*Kru7nIu5slk=oQ7GP5+=>LEMp@K~ z?e<&Whwb`^T_0DBpiofXHg~Lt=T+(&t##Bz_LBW2O)c-{hD99jDy*}7%|^mHL}W+- zPg^>eh4^K_(*Kord9V}>ub85mBq}I~ma);Uu{?BP7=yzAHg3?Z8EkS}%$R#1G1@Bc zZbC=xRncy$v?(z|xQL`;7^1kXCG+l?CCqFkzCPxRDHb7=aAuE|@m zF~npTU9V#dT@1%>9G8HLG^<1>`R?2FzN2rb8-3CP>Nr< zs??TyKHAZXw$d6CEezdaeK{#AOBC4h7mLeZR4`mu{ST~oEY*L~`qKQle-Mu>7cyeK zEWa!&HSB5KC7O1NV37$SfSC+ai-<1$@>tlS(3#q*1RF8{8ymWHYFvMdxa?+fB#3>7)LJTJc@i%(*@ z@`|WZy?R9{lQ7p)2xx)=gphd zLHzEug|)DOkyaVup^<~W$_Y<>RS95LM9rM8 zE#Zv3Cz0N)2^OuKMO}4vtkp{`+EH%N4^HFqAE9bQNHSNYRh6!8REI_S@pY3SZ>URM z%UZ$tx@Zrr(cO%uvi>#E6a8l*=S{F64qSZKo-1!C4xwPJ92Vw{oW|bxg^soAq8ZYD zu?NW)MKa`~Yx-!t7V?W1{=K@eaf3Qh*dXn@ftkIvJhpFeT9(2Q$ceYJ{O72>;_{C* zabukHm(kId1vgrro0ADSJC7|XGty$aqpmkg^V3;#a{P2@s$3o`kI6i=F%`SKoCKx2 z8Ow`LF_vZn2=V%5P|em}yc1?xymPa9-LzSPb#w9JX8vRqN^6$dv`u2onl;7fkHbZ* zk(M2*cdDehtsN<#@Qo-(UJ8-1?-*fUe5&&0rcn83!wQD<&y0-fXK4EL{P~et1^%ZO zrpC;qQ$Nf^C}E*vwjG!qnJk~5o;_DOwJ@&m_UYN_$EGRGvh>sOS^8r~a^5n?uxjEXqbYDWaqbc0FZ+hm!tXb~2?A*C~`zP*)Z-d95+0vb_-tgZ9CP-~jGa=^ux-1Ec5cHF?n`!CceyWeNtD}w+w0L>`|@Fep0_jv>WxPW&MNJ|LgxFVCIiO(b@d9X{jrFVrh+o!_!@? zyR<{tKhnHM`&8p;HhjZrUdwPf5p9S5dHFs;m+p}5Q{9~9w8LukGlJOQJ*U3KUC$BL z_#Dr5+o9T7`aGwc>DrJJ!l3l0{(CBXvWibyoYES^xQ3ti9|f-r{ z9-2PU4u=(l@S;8!*+vkKUaTJW{}STpIh4ci>k)Dk7~j((y;7llyE8jwZNc zB`Fw=M56`D-a9Pbb^8SNMpe>99u2 z-+<3MjMn-^)$CqL4=TBIU6j1?-xUm8!N3&^T*1H<3|zs$6%1U#z<+iaD7DJ!l@F$4 vF|Yi01p`+wa0LTbFmMF}S1@n|16MF`1p`+wa0LTbFmMF}S1|COCI + + + log4net + + + +

+ Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
+ The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
+
+ Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
+ + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
+ + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/net35-client/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/net35-client/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..e8a0d0eced735ec50b786a8b4d2cf7a707037cc5 GIT binary patch literal 282624 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 z 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 hfvXs}ih-*bxQc + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
+ The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
+
+ Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
+ + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
+ + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..24affb7feeddb42e27ab32c6f3bfe1ff73017acf GIT binary patch literal 286720 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

W*{ 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 SF>o0Jmoab|1OI7a;Qt2$ai(7Y literal 0 HcmV?d00001 diff --git a/DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.xml b/DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.xml new file mode 100644 index 0000000..df56743 --- /dev/null +++ b/DianBiao/packages/log4net.2.0.8/lib/net35-full/log4net.xml @@ -0,0 +1,32464 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..8deb7ddf70decdeb4213acac480d78e2143e08f2 GIT binary patch literal 274944 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%0A@eH?5F@U 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

    D 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

    `f>;>6;K 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 literal 0 HcmV?d00001 diff --git a/DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.xml b/DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.xml new file mode 100644 index 0000000..4a92205 --- /dev/null +++ b/DianBiao/packages/log4net.2.0.8/lib/net40-client/log4net.xml @@ -0,0 +1,32259 @@ + + + + log4net + + + +

    + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..a4af9d6d9d5fde81b95148df0b18ae89b1e52781 GIT binary patch literal 275968 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ℑjV&P(mnfy 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 literal 0 HcmV?d00001 diff --git a/DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.xml b/DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.xml new file mode 100644 index 0000000..df56743 --- /dev/null +++ b/DianBiao/packages/log4net.2.0.8/lib/net40-full/log4net.xml @@ -0,0 +1,32464 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..93fb476ce09698c5b42da2596d74de0cfdbd1c81 GIT binary patch literal 276480 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ǚD6b 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 literal 0 HcmV?d00001 diff --git a/DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.xml b/DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.xml new file mode 100644 index 0000000..df56743 --- /dev/null +++ b/DianBiao/packages/log4net.2.0.8/lib/net45-full/log4net.xml @@ -0,0 +1,32464 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Interface that can be implemented by Appenders that buffer logging data and expose a method. + + + + + Flushes any buffered log data. + + + Appenders that implement the method must do so in a thread-safe manner: it can be called concurrently with + the method. + + Typically this is done by locking on the Appender instance, e.g.: + + + + + + The parameter is only relevant for appenders that process logging events asynchronously, + such as . + + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + Flushes any buffered log data. + + + This implementation doesn't flush anything and always returns true + + True if all logging events were flushed successfully, else false. + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + The fully qualified type of the AppenderSkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns false. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Creates an instance used to connect to the database. + + + This method is called whenever a new IDbConnection is needed (i.e. when a reconnect is necessary). + + The of the object. + The connectionString output from the ResolveConnectionString method. + An instance with a valid connection string. + + + + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + property. + + + ConnectiongStringName is only supported on .NET 2.0 and higher. + + Additional information describing the connection string. + A connection string used to connect to the database. + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Connects to the database. + + + + + Cleanup the existing connection. + + + Calls the IDbConnection's method. + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + Database connection string. + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to reconnect when a connection is lost. + + + + + The fully qualified type of the AdoNetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + The appSettings key from App.Config that contains the connection string. + + + + + The connectionStrings key from App.Config that contains the connection string. + + + This property requires at least .NET 2.0. + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + If this property is not set, the command text is retrieved by invoking + . + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + text color is light + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + The event's logger name is the default value for the category parameter of the Write/Warn method. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + Defaults to %logger + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to a with %logger as the pattern. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + Formats the category parameter sent to the Debug method. + + + + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The appender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges. + See also http://logging.apache.org/log4net/release/faq.html#trouble-EventLog + + + The EventID of the event log entry can be + set using the EventID property () + on the . + + + The Category of the event log entry can be + set using the Category property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The event category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + + The fully qualified type of the EventLogAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The maximum size supported by default. + + + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx + The 32766 documented max size is two bytes shy of 32K (I'm assuming 32766 + may leave space for a two byte null terminator of #0#0). The 32766 max + length is what the .NET 4.0 source code checks for, but this is WRONG! + Strings with a length > 31839 on Windows Vista or higher can CORRUPT + the event log! See: System.Diagnostics.EventLogInternal.InternalWriteEvent() + for the use of the 32766 max size. + + + + + The maximum size supported by a windows operating system that is vista + or newer. + + + See ReportEvent API: + http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx + ReportEvent's lpStrings parameter: + "A pointer to a buffer containing an array of + null-terminated strings that are merged into the message before Event Viewer + displays the string to the user. This parameter must be a valid pointer + (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters." + + Going beyond the size of 31839 will (at some point) corrupt the event log on Windows + Vista or higher! It may succeed for a while...but you will eventually run into the + error: "System.ComponentModel.Win32Exception : A device attached to the system is + not functioning", and the event log will then be corrupt (I was able to corrupt + an event log using a length of 31877 on Windows 7). + + The max size for Windows Vista or higher is documented here: + http://msdn.microsoft.com/en-us/library/xzwc042w(v=vs.100).aspx. + Going over this size may succeed a few times but the buffer will overrun and + eventually corrupt the log (based on testing). + + The maxEventMsgSize size is based on the max buffer size of the lpStrings parameter of the ReportEvent API. + The documented max size for EventLog.WriteEntry for Windows Vista and higher is 31839, but I'm leaving room for a + terminator of #0#0, as we cannot see the source of ReportEvent (though we could use an API monitor to examine the + buffer, given enough time). + + + + + The maximum size that the operating system supports for + a event log message. + + + Used to determine the maximum string length that can be written + to the operating system event log and eventually truncate a string + that exceeds the limits. + + + + + This method determines the maximum event log message size allowed for + the current environment. + + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The EventID of the event log entry will normally be + set using the EventID property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + + + + The Category of the event log entry will normally be + set using the Category property () + on the . + This property provides the fallback value which defaults to 0. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative models only hold a + write lock while the appender is writing a logging event () + or synchronize by using a named system wide Mutex (). + + + All locking strategies have issues and you should seriously consider using a different strategy that + avoids having multiple processes logging to the same file. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checks if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + The fully qualified type of the TextWriterAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + The fully qualified type of the FileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are three built in locking models, , and . + The first locks the file from the start of logging to the end, the + second locks only for the minimal amount of time when logging each message + and the last synchronizes processes using a named system wide Mutex. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Helper method that creates a FileStream under CurrentAppender's SecurityContext. + + + + Typically called during OpenFile or AcquireLock. + + + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + + + + + + + Helper method to close under CurrentAppender's SecurityContext. + + + Does not set to null. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Provides cross-process file locking. + + Ron Grabowski + Steve Wranovsky + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Releases the lock and allows others to acquire a lock. + + + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. + + + + ManagedColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + When configuring the colored console appender, mappings should be + specified to map logging levels to colors. For example: + + + + + + + + + + + + + + + + + + + + + + The Level is the standard log4net logging level while + ForeColor and BackColor are the values of + enumeration. + + + Based on the ColoredConsoleAppender + + + Rick Hobbs + Nicko Cadell + Pavlos Touboulidis + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + and clear the current list of events that have been appended. + + + Use the method to get the current + list of events that have been appended. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Use the method to clear the + current list of events. Note there is a + race-condition when calling and + in pairs, you better use in that case. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + Gets the events that have been logged and clears the list of events. + + The events that have been logged + + + Gets the events that have been logged and clears the list of events. + + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Cleans up all resources used by this appender. + + + + + The fully qualified type of the RollingFileAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Attempts to extract a number from the end of the file name that indicates + the number of the times the file has been rolled over. + + + Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + + + + .1, .2, .3, etc. + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. The default + implementation uses the underlying value of DateTime.Now. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + Value indicating whether to preserve the file name extension when rolling. + + + + + FileName provided in configuration. Used for rolling properly + + + + + A mutex that is used to lock rolling of files. + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the strategy for determining the current date and time. The default + implementation is to use LocalDateTime which internally calls through to DateTime.Now. + DateTime.UtcNow may be used on frameworks newer than .NET 1.0 by specifying + . + + + An implementation of the interface which returns the current date and time. + + + + Gets or sets the used to return the current date and time. + + + There are two built strategies for determining the current date and time, + + and . + + + The default strategy is . + + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to preserve the file name extension when rolling. + + + true if the file name extension should be preserved. + + + + By default file.log is rolled to file.log.yyyy-MM-dd or file.log.curSizeRollBackup. + However, under Windows the new file name will loose any program associations as the + extension is changed. Optionally file.log can be renamed to file.yyyy-MM-dd.log or + file.curSizeRollBackup.log to maintain any program associations. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Implementation of that returns the current time as the coordinated universal time (UTC). + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + trims leading and trailing commas or semicolons + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a comma- or semicolon-delimited list of recipient e-mail addresses + that will be carbon copied (use semicolon on .NET 1.1 and comma for later versions). + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + For .NET 1.1 (System.Web.Mail): A semicolon-delimited list of e-mail addresses. + + + For .NET 2.0 (System.Net.Mail): A comma-delimited list of e-mail addresses. + + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses + that will be blind carbon copied. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + Enable or disable use of SSL when sending e-mail message + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the reply-to e-mail address. + + + This is available on MS .NET 2.0 runtime and higher + + + + + Gets or sets the subject encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + Gets or sets the body encoding to be used. + + + The default encoding is the operating system's current ANSI codepage. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the file extension for the generated files + + + The file extension for the generated files + + + + The file extension for the generated files + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + The fully qualified type of the TelnetAppender class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is the default value for the category parameter + of the Write method. + + + Compact Framework
    + The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
    +
    + Douglas de la Torre + Nicko Cadell + Gert Driesen + Ron Grabowski +
    + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Defaults to %logger + + + + + Flushes any buffered log data. + + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + The category parameter sent to the Trace method. + + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + The fully qualified type of the BasicConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appenders. + + The appenders to use to log all logging events. + + + Initializes the log4net system using the specified appenders. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Initializes the using the specified appenders. + + The repository to configure. + The appenders to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + The fully qualified type of the XmlConfiguratorAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
    + + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + The fully qualified type of the SecurityContextProviderAttribute class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
    + + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. + + + + + The fully qualified type of the XmlConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. + + + + + Initializes a new instance of the class to + watch a specified config file used to configure a repository. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + Release the handles held by the watcher and timer. + + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + The fully qualified type of the CompactRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + The fully qualified type of the DefaultRepositorySelector class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + An evaluator that triggers on an Exception type + + + + This evaluator will trigger if the type of the Exception + passed to + is equal to a Type in . /// + + + Drew Schaeffer + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + The type that causes the trigger to fire. + + + + + Causes subclasses of to cause the trigger to fire. + + + + + Default ctor to allow dynamic creation through a configurator. + + + + + Constructs an evaluator and initializes to trigger on + + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . + + + + Is this the triggering event? + + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false + + + This evaluator will trigger if the Exception Type of the event + passed to + is . + + + + + + The type that triggers this evaluator. + + + + + If true, this evaluator will trigger on subclasses of . + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + The fully qualified type of the LocationInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Gets the stack frames from the stack trace of the caller making the log request + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + The fully qualified type of the LoggerManager class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + Gets or sets the local time the event was logged + + + + Prefer using the setter, since local time can be ambiguous. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Gets or sets the UTC time the event was logged + + + + The TimeStamp is stored in the UTC time zone. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties. Active properties must implement in order to be eligible for fixing. + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the UTC time when the current process started. + + + This is the UTC time when this process started. + + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + + + + + + Gets UTC the time of the logging event. + + + The UTC time of the logging event. + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + constructs a method item for an unknown method. + + + + + constructs a method item from the name of the method. + + + + + + constructs a method item from the name of the method and its parameters. + + + + + + + constructs a method item from a method base by determining the method name and its parameters. + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + + + + Gets the method name of the caller making the logging + request. + + + + + + Gets the method parameters of the caller making + the logging request. + + + The method parameters of the caller making + the logging request + + + + Gets the method parameters of the caller making + the logging request. + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + returns a stack frame item from a stack frame. This + + + + + + + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + An evaluator that triggers after specified number of seconds. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + Robert Sevcik + + + + The default time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The time threshold for triggering in seconds. Zero means it won't trigger at all. + + + + + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + + + + + Create a new evaluator using the time threshold in seconds. + + + + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Create a new evaluator using the specified time threshold in seconds. + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + Create a new evaluator using the specified time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the specified time period + has passed since last check.. + Otherwise it returns false + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + The time threshold in seconds to trigger after + + + The time threshold in seconds to trigger after. + Zero means it won't trigger at all. + + + + This evaluator will trigger if the specified time period + has passed since last check. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Abstract class that provides access to the current HttpContext () that + derived classes need. + + + This class handles the case when HttpContext.Current is null by writing + to the writer. + + Ron Grabowski + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Cache will + be written to the output. + + + + + + Converter for items in the . + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net HttpContext item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. + + + + + + Converter for items in the ASP.Net Cache. + + + + Outputs an item from the . + + + Ron Grabowski + + + + Write the ASP.Net Cache item to the output + + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. + + + Writes out the value of a named property. The property name + should be set in the + property. If no property has been set, all key value pairs from the Session will + be written to the output. + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception or the exception property specified + by the Option value does not exist then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Recognized values for the Option parameter are: + + + + Message + + + Source + + + StackTrace + + + TargetSite + + + HelpLink + + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + The fully qualified type of the NamedPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + Adam Davies + + + + Write the caller stack frames to the output + + + + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + Michael Cromwell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the strack frames to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Returns the Name of the method + + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string + + + + The fully qualified type of the StackTracePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + The fully qualified type of the StackTraceDetailPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + A flexible layout configurable with pattern string that re-evaluates on each call. + + + This class is built on and provides all the + features and capabilities of PatternLayout. PatternLayout is a 'static' class + in that its layout is done once at configuration time. This class will recreate + the layout on each reference. + One important difference between PatternLayout and DynamicPatternLayout is the + treatment of the Header and Footer parameters in the configuration. The Header and Footer + parameters for DynamicPatternLayout must be syntactically in the form of a PatternString, + but should not be marked as type log4net.Util.PatternString. Doing so causes the + pattern to be statically converted at configuration time and causes DynamicPatternLayout + to perform the same as PatternLayout. + Please see for complete documentation. + + <layout type="log4net.Layout.DynamicPatternLayout"> + <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> + </layout> + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + aspnet-cache + + + Used to output all cache items in the case of %aspnet-cache or just one named item if used as %aspnet-cache{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-context + + + Used to output all context items in the case of %aspnet-context or just one named item if used as %aspnet-context{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-request + + + Used to output all request parameters in the case of %aspnet-request or just one named param if used as %aspnet-request{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + aspnet-session + + + Used to output all session items in the case of %aspnet-session or just one named item if used as %aspnet-session{key} + + + This pattern is not available for Compact Framework or Client Profile assemblies. + + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + stacktrace + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktrace{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + + + This pattern is not available for Compact Framework assemblies. + + + + + stacktracedetail + + + Used to output the stack trace of the logging event + The stack trace level specifier may be enclosed + between braces. For example, %stacktracedetail{level}. + If no stack trace level specifier is given then 1 is assumed + + + Output uses the format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + + + This pattern is not available for Compact Framework assemblies. + + + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
    %-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
    %.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
    %20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    %-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
    +
    + + Note about caller location information.
    + The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
    + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
    + + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
    + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + Convenience method for easily formatting the logging event into a string variable. + + + + Creates a new StringWriter instance to store the formatted logging event. + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + + + + Constructs a DynamicPatternLayout using the supplied conversion pattern + + the pattern to use + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + The pattern will be formatted on each get operation. + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + The pattern will be formatted on each get operation. + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + false, because the backing type is an array, which is never thread-safe. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + The fully qualified type of the RemoteLoggingServerPlugin class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The that will own the . + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Collection of internal messages captured during the most + recent configuration process. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The fully qualified type of the LoggerRepositorySkeleton class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + Flushes all configured Appenders that implement . + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed, + or to wait indefinitely. + True if all logging events were flushed successfully, else false. + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Contains a list of internal messages captures during the + last configuration. + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Initialize the repository using the specified appenders + + the appenders to use to log all logging events + + + Configure the repository to route all logging events to the + specified appenders. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + + Initialize the log4net system using the specified appenders + + the appenders to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + The fully qualified type of the Hierarchy class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + The fully qualified type of the XmlHierarchyConfigurator class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + + + + + + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + AppSetting pattern converter + + + + This pattern converter reads appSettings from the application configuration file. + + + If the is specified then that will be used to + lookup a single appSettings value. If no is specified + then all appSettings will be dumped as a list of key value pairs. + + + A typical use is to specify a base directory for log files, e.g. + + + + + ... + + + ]]> + + + + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + The fully qualified type of the DatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an folder path to the output + + + + Write an special path environment folder path to the output writer. + The value of the determines + the name of the variable to output. + should be a value in the enumeration. + + + Ron Grabowski + + + + Write an special path environment folder path to the output + + the writer to write to + null, state is not set + + + Writes the special path environment folder path to the output . + The name of the special path environment folder path to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentFolderPathPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + The fully qualified type of the EnvironmentPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + The fully qualified type of the IdentityPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + The fully qualified type of the RandomStringPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + The fully qualified type of the UserNamePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + The fully qualified type of the UtcDatePatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + The fully qualified type of the ConverterRegistry class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + The fully qualified type of the AppenderAttachedImpl class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. + + + + + + default constructor + + + + + + + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. + + + + This class contains methods for logging at different levels and checks the + properties for determining if those logging levels are enabled in the current + configuration. + + + Simple example of logging messages + + using log4net.Util; + + ILog log = LogManager.GetLogger("application-log"); + + log.InfoExt("Application Start"); + log.DebugExt("This is a debug message"); + + + + + + The fully qualified type of the Logger class. + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is INFO + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is INFO enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is WARN + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is WARN enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is ERROR + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is ERROR enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Log a message object with the level. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (retrieved by invocation of the provided callback) to a + string by invoking the appropriate . + It then proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The lambda expression that gets the object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a message object with the level. //TODO + + Log a message object with the level. + + The logger on which the message is logged. + The message object to log. + + + This method first checks if this logger is FATAL + enabled by reading the value property. + This check happens always and does not depend on the + implementation. If this logger is FATAL enabled, then it converts + the message object (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + The logger on which the message is logged. + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + This class stores its properties in a slot on the named + log4net.Util.LogicalThreadContextProperties. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Nicko Cadell + + + + Flag used to disable this context if we don't have permission to access the CallContext. + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets the call context get data. + + The peroperties dictionary stored in the call context + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + Sets the call context data. + + The properties. + + The method has a + security link demand, therfore we must put the method call in a seperate method + that we can wrap in an exception handler. + + + + + The fully qualified type of the LogicalThreadContextProperties class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Delegate type used for LogicalThreadContextStack's callbacks. + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this thread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.LogicalThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The depth to trim the stack to when this instance is disposed + + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + + + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Formats Prefix, Source, and Message in the same format as the value + sent to Console.Out and Trace.Write. + + + + + + Initializes a new instance of the class. + + + + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Writes log4net internal debug messages to the + standard output stream. + + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The Type that generated this message. + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + The event raised when an internal message has been received. + + + + + The Type that generated the internal message. + + + + + The DateTime stamp of when the internal message was received. + + + + + The UTC DateTime stamp of when the internal message was received. + + + + + A string indicating the severity of the internal message. + + + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " + + + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is processed using the LogLog sub-system by default. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + Ron Grabowski + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Reset the error handler back to its initial disabled state. + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log the very first error + + The error message. + The exception. + The internal error code. + + + Sends the error information to 's Error method. + + + + + + Log an Error + + The error message. + The exception. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + Log an error + + The error message. + + + Invokes if and only if this is the first error or the first error after has been called. + + + + + + The UTC date the error was recorded. + + + + + Flag to indicate if it is the first error + + + + + The message recorded during the first error. + + + + + The exception recorded during the first error. + + + + + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + The date the first error that trigged this error handler occurred, or if it has not been triggered. + + + + + The UTC date the first error that trigged this error handler occured, or if it has not been triggered. + + + + + The message from the first error that trigged this error handler. + + + + + The exception from the first error that trigged this error handler. + + + May be . + + + + + The error code from the first error that trigged this error handler. + + + Defaults to + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + The fully qualified type of the OptionConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + The fully qualified type of the PatternParser class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + appsetting + + + Used to output the value of a specific appSetting key in the application + configuration file. + + + + + date + + + Used to output the current date and time in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Tests two strings for equality, the ignoring case. + + + If the platform permits, culture information is ignored completely (ordinal comparison). + The aim of this method is to provide a fast comparison that deals with null and ignores different casing. + It is not supposed to deal with various, culture-specific habits. + Use it to compare against pure ASCII constants, like keywords etc. + + The one string. + The other string. + true if the strings are equal, false otherwise. + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + The fully qualified type of the SystemInfo class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Get the UTC start time for the current process. + + + + This is the UTC time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + The fully qualified type of the SystemStringFormat class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Each thread will automatically have its instance. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Get the keys stored in the properties. + + + Gets the keys stored in the properties. + + a set of the defined keys + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Characters illegal in XML 1.0 + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + Provides information about the environment the assembly has + been built for. + + + + Version of the assembly + + + Version of the framework targeted + + + Type of framework targeted + + + Does it target a client profile? + + + + Identifies the version and target for this assembly. + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + For .NET Standard 1.3 this class uses + System.Threading.AsyncLocal rather than . + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + The requires a link time + for the + . + If the calling code does not have this permission then this context will be disabled. + It will not store any property values set on it. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Flushes logging events buffered in all configured appenders in the default repository. + + The maximum time in milliseconds to wait for logging events from asycnhronous appenders to be flushed. + True if all logging events were flushed successfully, else false. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Pushes a new context message. + + The new context message string format. + Arguments to be passed into messageFormat. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + var someValue = "ExampleContext" + using(log4net.NDC.PushFormat("NDC_Message {0}", someValue)) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/DianBiao/packages/log4net.2.0.8/lib/netstandard1.3/log4net.dll b/DianBiao/packages/log4net.2.0.8/lib/netstandard1.3/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a66f9b4d98143eb4020898f6eae38f3cc4ab431 GIT binary patch literal 221184 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Π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�hovn;wjc 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%0D?9U0xSJ=g%k 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

    MDDL?3;mM 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%0DZr{3#Gv)^vy3vcfsY=_@up*?>NH!0B_XN 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

    $)vJ$%V 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%0DEad&0jW_IoP6pd3`_^K_YI9T{ zk@^Ty8~CVj9R0y|uxeFX#;pCKpgjpUnKA(xJ2>1Sh|-DYy@}F8cskoCMJE4klzksg zW*^F&;I#>+op>dr<-s&JkQ#rWb%$ae2e=mOP2b`K7MmDo_}?}`%w~oHTiZ)hhHIjB zHOJlD?B~3+{9A1VITDjGfquOyS7Q$m@96d2KLW)G;j6q|`>iWkreB+48#-e3Hzzhs zG)3t}b&e!fZFb43fz;&Ep@<{U+saPmt*u&z3Knt;d?jOUaTPR2HX%WA-*CyXYbwh* zwmmDIQ^XB6{IpMt%oL zL&u)A0M@~_)=T&pX=n7kn*hEJwity(=!5lE?}1fdKZ`hamYW=l!1R-K4i7fz*2*h} zrBbr6mAvVX*kL=GzYL-nuB;;jWB~6rq0nWT0Hg75mw165>N}A{SkzW_41qn(c^LGq zuHoOUuJD{H7s{MOn-ToWxS0rMRApDWgNa-a35Pf@mlY4PyexiuT3*@KmKOW?4wf@i zMVq504XI+tynNVG8KejI_pmKr$s6U>xqzvi9D-y!v*G%_9x%0-&4!&(C|#x4zh3z;5&VwU2*wO3 z*mHk!ihNG&X1qqg(xmmMlviX7TPA+(827D;WjU`mbTE(PJA0I)-H?}2EU?*v`-)s8 z#UFm}dqLg-X(wtyP3?0Sl#A^LO`WPb-U4JHe%(99xdQ~0L*4)fU?q=0Z`t<}ynp%A zv;X`0+5i3V*O#a0Sy$s|r?)8d2-92+epa{PRmZsHK+KNM-Z=>g?RWf_SG<0*35 zNs=bt!d^kvjxl?rot)z8{acZ1OR!?eoot_=Y>yvVke(ADq%ds2d<>z6={;L$_w9;! zP`;V*Ii`!{CHih_ekWnS2 z+)XDMnzeZA=OROWF$d9+r=ip%nwgTnRM*uS%;j3h zLEfUEgn5VW%FCG53{HL@{b?Bn?2>szS+}%;)kx9{Yy+K`4nJ!9Tig| z$RUR>0=R&vgaI1-kq!(+Q+W|pj$>DI0(p(l-Sx+_%de{#FHs_&{Bh!QyUzZsEH_v| z8ZhNw{sDjdb9(m8e^i%;(|U=Yj_;^^g31BW2Lr5ktdkrt4cYbRX`BKQhx$`mL}Xq{bz^8MS&?vpv{Zf+Zk8c?MRE zMW9a_+w8UCdH>~K{$YRl&%cg^gg@kncX+6LwOhK7gXXw(ji$Ahto=vE zAadXv8SpyIwaAG1@H^uHUIp89Q>c0PQ$s>67IzRapl?yeG+OH$;zSzj|ID9SbCCd~ zDiBbF0spG*FvzL)AQH#XsIdfYvAcweoXU!j;H&t+BTg(B9x>gVmm%}b<;m^y%pNAg z+`e(@CRCW6E4SRjzeAY>ITxZ9-;yA(l)qwOAeI4^h4 z9UbJLo^7HyybR_`-_xQOXlt89T2Jw9+*7$1!$X3S+?zJ z&-6LsKJx+2ZKS;&?#5k7$-!-O<4=G2tG`KJ$|0PPtjS^ny@8(>5x}DSWfc?vKHsx; zlI6ldmObQQIWxasK@=Q^en-QeF@A4iPf_AL@q`z%+T>)-%~Nt1+{|80_mRb?1dmF+FZjD)R`)TS0#V z;8U3>AWc|p##>lW;&IFGs9b{2xcv_KA`Hs|-YIAM9-~nOU8`+W_(s8e%?b%Ji6E2} zBI>lWJbZh2soap*(8V^fp4*abIS+~>q061nR^hfGy!wDrRvSH=k|yfwleC$3zJKF= z7hMEV?73)K7D(d9U$kbD-oW;zECVe~U#Gma$Puh9v1<~AA}J_T-%JrfM8<@S5j6cM z=S9FY8BCs=B47UDHcn?j{C*RQ{Jn~JgU1h5!@!337&flK?J1{c;d-}Qp6-Uhs$YR4 zB66c45ap6DctX_Gvhk+#BrO_1HuNFrvBRM*#4clr6w_Xbz3&T=WlYv7B%S_~HjO`0hxD%h&@K3cMfDYZ3 zBSyIrdOd@5npViLDYF#wXcYkuh_^d){2OfS_V^^kV1KlNlH}GV;AyKF6$8%k0WxaI zqnP}h#L-9ZMi@=@{$+Yk9WV;Z*3Q_2wsw1H)vQM@ibd|y{Z7_Coio~84`0?+cyTBD zCCoOJ+o7a+skH%&ZZWAgh`XO6S4p`|qQ7hHkD`kesM%Nni1xkD6l5Jk299yAv$!S( z=!Z}~7gZy_egbA*J-sX!Bf&pGh4P2*=+}lfK}4Eo5qFAsu~+~h`{6tDJI8Xq+qs?} zK-+JejaCw@*I~K>S=)bQ?nme`2UN}fNPYo)2Q*!8m;)}d2(S+BoTX&To-G&a^>bR> zbjO^oqbz^i2fhXXc>xa8)`D)-Q6Q&1_{QyoMP2ivID{xssa)>*+2((6dlu2{hTEu6 zZrKR}9jk0~1@~89edU5OeC+_P!ayqPfdspVRzkrOJG;dE&EL~RRO3ou#2afc8U)_m zBv?ZxSMREhM?j(fbyLiFZ|Deh_DjG~)mR3lt39L)BN^yYTMqb&W8eoeEar!ZfGAn0 zHlt*4C{HIMna3#tqc-YH6!%zZWR`*KlTYoatsiDj{}l)Q$4@_fzgm5t=jV&Xf`SSs zRfi%Tf_gd(C$C?>o^0X2N$t(43SV=s7KMP?z#QjJ0bf_wZ~yHNzy6JSFUo5V1MAr3Ep-_%dYc`up~PakM)e?hp4R9FuZ#(bL;!6(^cvNjH( zQ^jXq_l>^(Ue}YkNm&?pl1qzpEeyB)W)LL+O<0-9DN2wl;USA&tx&cIbp$QlB7!vm zpf;G2@G`(PfKpEVuE-6b?S9;+fWns+hJ08*>a&Yy*Kc3_eDmV$d~){u0{*2NeI}9Q zjN6saxLX{uzTy2SaxnurcEixE;>mfZ5!G2$N0Z_suD1Y$2hQ1L^ahl!TiDF*Gj=`4MGIH;C@H=xqcXDdMe*c#)NB86<<>2ld~GOiv_t zV~H4U=4S{LFn5%t$%;GZaSSWnNRlt$wc2Z8{Jtgd z$w-?xD2Sehg1Qv}?&GABT;RLZI(rF!%*nT22c!P6YUb`j_@lf@p$C4yAQy%bjwBbL z;E^DgfG@Ubr_hgQpZ-)9Jf}wx}-+)E1ck0)5#00C~ViYt7}AZ8~_hxg3?OD zQh~p9Ku6wB5UJ}I^j&EWMYDAdx0r`hC1&Lbfx7Zc_eiUsjFdK{O#b~(XT6g#J*F#tO@qyW34{Zr zhpRY4$^<1d%2Gsi#vxNi$+?n6l;jXm#yaSYfj*az!WRcox+~`GM8XXh0CUcwq^u{y z<&^NTFhafq&(#^9K73YKa2#B#;JoyEg?HqC!Vmhuwv0|9$mYvdM`YNl0o$l?RJ~;B zSNNoZpnXL@5c$Go70V36dP|@?ssDwzL) z;wUmIW)TavnIIWvqGmHI+r|2OV_x!t?~ugEQBEFo+Z0!~+1Ucf0Kx}D>mUDS${h-n z$>iS*eZ}eQwod9u@+3+%Nh{Z24-NU32;g;}D=oLKC)W+-rQUox+OT$)8~|jY5s9iB z3dkb26_<`vPdr_pjfA4V+eW?c=(&0H+&p@29-QY!U0;{;M*a5aziGj&8svWFQUBT? z;CJFnB=}KZ__>(;>%U6=L{&0izcJZB=g5-~lHSL*Q!IDx*eQ@ZOMir6Br{&>d76sN zanLKZ)uANZeQ{=vSjc+hoy;O+B4eS8mAaz;;*6v3>P)ZsUBZm}VG@tVyV8*Z>=GC)ml2d_C{f zIAmfNnN%{t_)GO)scg8zrG#45n&?t0!ci%rD@PeSW7vdc&+;884_KpmLfEI82MYhP zQbzS!3|Qi$*SVFIJgO$6gH`ji&-4NXeUMSP*pYt%pN5927{%`oeqU~6o8mPVTH94j zg#!GqcpGI)L#!YaY<1x;d+dPsj`ogxz7#7NHq_kccsJ-^Hd#V}9C!9yGa>sQYqBi? z$IX>xrj-%iY#6tf!JVj%hD8ts*5(KKAnvnd3}WDg;i~LuA|)!p?QW(95+olGxqAKuf=21to}To#N_Ygfu5|2!+{(*Lz|yR2 zw~lm|25MV^Xd_LGWgU?2#R|IA_-Jfsvvb)4l!kdPi+0&*v2}15mQs}#buFt$SF@B+ zk5t*k(z&OLcw056E0ePSRp$=bgU$g{(^XUS(Q$B=O+5-tuij2?#HZqy42yZRsFo3K z=G-|*<jPVAz^6p~@j#F1n@utQCCKZ#A-9;o{8A#Z-$hVX2n^YAs=jX?ew^WFTd%C^z!ZO?jafya-g~7FMyMnhxkB z%vDDQ`r zTXm_XMwtfdJ***L)4$adC_+$k$0F_(77*eJQuk+P6w}`i6#-L$TfpzyN&7~ z`DGfbBBLc+k<1!tp-(drnGw=@Q5A6NHR-lEa^MZf$GB^hrV)O@ELEv>+)tH)L~;b*Ie2VO#%A> z<46~b+ulBhD}NHqN{vDVY)j{|?zY~O>3}$M7ljUe>!6%3ovhRKCPs%Q(cVs+&R{vE z+0o+k{W;OGPU9GNftUZaQPuQoqt)xza8+K&_G{ki62_cbX87IhWT*BV_28(HHNia) zcrRAzov@p+`(NvJkZ{lC0}+kN76<8HnZFO@s!VoV*fq^IB=qPx#W6ee!D}U?#3Jy$ zbBsA8z8Sh}wfX_~I#uvHt$TJ6hW62Q>rmeoZT3z(IR2Q=$&QjoxTocZuhEKflPV}& zpemq%aFrCl`|Y5hFF#E8&)W(1q|10gKT1OJ=_t^b{B9PD@i=Tb#~2*;T?+_Y!P>fM zS~ZWSE=h|Y%7P}2277P?eZ}1-H>fpP+qs;s(Hf0VMRux_fTVegr7CFa{UzEPb8Oxg z^=T#-iS6A0RgP0LO`k|*cUSaG>CZ7=FL-49Hj2408uzxvq3vM;TX3J?`U2(3k%@aF zipi}|I7vkIQwI;o(#r$V6H#@i4#OMPX1W2~_}%t-jHBEmhg{|A?QX>Q-9CxKnBd@) zc;DU)LfuR3+7ATBOs577>RIn=hHVP~IrypVxrO1m?T%^aQ`_%V{xbR`!fW7Nqh0rM zhLhO6A^BhB*V|;i%u;G^F(d#CF~2g&!C`QjZW7<{XXIpMIW|LUj*@Du$7!7;g7|%! z`tGys8S3H3u+Dw9@fj!Ku0L!%#%CXjaq4G!3f`>I;M>K6{}|kH3c(%E#5~}1jk0AN znivAkToseXU>&jrWR&Z9)azyYX4;vtq;;Ok=O);K(QQLg_WCF{Jn3Dn&nkLA)!*ZZ zDR~hW)B8k++|wb?@j*H~<=L>i35yBq*9Xj+4fglDEH`0ofHGuN`c8oXAw=f~iH$zQ zp+96FuMs8mc(XrecXTBjY_ryl%=HrXd93FYAx5>}qebQ2Lq&<%IU7x3Vn?MG$9KH9 zgzgZFIH8;R`Go?=yXzkjQ2IKxCq)Tz&EvF)aHA0eIfWXzyn!x3pe%w^EpUKa>|Wh~ zz89achcQtEd)ABWc7rXlUZ@99C(6?ML{TvJVpLnJveJN_;Sk9D7+o=7bj6n&Rq+^2 zq2_vwrg&h{6rY3ZoxXQs-u&qzh;vczbU#2WMJ=hBv!zvEOfrW_+zaCSU|R{QkfOS^ z#*;qulaD!|?{`x*LpIw{5wa(0{HRITqvUo7%zUWvA74t`$CnxJ@g>K3eD;wMZfEHB zMdDv){6f0dK;}hHq-IOhi!&&wG$RmKEkhtX(S}4U!Zuleq&c{WYMf<_YqVmx>((Eh z2k=%^3k3;`#SA?HSzgQfp}9!%2t#H=G27gdL)IJaY>!pl)Zk6+!_^6kof4GXH%>z0 zPr?@q)q9gadFMa7q@!KK^pvK|p${w{OKAR?O?~a)`R95w+HMea4m1=@Y48KqODh1~ zFR@8kSpe3XT)HG?tNg8wqF~KCulLUKSk9C_bKS{24{nF2u%sGttyx`NGm`b|Ff|~^ zVd?ivkqK#%NCfu3hB+%?HJGT)djNtg2P9v@Oi;^3ZU#qvV$i*=Qyk1OASd3cg2nv{ugbdN9DL=5g=}A>PWW(~)pafxMG?%Gy$*(l zVE(7W&8QTx?y5`$@UwVZY1`Cz>xVmFxwifXdw^XY_T-r?`W^A}RIqJ;NDz@>W3RHI zCPRJr>W1AXC&Dbt9*1(2<(S2(9mSDE#_)cX&OiFM(}@y_;EdrV=76%nSFU=(@qTmJ zNg^(ybu6gpBYZjd34lCZ-3o^?nzK1XXElXT-9-A_+-8Nb3t0`^FG1Pp;} zYRs?84N$+2Wsuwwb6;fCu&;=>=e04Kpe3u1 zp!hcUmimbzMw|mS04WM`CzauD?1<&B;W*eq*0tOxwicPJ0&`P168 z&duB7(mv5d$*`twBp5>>5ty)AV|ZpdW~kE)Y#6=h72#)(= zXOM_=ldIWIP>8C6@UuwDs8PdX)K9dadNKdoCdveV--1BP_i`c+_%2<`;mK~JrsJ^_ z0PYM|m7~$$6jGS_VcPJ-kd^G2naW@YIJ{d-Vi90uX`)Cc(!%>7qEg?=5hBOIH;;Cn z?**>3{dqnY0A(ac3=-nHb4*@4=8@JnLtVKVRyv*hvJ}c{2cIhk3a2(-0>b`XWa)YN zDiw;RX%1Qw%Z0kFr6hd`E7&)VdM~9&<4U0{$y{7rCyN?r5#%)PLu<~kqdS(*X`OngsS z``Y9%Y`f+jZ)m3>{9iPfI6clXq+!YTw}^xOZD@O~_mIc3mn`|64-F%0w93{!%<%G5 zx>PjXbP_nPLs|u&E`xP2j|v%S4_|u(38pp2dN_K>gdg>4rPO8{k*iC>h%qg_37|@O>Q^vAaEyP zL_)EOoMjkufN-;ik!9EQ%FrP|xfVqx%fg@ohsEG9lG{PUVkMl4ohjC7-NR#X3PhGs z^oWT0pBuQth#_y_1%;Vyx`1j_Tx>9w;BRU?t9hr>RfCNDhtK`_E=#eH$$AwZlO$-L(cy zXrfxs-MbxYn!W^tL>xeXR9HX+ST9Q*$qujQlR3ytn@o_aX}y`nAj4n|;v|}isniz# z5BhTPC3`rvz+dGQp3I9k=MbL?4D$6<30#_pDw>o9($EiV4sO5RD5`&Uam|s`EtMc3%QWuHL>A*(%Dpm#&y^GSsU=Kn!%Q3zha5 zrggHC&h8>~kT+~~I{8JAj7i}d9RC5RUmvFn)>IJ?H1GTB;e)sf_^PTb;6h+asIadw z9H>MYJqTjQ5lJH+$Iz6q#Ci_c9TK>TxGX0DO8e z!Q2jlGY-oZe=gn=gnBxkVu1J@(IrAP6U)@dIHcD|n1A^;d68vkU3eJ>x0GiCBbcRu zNW_E(QK2fcJ0oMtGFM#+@jm4sD0u!dz-Z6PZ2Xf9oyzUq;miLqAt(2Jlmm}8^O`+w zCJiDrJYetecCtZ(8kayqLu$H-!%1~Jy)W%mWe>=DE2_k~6fhP>6{N)G7KoX3hNcHS zFF&d>0fsWmqAOb|IoP{;OAJpXX%q5BKH)oXK7;G^O~1Ik8VnH7bvP7_>sR2gN0tCn zRII$o>JIYdvR0rbPdACa@fz4QASb#Nrd*MH6b%l#B!dXD`4U$v)xjg#wi*fP10tS} zMDBP*?yIjJ$=vv4ZU>cfE0xmMhvgN~FbZE_U@_A?ZNS+<<0`6Oh2niKG|nOCK496g z)Lt$U%e-$%jclua6dg~Rsy@=xqtev!in^(53*m4NsjONUPm6HA5%)iCBHyAPKZ*pS z1y$|_ zeEES#3`IWAqL~cT7s$r;umF5+2c<*^t9@O4i<)$mDhY&8;%b8p{L$1)}rHF*Ace zb9SN6$sVtAYF)|vjm!5?&+x;kerK%D3>lK-wUIyhLX8auX2gQdlng4xl52T`fM4uK zr36o`!Yq>&50+GBkgJ<)`!2|G;igIyzWG0V=@1R1OR-^4VcJBLXkY~7U5g4O=H1OX zxKd7qkzhEvU&-XNr|5CvFUu$o8X%PTi**y@VBQ$rWB2|M2^f zQ2P(Re?;v^)V9AoENcJe4t@2?qa>Z7DZ8WP54{isNo6PIM(Y} zg?Q#XWCyI(O&J`+<#v}94=tfq1NgjRFB(EgpdyGHS<(CA-4(}I8&Wc03KgVr2lO04 zZBCOrkrg*7#?`zFiem&0HM5Dcj1n^dy{VH9)B0TTFF7ZWVL$BH9OM9n5?>Ml{D zw1{Dj9hZOB5+NQ4(s^^JN`zgqm1u~sh z<{nkc1P$5WM&)Q;HUYCfZ8^QR2Iw{mDn%sXtP!0YSIu1awDTQhtpmlI;`;UU<-(=q zshpl%FN*-Nn++w7)4ohYp;CTJ%Sq)yBFdSgINA7U`T~hUeudr=Y!4bV37YL_Gj{a? zSly>mkYNLeAOciu8Ca2=lTf8!;*la`suI*1BTI{12k=@gO)+v_cFLHiXs{`;3e%G` z3nNU6oYPrEd76CV$es+Mm2P1uWvVEbg)#Ark?>+MnsO9nWdtZQ0-Nq4#0OP8v@C%G z0I7QmuL_H*$+~7ZE)RPL)1{ko&)@3&!(}i7U{r>~@ZqRnW=6<232xC{1Y$P=?Be?J z>Wa;2L4uHsqmLxPfXEQ$6H&}-C${5`X-hA&QLNM>J)$1^z)Ze`?z%m%?G^fE?iu2t z?e#0YfllVU_kz7_zF;8xZ_xwhTSlLvI#Dvm7bnzKiBJxQ7(PD_L922`%B2!WC?(Jp z8D0?$mb>ypMk8s>5Dx{g3p{O(xAY@e4pEK#f0A33!#C6fYjqGm%R0G4230;bZ0D9M zK!Csmw~T(hDc4{R0Z%Iihwp-Mx*V0<#` z`Yk^#E)=!syNv`?*HVpLfHX|(9QBaDZ9vEve>cF`u|(%J=5*XdEAewN_w5)#X&_V< zvx@(6&>`0TZkL1q65sEb+JT5klu(BSCR0%e;>)YIxT()%<+3a6-aG4XXFAx% zTNoqQs>ebi8Y2Sg?I()@*Gv)P|Mmt`BoEH72$pe=qW!xx>hWpJc@wnl)~ zXgBl%2585(Gb>sf+Lr+qAfQ^&VqI|hqqPBhSlrEY@=~F(Oq)K(9K%g+wqCE7m5>Ef zvy{TsDn+6i;O3op_~5Ssbylg?`si~FXji1$FQN?OT=7ZFH$@rudziamBg24%^&ne4 z00rcwarN&j|6oT6g{$XE0aSaG#o1dQTH{E)kL;~cqG6$k5S!RA9bCa5y=@g}kZ!4r*QNgfaba}$V==| zxxIlh=t3JPx~7&f>S=t_ zAZOY8QibXhDHbss$YqHNWhki)L&ZGayuF!R{Q2VQ)y1<{FVwwL;?{BX)ee@mA64;6 z!?1=0Qrel;==&xlx5m<*8q<&$x@cnkmU8BbF-q4>zex+JVd+E7l{T&N$`X{KN{oaM9)63&3hn0SrruakY(Chfqr!Z>yCft{cZ8;+W&lWdGxD~ zYk0i=jevT*{*Twc!J&0@zbJj*qFT7B(Z_aDOiSlFw4$;QY|k?jus&lsNE@np0dJ+? z{;V=a9Bw_9Y*$HVc=tVM8mM^wAJZyV3dvv*Gbo=&R`EZH5$Pm11(R@-%a0l#?sCU>4{!7U3VNTs~pye zVw@x-+nY}95{SiUdVz|t>_5}4K1tVh32mqM1SWkyP8Xs&+;{dMa@UvPeE+}v z)i-!n)$Nxmcyret2Uc{;^4BeiE*g@->}~4KR!AVI(nT%iln++ksIvWqN4V!gqPM%p z7H^h9!pll;*fou;j40SiltKoW`^*<)w|V2n`RJ(C7R6yUP0A_%6bQ`oJ7yjL_ij?T ze?LUxw~X*tk|I@VzJDL)GNDNxs|e+QonmG8@6-G+>Q#F$D2Y&3Q7titoiJs>$!=8C zc?kuwbfYGFMR;QinyzjUaA$*johD&ZPxcZ4bs9otX@r;+(s^P0UKU4aeOn(%$%&E@ z>t0rmex9x=U|g*}F^ml6jyN=hw2q9gfsRSu4K8~^1KpK_+rnzyuBX<4&Vk}coa&~7 zaoUY=3ark5%_$$wDo;jFB&>&-Xh`lyk)r@xQ^Cu(Em}*?9vvqmg-kg{Kj~*+a!YmG z6wTFjP==wl($GXerYbYiUSrO`pXLm(;rAE-nqA;MR9mGFYGbGv$h|(>L~)DmlFv7* zwF=-^o&=Q}TRR3$T>@z4j{F(23y>-YxRbD-)TO^huLur+6BwzakK(ml*+KF_p| zibBB=9+!x^pO8gkpP0xyap}sgegw-ehk*N_Qajx}a@0DkCHSi|EfS|m71eP!If-F< zZLsKdxoA~qRm&o9O4zB{9kPT-#fq*<)Y~R=U?EBLcMg;>UL}iPgyi8q*`eW;0DKx|l_S10&D!g-t90u_2_#LxelJ$(o#<8@g5Sl`5VF}-2USLw0>P>u zie_>60}*SSVStXVdlq_Np#La}KZ$LNRMm-u5PFa(r&`LkB^7O>M%KsAJ51n$nbIKw z@?^=&5sF2G@;DAZgejv5s+ZVa*EjtTpXFMCdVmp_;QmPtk9p;%j$OYMKK?L&>f)T7 z)vR(W+C_4klwnR)InJK)zl=$G5?KOTtC`|clo#h^e!1#wiOw{9)_%~VsE{F_RQ57Z z`3plFDmB(zHrAwCSrqx3mazq_6mvNAl|yQ!FlE38Awn{2$a<`{9F>Z}%wsGnP#ck4{b5RB#_6G4gH0HI1sL6poe>?x&eDn=8aBk19Ih#F z(sr1sK}*wSX;1`WS)FT$q?4B08_CgTo!xa2%s+Nke(3EZD?6jC>co@{+R=3NA#ZV7 zHypzRkRYLAY!!l+`1xuNd{MOGP^%bq2vLGz+*;Dgb^ZQ1kAo3iX1Smx6+uaKl+?W5 z0&^H~tp7@=*E+}gQM}$_vQ0Pmck+=<87wQ1W*uR`5r+?P9?znvnj(?-3huN?gL2v* zuB6P+(J8K~lv1eLb=Ml1|1Vfen9>_42`?AD%er_mmcq|K;q>^UJfp@?y^DyAQ8rP5f^trmNb+ zbPG)5)BoSzv-ZYqB>6f2f>1u#29(k6?YFG0gHE<%0k$GoO0qx@1k?=dk*GrPxPRC~VKRrh235 z6rkd0d1NZ=j@1xhYOA*h%&)ReXx0Iga&{7ISszuGqsiRwQ{5e$RAyGv)rS}ciN&T$ z3jK1wra$qW#dBa^B>zR6-9j<2R|jCpU_R9@a+A98Tf_S)`K2kg$XGTcfH-VRO}5?W zG@%I0(ekFZ=7QakVi9-E$h6r8vJ`CUXuWc1I=rghv>U`}?%}f8T0EjQ#I|jbW}d4` zsw#h##3F^mGhbe#M@ZW}O1h$mh{r@S;`+@;w6O^`ckYoLLV?| zWpHl>*#~Hv&xnOz9h`pevq#_K#2xKF?$7V!xRc-FB71&-*YX^APjxb~$eE3;6~#9% z{^<_&myb|bRRzlmor4M)X|h7~VzuTLX1tv%q4>ep^0ZH<^P#n2^lrrsx1*zFVA>84 z(PWAtTX6SS$?lFu{`>c*(&qjC>}~o*ZrMi&;3<;X_dwF=mt@BAIL$q-F?Jottk=&; zA$0q3@EPJ*Ew>IGP-;ZiBGp3NHUhPJLxjb)?$FEr8!ic>OoxE z1d#GjwQ-ViY1^6c^y)AevP9N8LdLJ*w%z&Eim0#Lx$^>4e1u^DI)&aO%7IS*hFI5` zzClsl%dX{gcX2^=sADO4C|SZCZj&btl&~YnlesTf93BxsDr;DwMk336hEDxm<*@|l z2>%zW&op+8X3*&k18tPDuain3^h~nlBC)Jw?s;mY!w8Plp+VZ6PGIowrnYdXXYH?|pjt_fx? zlZ)hYvglh0xbJjB)jI48$Lw9D>CoAa9)p$8Gcpo{sNSD?=$|rZanV!kCgQhHaf!Lte z`2ea|b(xMvW_L%zcbwL}yHUSvBD&gSzlBJrQO=&Vt=eal#OK+Lbi$7QB%& z_;rzje|Ct2K&_}{h;I+6t9QRX=yr&@U;=|c)6ZD3Zi>nKd}UBj(@ThAEE#aQn$o^B z-E9`3-h!nN~C0a`oov>yxXKNGQ{K z=LGv97M~<#oEhZCQ@OWdh(^4;O%d-L?T4NLZ#wAYYF4gc3q`@`e1ifd4ONY(t#q}N z81QKlV#6hP1iln0Y6S-REzy!EdN6FjtJ3Va?oJIx25HSMPZyZsmn_9FJN%zjo~kl1 z*iLn^$nQ)tD*yqtBrlWluv%+&mdNoILXv3mqddc+IZBp!S+0IOI=Z{No80|lk{7o} zS09f)zB&Ej%W`q_J+hkARt}Dvy(f>s9!=3q2!Ej}YQ@=oluA?Y7K|5{;!w{u1mX^+ z{joq4Y74b1WcS>Op*NT7Yt~eTU`iY^7!tx+8j=sxgi$`7t_|LRyE?KdF<8k}M@14B z(>gJ1f2tv22GxK;fvPl{HON@4u5$AN2g+kLQ$Py{AOT_x0khRZ3ZrAQVx zJ2P4}g`J)Mdh-74_368lkC#m;$YLnwv6K$mzfbn8ozH9w;TzCs67INLPPA{ruVh}ZW@CY}XC0CkL>TDGkN{|O}0Wd+!)D*hd z8^5$WK50|%IuOyJTq)EEr|uyXc_0La&*$vd_zY$kJ786Xa%-Yp$@&`9wz1`2b3NlR zy>t!c*e!xiq{0lA;m=e*ueI5W`|b^j4PA9@ft*GLN*u2x!wL%DZ?d>iaGcR9-$_DV zP}#~^vWV{i)VZ3{?gvNcGq+-x+o@RIY5{6h zl7RFJf3ze+#7jL^LO2NQsZbDBd&Zd?yp+q2tLiMGM0u3)qPg`QwjFAeX&mx+-=KbK z!ac%R0c~A{NK$f~PvQgYC#=bAU3}ZLw?duP!&7SUjy1HnYSH`rmRZXPag^_T+5wi` zA*BJ0mEX}11PmvK`IOMzjdQm3OnFjOGyV3VTtE|=1L$g$&GYlRLPPWz~T=21ou_lK0?h-Z?jqL-uOpJozrTGR;qP?C66y_;X7R6Po z%(mV)6bC&wt6PaGZ5NeP1Bi;y=ooK&JVG9)_6<|+G4Qlhpd>2>v`poI^_E}d#hymi zYt&-VhReF`=&8~6tR1;$ebk-JRZdZAk;duhrc_26bxc+;-BBK`x{0D0D14KLp`*Wn z>Qu$yy3P#8>MHZza(5LE-9WgsxSF;LQMqz;365No%;_mw4avUl(z?%7eH)irl9fFH zEMUOv{} zZ?ey6k!RqantY&vJl{ey6?o5f*2B@*PM_k8C=uWU>!4DBXqISmqc)xWE5%&9Q; zT@kNVN&RI&<8a`|60fsm8{1~^vV8N9I5>wkooIN?<)=k{9WUAm#4EHc@%xCrj}(3f z#|%akO^+QgvF0mZMng0sSh+ga_LcyeCD-fQTOe^y?X*f(vOf?zF7S6f%!CbBj;6C^xdKJ~UPyXpc*08ECKIfJ}@lAp? z%b{!Fs{<*0lLH+=!M`iY#NbKdE*jc|lU{Jjopp5d%#m;i5$A)WF=jL#hR_D+BxbX_^f>fH$_;M8luOCql?SEbbvms(H6*ItA@>Exwjw zoU1iy=|f=;JOi9j{=t)E*sQsPQ*?-4L2rZWn*2&thiljOt6i1YKs+P}S8;KhlvvW` zE-yZ{gy=?n7nL{;XwRd;RtuD>k}xhbr;AjQjwG_1bWyJ~zlO9!=)ZvwK)q@F3>XN$ z`|qCe$bqN@Z%~BJP0Hays@yedVg#wa;!#vK1l?PTSbhryYuzF*?Nw|ZhAVT7u4;#% z-l%bhjQo%54AS7Rzb&YfT>TRMbs8@g#&=-aPWRN<8$hq5c`iwzkSoFP_(pYkB7d1- z^T}7Y>_}%_uoN^}pp>o(^;-$cOQ}ldM*bv}PZVdUdls0tfFsOO0n1sZVvgCU;MQ9tF*J^n2y;ha zRO7v~>4Ylsbuk5u%T=gXz_EO<%6?m8y5nJqJjmrMBxg&if%GLwEYjvop{WcVM-T)Q z7e9y;p2t~|uSG!M_eVCQiN~3w9ZXS@9DI- zZInXit>X=WQPC5k!rwjD2XsmTrH(r#S+bYKe`tp2LgA1z%AR4UW~F&jJHJW*g>%So z&ZE^@%q1vZo3vzOQLF~tr-H~+&8Oa5&8L#ykOC{Q_=2=iKMk)J3wRN+;^wJvi|_DJHda=4wSc!j=JXIXH+AJ%8~_0`0ByBVDw zeQfm-azG#3R?tP8`ltc0>HBfqf?Fhgd!SvtzNd4r(U=4H2FEioJr%j3!8w49*)JM# z!x`3|B#3@{kOJ9z<81wc^?e7{9k_)hhCiS|(e#wKGQI$n#&&(LoN_V57?JlzP=%6z zuc5>o*J4$oV}vT17FeKx&{@o-9=IwLWY;KowHwg@>5dosFbC>S{FIdM@ula&@8wX< z_Ap(If{-^+FpV1IJ2#15-=wK2F;))=;A$t-tc*SgH>1)=wHgk(ME3tpi!56 z6&bRe7%U%H_-A;nTOVYA5y;IT?*AaOZ~o76`^Z9 zsD`~HxgF()aV1z8#;@Vdi^PB#3Ed*kKjBU8mOTF}y$bpEI-4D$=4l{@eadq6$`qR{ zUMKW!-$u*s335vAXF5o#x}%{x)sT$+)e8(T!XiopWe+L^&-ccmqgvt_f`+l;54PZ9 z9+5~N0h_!KkGT3DBD zMMX}S(eTW$q{1leS9sFcW=gqD+|~>EQHm0qr7Jgw@J=EX!%0w-#S736?pdTAD$lfM z@Z(?UGKLRGletW!Gl_mylIzevO#QkTgufPnk|y%+P_xf0H|}*RzKGrCqHDP8$s{Pg z@J&mTo;a7sDin0RpXhritBS%@GHfBuvl|KK8m=qyn~DO7v^l&iR#A%PNU+U_79v<% z@HnDf6l*AM45XcM>Aqe?^_^Qs)fs}Wk&POJ z#TanKmOW$oh$=hgZ%^&`duKHup%T02 zD#K0>?h6cj?dVuDGlmPq#>D?x>B804z7i@CyC;(Y)rD`I;x_0Rd-B^(e&Zc<-xgh7 z&e!EEzpKyu^~r5rg6?#esl{P>rXa!{T%A4DwTVsRNksU|>tl!vf}H4Uh-86UPQV0m z=o}Qf#lrIeuAqYjyHAvl#duV}*8uaNKY|;FlJ9}vbw{h*eD_FMyUd}jf(Fkj(u}Ku zNP`=QhXa7Ez%u1M_bv-8m0GpzP@!%Zh9j|<-p;Y0p&Y$M(>sp)6-+MZk~J}e(^xXb z8X64nUSx?R2;UE@7s*S4R}t&U?RpUx<^`iwQx`kW7_hrI2}pdy)E$2m{JbpV>6|dC zEFur6j9W3$D+IS5V+ZxP0=)RqI%K`M%;mp&*;smxm}?m&;PLf1p&gHnx3}|ki`>XP zAMg3NmXEvL0eMUrxU{q$)$3JHkyCwb%(6>NJ%#QLqdhY}L1s2|)5w@rSPiJ_LyLtT z_lET{;@c7k){z}~dx@F9`6p;pv!b+H_tTJLJYZ;kLvqD^wwE%s*m@wJMK}5LF%e05 zYGZI?DuhrW=1$Yx{08x@fa?&BjLl7e*SYkA$JeQFcvpAB#0aajP&)buabsISOEy9l zG$kZG6G4*%q|psG;Dr)AVwrb{tzW9*iLRyq_gG0I`@ssFzzjw!QtHtCT=kNXsEcQ_ zv`jxk8<(3!e9PZK3KjA+)(X;YJ($rQi5*&Y%tl@30_>#y9)_UAF>p6VALK)z77svG z_<-t%;FX~+f11MC#zxseesgm`I}_&3@4g#Lp|5gI*PyP)P5gV>f6BD4x4xPFTL49j zc=!wwG`HucJwI9hc`W?YP175m>-4=}BbTxlc+kh6Y={0Uqz6-y4Pcm^?Sg8xLm!?) z^$lhxxHfs<+-m_ zUeP}4^I#I?)V{&(^wh8WIg;#a5}V$O2&N^TIO zSQvWC-({*El0|lIV*Y4mvz^>#{&vX0pbj3Qc$sIn!b_BTOd>c@7_Q7l*UtH^*#m?u zcz}DDhmzL((P%2o*CeL)5@IhQ_7Y-T2@z6ay5y6$krW)-|IIjG_DtT9$+Ncg!g*LF?5a~rwWhj*x*|LpoM+J06f2t^M#(~8Ih31N{sa5>47cmQ z74eGb>$zidGSM|9f%kd-NkkkAdRG9J3Z_vlz&O&Wb&()@hiQxhyI`qx@TrL#HsG{g z4+A&`nne)LzyC1+riHf>F$AuKjcgIXwrGp)?Z6I;cR45O%u?}wCl!oEPg3W|z1p+J z9+RiHj~MQ=?v6>GK!$lRwg7}b93Q+5?T7f2C;Jeu8sgiAa2c;GeRrNOW?S|_PJJd7 zRQtr-j^3?HGn0IHecH5tw$hVzQKJvArdjkljc>DDl<71&&9gH3(z`Z9mY0>*<~25( zgddz+vt(5yQ&cyV3XTepJdPLf6baTx^o7R36?RQ$*e4f7E_bQ~O|nw(8)jrZk!E&r zBI)lgF6czY+2o;FGj{VXb}f;C-NCVhLn@VoxX`eKNbFqhzUpcok++qNqO#IY^qX>J_rvQn1wT?J?c)?x4#H^hqf`OU|34=!W}}MVU&nkyuYramtdo z_(ATLd>&^~J${DG|0Y?RQf|13}Hg@*Z|xZqus+sA6)Uty})> zTgNZsbt(7i_&l9{%A?bGmO#lAei(lBC&@0+Yp}qQEbwZJLsjBs@;%t$P32vdmTA05 z|BqS_*{yciH4$W~4;D-L#Rpr;!CwSUy(-er7;29yb+pW9aHt_;OQ8qKH$x`DRiYWs zV}fD(uC_#?G+ety)M=BOIiHHjL{eNx(9tsB z!nztL8q^7b;hrZ8WAZ6h%3m5RNtuqW#pl{PPM5_m5~X{{Ybimpo#{5Bm_`gnDezb!fS(&yA}UD-}% zKraz==(<;%CWjw@2}P+Yw-PU`v5IH|KQF#cL(!LNuy*}4_dH}jY>12tsGb~qLi~A% zt!S5Q#(Dv6Y$NbJeM#MyY-LZWa?!dKibyAURxN#tAWB8Ft44JO>a7;kDndaqypsN5 zfV~SDeFal;_dg!j2nV8|Nu89^=yV58g>!4>2p&BZFdR(>S~;9PW?HC>w=0qK5ohaK zc!Fy9h1X-9#QoexzK|jW?FGx|f`#_iy9TCHhr39E-Nl?9I)TO^*;8rTH8mRWUG$Cv z+z<(96wJL(URTe!1Il6DR(Tn0?S3^`==VXq=GK2I{(xbmz1YH4ey^i3omaf5hQUy`p7bg zGl>r9k06caB%aRkRXhjW(LAguf1+I03<{_qTBl|D8SM6WxiW1Ms0V`Fri#9Zx2xb- zS;UIO8;Pp~I%4+%4l-0w$=G0_1JuP7-|E57HCdLwV--R>()? ztxxwLf!TXG0h2E=@Z|Bk{0<#aYe~GZt|e^rbArbEc$&)#ykO zD2huyO=ijwh#*JTi+uVCe`_?z-Cvja5;hH4k#+5gTM!UZ!MsB8({R6@@5cRl{-oWn z=UvoMp%oye`*kcuYbFoTB>{|%OeH=XgL{_?r9YY%kCPLj$LOF}exXnflZwe9Z zZK`3Y>{Kz3VSE+(DsPz6VQtOm@f7`0UPLwL_qHaEeW~v6{vYq z!COJ(?<{aH?b6y=CbhIwJFrjl1qYuCTEUB|CyeI-Up+L!il*}v11#{s#C`@eWMbN$68#pxo5CR!6%y%LEC7D+{5-+y>j@dCvAcr=Zg!jx=42 zFY<(;v+-I8y90?eG|&SVG!DrOyJmJxwMyo37C7!bvsPsm)KFindZIXNMy8PPtrlh1 zsdkCyKVM<5L_cC8;(sIeE z?crVJGGjtI6pW_sT`aT-rRN1;JSWJ_27vYoz{tYL^5WOi$suQT!CrU{k5a)+W!?2{ z7_pATaI##L_jI!rdmq!EI7;I=u(Nd;_9DVQP&>PU*Dj1smt7Z>l0c@f=dkFMTEM;& zO6U)axh4F?bAg7d7o5FL#VUtBQYOF3J4B|^z{$X!RXs2q1!B**yJp-V#pRwSPlb9m zB7ll3Q*qyB$_Pvc>WJ^l#E+9$qzmxqEwAxL-oy}0kI^lM*WjO$`@6irS;RD7B>~qc zqj(6P=q2uJ#6RIUA_pOZ1$ed_0&fJ_2dIJTv?70iUjF>h(03}op8OUU+4BQb0mVFD zFJ|OAl^6%A)n3?tdd|^~Ud;|7^(`ur;n=31F-*RBKFUafmO!i(x9X50mAFaBQ(WAN zgX0sfmao#c*qBC#yEF4%p6})PUY>v5^89mLL?T}%zha=%tLWejfxz^0&_w#PsI)_Cg{M8=`WO8&cWP|<@&u0u-Ek3b=Wl<#mUZ(|7{^O=Ax`bg)Vu<>W(#2SJdZDo;giy zJ5u&e+>t4G;LRt7h$YgBbv9KAzjIF6GyXApG0&jT&dm)Mkw`pkj(sn|o5$#6A)r&V z$(hjC;^g&lhq^8DJJ8nQuQ;o2dF|33M_FLOgSuFju$x*Hx5=gILj@|7n8%SvlLZ%! zEMTT;#P=pKicz~6;2N&RaOmT!+F@QE(HnaX9`WikTO&nSSKHjn-oJL(Y#cQVHTy-A z{1nw;3q6hmSK6@Q7j&PxgJCWJCeh4n1-I^!qyDfvI_`OifzRcxx{UgTs50tr{VZoLO?s&C+vsNJ8JH}GPU1?d>I~} zSVXT=HDl1SiV#C?bY#?JeEfa@!yWt)y~1(N<+z>)0elZo~9u(aYlQ^q>gNlNXY!ks4>I#lMPf*Xu z=~a%ELHcat=z-HMyanzKw~33s;Be$qyRhWo`o=i1&qG;SZ)@-<{xmYHg%VdU_Y_@h z$8Qgq1sOY?;id0~gtb8$U~6byeXEs8+i}b`)^1Cc`|+r}{TvlRtGo5q5&`zuQqrf# z*+Pa9jH3lZIuK&jPk80!(JY_J|NnnbO9KQH00008085)_O6ohD+j6D>003YF02%-Q z0BmVuFK%UYGc_${b!==eY;R{YZe?^XWNd8gy?LBe#nmueeedmidz)c;mhNF@V1{Le zOD{9bfXJXh7zGs(#f8NU!Dz%N*W3m)jx!RYxFIU;xDz#bvKq6gF(xWtj7Cx8l0?TO zPgawd<%vF7^*c+|UAlV^^X7g3_`k>ob5UvaaWzyamuQ-Yn^o+t55B4*RSnZ zv$o@)BaZGk%lYuB-8D6d$r8tr^MzOx(ZzL(zO!86{fW>fBqK2)rU6wQ4104xx=%Kk zI&{}D-9q?Zai>A>-&|xsx#nI>o;o4?ulJ$9>j3XEA@Q2k3TcQGd?rJ@w!Pqq_XqUF z0^S(-4+;3Y*PVLqI{5x&qAb@mBTN{hIJw&`xu>AVlr&`Ro_eMO5mS<8 zig#p1yn**qgb)5c`1|1RgTD{{KKT3K?}NV&{yzBo;O~RK5B~oD^S66|$A~yK)kIWm zd^#fTUayI`48QvJi1>XGhLRmT-hZ#Z9TNt6@BZ$eXRbZ$-NfQc?)lxDPkr%|e>@@j z&{uBkK6rS)6EoXhdE(8d|1kT8={KLZb;GA(9f!Vf?ZA)!@#jCT`r#}2bLahX>(ue? znf9MwJnF4Ob~j%4)H(TGn_ro9!>7l8@n4CzpZoj6zxdgb+pd{^(_4ps^}PERmOlH$ zX}@{$wRJ!Ho2D;%x%A=xah`azutBqXgh*(bJqBMaX<& zVqB+}k0sITDnD|V2r?9i9GLHvvV3KEYc!`73Z!L+;^7=se%W@;uN8Q8G06quNCt2e zCTb3pz;th{!ZfE=2X-B$4JI(AHgX8$gicL&vXG`QMsvpF7s~9kA!i#C65CsV!gOjd zxfqFQ8A|r*h-C$MVk2eyiwP%+#xC$`;NG{yQ!PmQ`XQh87vZZD?KMH#JKu};*X|(U zAo8QHZAA~4K;N>aG!tSa^adl-5Y3NE8|mn_q-Jr!Vy5MQY$dwV(d_buXgZoUwyf#< zvFXeLV5WDHEO)DB?mioE+WnZ}Z1`CRwbbg2BVME=b*&L`cB~37;^n*;5Fh=5;>CdY z#N$3Mc7C6E(Eze=sGvErH1PZZ!0EI=9z`va)0|pxCGvSwcaArNnY5Z#%-6Zn2@|S^ zd`%|Tn8;hEa{@$3n8oL_Il^m*{oo5SpVo^>_b?#21c1bOEU3k_rs~`EYK|L^_h0RDO&V z+m_HwlCD^Gc`9Z>J^VKJJhz)76nX+ygc9OQBBKaGCYR+ltc#Q2YaxAuNkmbn+54kv zX^eqtK?uXWMuMIWK~sBBw@wD4X$;lv4s3knc0Po{<6Ab|=uC+p2Y-Xbjb2nLFNn_uVl=4d}FEf@-u;DyX#5MrjGCRe)Lvs8fJC z38+^9a?I8o(BNjrBB1V_NN%lONNMCjoeoq}-t3074Jxg4IH0P{EI2aG42(i`_zdtd z9?}P6Aa?(kskNii`JD-sKIcvXAmRO&q6+E1iU3Gf;Vc>R*CujW>Vu@o`d}jIgA_-N zIfjl(!HQK;3NKkwDeS9RRh0pF&3uc@>^G2EzD8@5-dWTg`HDd4?MHU8%;?abR;WJC zPLsG{X$m%Tz1SfIf071*Z`Y%cpI48?&nab&tUu(EkhpP?!oSoh89}5(&#*iQGzB8GXA& zOv;6VDR9L+RRv4@Y?f$*T?})vfz7~ zJsE4+eGqGLfI4^k5dJK{Pw7BNG1P<&HDfQ5ZKheZnP%Al$11>B320G(771uofK~}; zQ-C%J7^eW^Bw)M(jF*6n0%RnhT>;u9Agci6*ruVNgB5ltc3ElgVc+4*f?ss^pIS6=??VdB-fr|fb9h(A$X9MAzKL*W< z)O0>-PXsM)&-cy3<&+<#IW>rL`ZCQv7@-GC=mJ#p8uYM7gU@szEHToaG@V1xp?8f4 z*&Zhw;%rOx`SoT2;-;{TYmJ;Vr~3RGMeGitcaeFwNz~mS+PVMVBznJr%}|Kh+F%oj zBIzFH$59ZwhWG*EVD`U2>H(b&ur}eI3ArOj6a5cT2$6mml5WaqAUWuskM6_KkS$nH zsKp3%j(}gI!OS#R`88=XZEb_{9f|s6329m+#yJX{4Y7P%I_4x%)5S^DP3Ls%r@?qy z178S(q9%$z9%)L))@$fBFANxNysvpPNox(XWaz8^|u8-JyV zP^-H?g6x(sFsIo7Hc_+_#SdXyN-)GZjs&3q(f^6jP3L%|!tIJ;yTKUlAyLV^(wPxq zo~PL#!rTt!ugq;f-Mu?XxgpT*i=o8{eIx}JTO~RSa~}(%vvRuoYfL(P0%nZz4DB85 zMkv=j?Cmpl9?^|VR>O&VOhkrZe#P?e;++;t_M7-uS0^T8`$3#&`a`dfc7Fwl6O>ny zb&6Im9N@8;)HDtG3-Wp_mSM4{oWSaU`l*oucp^6LfRKzVl%{>_m1m$-8)+ls&bP$b z+tWtYf}dvhD)x;v;irXcQE=E`dM0=zpfyr%BLc>1Z75g!iJC)L#!%B8a*SBW<8B}@sFg@mLxP3=`;eV!f6_vX5_OJw5)(B|q5*LY?2dVsASTLffw9meviNA6 zov~M8$ussT{5e&2E)$dvpCFa`MEuSHz(neW2nWI^tB8{&pi==lC7??Ix+GwV0+55- z0qAMbi0!~RS!%2ku)M2C`Cwkf6u?eG*lH5$laVb5LkF&$18lW|p~Lww!9J{D=x|O& ztw(wd%m&u1oIi9?*cQ_qD04pzo8&pzBsCk{&@N$&0|H+(hd)AQqlKz3kz1&h4#GK# zf@ewRVECLzs!ex#43vR;82-wqN1}bk9_}NhWIVSly)BH3u<9rlc?TPNBa@I_*r6`iHd@7iN z8COWzXHqSlg$y?BwfKRN%|c}mW09SMEs|CeWt6M~lw^^E1bMCk&6UzOPXXphz<>e_ zus9Nr8=7Qwb1|gz0|0O{0J?H&dQji8CKS4jLjC0H;S-8*3q_bMBQ$b$P>==q?b7s& za|u%V3`4-X0p)tRv7$HWK91!%hllH!E~6V9jSP7la*yYL+yFGm+etjpt8dE%y>EV?0Z7)OEN#IVPcnBRPsQGY& zAnQT5P_c150}Vxt_3|!lWPL)VH2D)Ks>yE7LL>Zy-OQ0*>y+ilB=Q-?VQ$l%b5T=h z*_@eOt`JQBX-4V7J*6?jX_|60Ha3N;#>RTqzJoZkC%)lr7xE-xAvo8S61jk=Q?M#sAVHP-kqb!~&92DH2A9w?eTHuKcDdgH+1ED@16A%0-+4{~y7Z6ZV5}QVoAX#lO!0Ib zv!{?!uIA&Q53Ng>dXJ{#iUThk3@;T1fYp!*El*ei>T9K1$j7km4g&C zh#^cewh`Uir>hMfPT?4f(sd`@-zU6j;!a8kvbV^?!f~lByo2@&=ZeJ>QGdfKXiW5^m3PY0z^SGfSeR@^rgrC4t`aklxYUUW%(i z>95|~^k4wOKSjh1L5gnNTO2CEZRH70(%c`T=MOLl96CaHraaBZDqUs|V%Ky!ebBg0 zI70|n#@6@nIT5+GQJCaM(FTv8V*Y{_O~__=rw)t#@HXe`m%=K&Hwt`Ge->DhJO ziXHPmj*M${^ zX|s97wJ=6)L}wP9iRp2KHJI53i)l+oGilSg2)oRBWAF^@j|gSjLMg!*!^dK8)l6}) z5o2G9Ymgl@rsN?k5>7+dMpeR?eK8G)O?wl5?KiNWxdcrG&9rDKvUDj9!S$pfLTFhk|7iJ=0#j7J@mbu@f7N5nn0;cnku z#BG5X`DqMgwV&Ww+d?=>jr5uJRaDQEMU*nYvi(f9*mHe??W?gy6mkqA%m@r3Q4rt*J4WJio7W}lhYuMMyXu#D*)6w9dsa;xX z$RB1F4{8cWAA?sHVEm{-zRv-{r+8XJQjRmhlM z$dR5JInCcxgWESSo%`JyIn5vE`SM{0?Wv@kGoQDJx3%=b|4H!w7$MI~35HJw{Rjdk z?uhts_4khm|HppxN+cU}WQOs;SiE#Si4&QW&<<~8J=zL78*xph_KUKd(A}mn;%w&! zI<0#wv)1ECrx3U9!EYkJz*>I>jo6BoMH6Pw5B0_5+R4;dy>9oQHZ$Uhe5)*dC*X^f z?OWjn(_rZCSt>V_)xxRi==!TL!(=*o&sDStkzWEZC2>Vu@xpA;Q`k4HR&9!Dv);0M zF>5nzL83O9`2~PJZIU*;cDH+LFW6u@ z-U0q?#GsB7!M_os+AWal#tWpL+^F>A#$ew%8+xb<{SFIl&jZ_^&Ov?LvR!XWZ+PF`S zcBfHh#c7(;M+$~~YTMTII)C>{*|sf?>HNqH?DD$9kN%6g@?Bn=G)|&+XJJ`!_(N#! z5Nf?ur*$50pIH;_Gvin$rSx{2{bCdxXp1*j;O^ zt@e_(LIbQ3id{HCLM3y47#>mi`-Xb^IUkVonVK_=8e(^Z=Wwu|XA8NO$OwC7k?zEH z=`FTikwz_y0le6X6E~*UyhLDKk=9ygYfdpj;~)|zYG3`z)}iI@!Zewm9jMJ>D+fA1 zA&W;9PFil#4tzg&UayA7^u!$HUdp>BY{h%7T4>(>2+ylzkHcA6kM*KP?x!8tJ;7_w zSZ8E9ULV+KSWiEhEfi!TO(`F zl5P89RmO{D+rCHvE|P#v3b086E>VC>B;YayxJ>DV$AHc$0o&}7O55xbvJ@}{4*q@m z38XpaP-{oGd+SaT%^TFd8oP((mRPn>v#0vBmN1LORkFo>=Nj1@JXd!qhOB{*LK8IB zDcJf`5_$%BJpEWB;u$tY_LSb+0&|EQRQzGu{Ix1E{tbFke)`( z?yZK1@id9pxV@#Pd#~sj&w7O94)@mCWRDrn5tw?wvl74xizKa#`&p>k?N(ObZZ*4) zkbA7L87$z)cB{pGi~#mssJU94lu}*ZK9NL145)n~DZmKyr|pYCP6`KP5<%Ha>h^Yw zK9aBsrnG*|Vhc;xPaqfFZER3-cQNiI>r4fD0*c2p*TggKNf32=9B7U=yVsFh(HxiN zOq^)uU1{8wVYp0c!X6-^s6CMz=fANjJ7*(^VWnfR^;}9aOEu9IstM^ivZ6jzryf)N zmd$f?@piTE>1U$$k6cfhSS-G7L`V-V2K#`BD18e1;3eE@f;NLagB6qwgM2eLuzRAX zH<2~D?OM~&7AoG|)CJbLp9Q|Szl5LCJv6_l4{a85z0D-Oog;m8I^_pi!i3qFkS6dp#g{rO18| z9bKSZ?1wzpH&x)7vP->6b%*4jF(96;Dv~V0*uZprJyE0E57WTW{uWMg0vV6Mx63H% z&G|@MQn#9;rEk+fIuoeaKNji|@YZNwux-$C{Bs4}Q&JSBBzIxVK6&O8dL8Ijl@XTD!8 zt%s|*otR{E+2=)QUg_DP*J4c`sR2%kIEe8ir5FT85<*70D+uNU zqfpIwbDpg_F(f* zqNz!Zsrc*&_p#SuqngWK=P{HsXdgFl1G|B^hzJYQ`AgaXI|B4%&S)l0)Rk`vmSnh5 zZdm15Im~ZfIKN36Ws&LaQJJlfnGqR}(|l_H<$g^Pr8-}9suf=qXl;y8jZyTxuXVQf zz_nNFY+FHx-GtRdD_BF@(8*Kvw+L@02lVI7s=K*aD%6`4fE+Wm!CORN`zOs|%vEhl zj?XX#P0KR6gjqE0_81PaO#2Bh_d)#4at8Lj5n6NOy-dB-K8ad6sdqO7+xJ8e1y2Sh zP4{EaXe|5FQeUE8>sGqL#`CE5XV93W(-4#u72N(Vs-Yx9>?e7U&pOf+R*lea56sV< z3(!8Ih09FybKTzj+<)=>Tq!(1x6b!AhiC7`s@XgCwt)9s-`fh_kNe)X+_+qeHvTw$ zIab0WsuCU%fq6K!cKVoKgJ3Z|D$19$_F^sTQNe3jkIG7ZELh2y9`_qeCthHbLX4KV zaAEL!__d#+=EAA`mCtFs?YGNv9>B3&(sI6z75Owoww$j?&{q)jec>&drOX)3nh?&= z7Td>^Tp>#y7jpmi{-kn*a&J5~5j4&No=yMi3tAdeh=*W;i(+Vq5wb2PJ{+%u@$ z2y&i*Ku^;kq}pM-prTQB(Kvawd$#605~+F&@!Jvq7~;33@%LR-@84DQ;C$gev`3Ec z$Wv-QZHWMF@~}>ozG1u=Q}lJr6p3>*JkGPhd8nKypNB#m^Wi(Q3`gp{_!K~ICcSZ= z6|^V8CRKK`Qc>SiO!=Oy(x(*QDG7K|0iKkArxk!4Ka&Dw?*b0OVDB8zB<>aPQ`$|P z97QjiV4{RnR#SkDjc5MTjh;5*B;I+A??x1M&E5gO7N18Mehz+)v!4YB?FX>0wNP^h zY;m)28jo7X`)4|Mr!yYvaNo+%365sY0Z(?gW3vQm;q1WG>P}}+8|MwKaqhuc|L6xB z8qD9U=#}R^XkQPrc&1wLeF3GA8{qTUD4q}X6yH}o{k~-KGlKT;nxrdcp^RqwVtNPO z0@-_ldstR&#N#!Vgqd-dAz5ZNldO-}FJP1Z0hZKkc5k78v6MDduLT2JXwi7PT%M$z zd_co9l7`)ihLWP8aQgp4GImQco>#niUILy|fafIOSp|4jc=HN9&?x%-e$;*u#WU%C zJL{QW_R9du^wqF~%e2bvY{uzFgp?I*e)E5(VD=ADSAU$pl>HCA>`!qopzMDb&K@V4 zZfmBArc8rTZv?W4%lzYL#DfGdFSv}Q7ZLsw8j$`XqRwVsh`N>Z4@s%q ze}NlnoR`R4w_k&}rnzN}X1|V#^JP+vOOnAEy;LmYzKBG}vYaC~y;!r`GZvv^16yiu}#8MfJI4P=M@?c*dyMU&mfy)Kav4tXt7xq-T5Iz zE&T{fjM^s7ab1IMbW35fs^&d1j>M7AUXs8_VlnIrm<_IIG`e91Q! zUm+Fn1I)QYgR!Cg3Od~{Lq7Jai2fxa>NRw}Dm$^4m8icgW&b4wcu86tulUvm^5B{X z-pGM<`BK0Jd=u@2KadSbDA53ZS*YDA$-JdIyL5klRSLw8j>$BbvwnmFU?}Pcc++P4 z{(OccZJK=Y1weBY$l`-0Y17>~R-HP@pAkzNbW#Xcz1utb>fv{IS}JX(qns{30Fat) z@V6(X&*WulP}s|RC&ut2PZ@RB27HO>CVEiC<8QuB`8ajoX3hRF6gJH==)4X;H7qvq zcvy&4k^{zq?J#m&gB28M-VX89Sh*b{Ak}Fl*6FZZruUXGj0>|F#`HqGkG`T6?y)&YjuWA?gz(RKaL@4mhZ5C)1kJ|9TDJ5P>=ECk<}g|Ii2qcP|EYAkA?9FPqV|l3&PzWP zbZ+ZgnB8me<20ZO*gabrM~uX@e}*;^LWlmvxNtq&n+vi3j%$K*70QS?$BE<5V&c9F_HA>~|X4(Sh z*ex#PtGvfT@cfj#uSSTxxBjouIVR$ldn6zj(jqwgeFN*wKxc;#cZxHHtO#w9PvB?l zP%=WJg%p2k_*07?dta2(q#R4}oK!l(^8@%*vpeWUBI5#yRC8!;ZQh+rk%$x%asWV6 z08Ij73J{Y3O99BSKsz75tj~Xo6>uD`fFLY;#&Y{XRMeJCnNTSc5`YDiW4hA?-Qk>u zP%1WsCCvGFMGw>lo;SpHO=Aum91>G9%#;i*0(($qRZej(6ZXnb$bF0=XN&~YDgZhB zRh!qnRT~&FHEFa9=#a4Y(1`3W?n1pp`i1HvCF_IdBnOcKoTo%?J9!P4=e0o;0Nj0x zQvY2G;NtoXt76D?@RAB*^lHj}UEj*j?-#9Tu?C*oVZ;FPZ zD``neS{@INzl7Ml8IKoppZ^&_7is%*Sh}4BBz2L@8406M46X#Gblhj0D5Uh#n^^mQ zKz%Z@zkec!*AMe7Lxo9zsuNHZT85!U4fpgmoGX5-Ewolhbx_0`!*ndKZrDdqC+-!{ zbbd~gdg|IN-rF=;WM->%xtO@=PSx(B;$*LV5ay*k=TH}sbXK6Qt~JK znMkE(q0RJ-*L3QLw81#|sdKXb>_^k7?$3mL4n*E%hA>tm?avIXh-ia#n8*K+-nIWC za6@Kbz@?dX3t&rWFdAzI2eWDHxKOVC1{7Knm2J9NG!?o0UuU^4WOe&3w62yxa@~F# z<0F@IdV6m3CPjUY>-^J@?jWF>rW?wLZm@JBI2EJioTNp|IfW%LqQAz{;`Uge)&5_! zNWfw!?2DHL<>;~?ih|qi;zWz{S4p}f!bcYYd{F|V|*V6ZQ zQMTeu^zrBd4fWf`k)d8M%Ebun^}EKgyV>qd^H0(^nclP&gE0!2VTpP{+k?AIsk4p( z9EV~(78dJtlE!%l>w)j#N#)1OTX?X6;`tCiiaie4DDUC<(TKc;rzU*gjnpr>xqN;U zZRdO8yAbjlt_N~!>UBL(`I+P_9P(=vW>I&ILK29QA|8zku=~rB-In5Qv-`N@xk;RU znSHIX(58Bi?`EMkR!BlYNC#+E&dM%NTCH==fpJ$;j&Cy@eYKTo-xuiz196~2Pz0Hq(C-&?aLCq zP~V67ec&%iMIcqcPGO?2FY_eb`m4Ovwx5S`N^tzBHbOvMktNl5>fVYQ1 zNH&>YAR|%Jw#sa$lqRuN3#`#%aeFd2NVr)S^?q5gozhXTG`RM*Li9q7?2s~Q3nS?i z7#QL>EiDbz{@aj&hTWxlM(*!%tKGPX{#Lu5iM-VgciB-hwfvquY%Uu%UT)jdlMV#S%_L%a`AqkUqBQ=cB%{`dQGW5~A&Xiuis*P=Ww4)7Dtpy-Jf)`Cc{ zPAdsK!DBSrpn(!n9U5cZ=On#%Q4bn4Nu#>OoJ^&oU@}IT3M(-(kP32yjv4)7A|Er- z>4Xt;#Kgl(WrvGm_C~%dDrEbbw#NBXn5G9$!qH1vcekJh`gV}81dJ=Vxtt2o0ylKU zx#se+r@yBxRMJ3Wvl+a7@M)9vj8{<2VOS-jj*Qan7PRiBaOnrb?EY9Ghj8)l#c< z67KAB*{sXjD(bp5AVf!yu0u-uPb7PvlJEa%(tDJW?V@R#H+u7m z`PnL=S(ZkDv&+kop*k|ND-ve5=drS4=#c6vV2U3x7bLUq6#iyZ@)9DiH`d%A+p&LwD816w4ZY=Hn1+? z-CWjU*9W~fXm$hmhq}nHBIguzwvQdkM}iaJ9T8g3(d}cf+b17h-4}vRkkE-C=tK#f z6p_<`lO$lW0!)^GP6Z%GBEyGkYz4Jtw5bX(RRVGfkduJC0^}v2pa2C4C@Mfv0=gBT zTLQWipi2U#C;&NRpN#iIEy2D00&ols56D#C=ZT}MYo)(WKH^Zm_Mg`o_KgB-^qHMCON4M_h8Z-HYP1M$~_1Lya!>w z+sus^7x!Aw)ys5K=+G=FRx^}X&5(e76ks0-n5h6WC176#*jEAw7wzFaQrRmyWxzo& zRQ2;@5SPMc4|jbub(7I#$3>Cm2MO(0x%LO-{|u0|qiMek&U3EPe4~=dw2LwDnDwUn zH|(nOR97Bu8g?a2yAa{S^g;8}JG=R>$swz*k&oNV`Y}*oHCUE=bSKg~L*b-*>n-<0 zg6>lW{U||amO(E7D5=GUSbfaB5`EAN62T}q(?rfd>&A^f7H??F)IjUD^fVh7O42^w^U&Ek#>TEg;_i2p{_h$vqrh`#P_xR4QayI?w2>-|P z=<5Dgu>0hB0J=PzD!OcoR6q3ve)ZxEBvvoa7@US`9=+j{1Kf5BqWPfUJ|sG(Ge>LB z4(%5S?m60zr0RX`F}kMnKef4sGFKZp24_cj=?}lo2934`&!#RZtK@!(Pkt@f&M)W<}%` z`7x(oIjJ7#tYNJfU*L6FAy$a^YNk_&Q$_47b|*m>dgoQuEqimRk(FknZG#sf49&x8 zj(2G`5=#x1+iQ(z=wLpq)&}QM#gQdPZtqM#?lJKCXbQrXOi}I>w8wz(^VW9E8;_#n zH&8qV_+^Ad2$1zb`w?W>rij{olzWz_na^&#q-Y=#zJ=&OUl-r7$Kb#%J_E`i7?2ji zfeJv5ZBjQeoVRk}ymEq57NWSEMZ3TkNC;kMgs?1L88jzCtK}DKoY_GNw{qB@)B+bW z57-A_kG%z-UARJ1bC9^IhPAEMV*N--vviq->t&j~1tmN%iD;S5i&0z{RcpcV32JUx zr#=_&x%4kag|6f>&Jf$~DnWauWPY4UP3cXt?%gHWto~$Rv-)rNExnC<*%4Hwr{n3 z)LbOygJ(HTzH%qjbYS;FuYbZ=el-s*kTzw5 zyl3!4n&+IZWpYgkef?p4*dS}2zkoU_{KbhyC_zzcN{|>Jq5#5!rA!{IHQkfJI9~1t^wdm-cL_-7wY&+YcaELAT5Yg<4LuJ z3SOLGx8j+i*YI|T`UPDK8DGgdcGue6YJ_8k(@0u{5H$EBDRt3Jt4j#;tz{Xbf3YMS%^a&uq1$k zC5LSVh<);?{Qcc1{OyIBZ>5@VNcrrINyb?H3Bbz2P!mtg`sd#B8@SfWTx(KX`*|Lp zOOdG4M*kNDE;AGI(t#1)(Bd3~4jB9Rld!b8wGW0wnRJY=fwFL5@8ySAD8g6?)JOu- zFQDnRrHu`7uC+MSTB4%X@sNJrnTT%{P3(?G;`NbEenaC3Pem@0 z3hLgVUP?p*O78Hm5?w5t|6F|}%z)diO+_YyJ)V&?!)!mV@?s|lOmy=z!@3nW1*7d4>H`e6q zQ(TWa1@}!Hg>;P|UCvI3?bb~T7KMWsA`IJO`NCR#7e}}VBk<0W#)SJ4`k*!v>u1o& zrYLjyCBiS}r$ijhK4e;1U;&6p3<;oe7 zj1e+T(B6>E8&+R=vgXRV*%2^>?9s7jZi7t7$2bqOYut)P~HfK2t z_hfS-tvKWNVI}+ioi|A5_IQ>_#by3O_Mv5dz1p2Oda;g6ciKKusB=2rDwE*7w<{YH zt;zfxeQY-C9EG}nWOm9bPUIxt+XuDF(ILgbeP&~#T@FgRewHWG+sXYK6$Cp$T!4G z-bh8<#4Adfow$)|-Avv{rB~mwrZ?KhVz($6d-Y78vD97G!;sPMEwR#bjS1aeO6(mk zh3(HXz4iZ(2h@RCSZUhJP=72}qg~Tk5uwX2C&irO&_dDTQse{gXIU}l_y{^W8Vt^0 z&c2}xU})tjoXA|{%DE!`3A{1@_04us^Ce}^J}%-)M8?)!NjEg zi9vITwYYEed&daF6*qCVsyL|$he010^0irVvxaa!j8lzEd61n62AqnkR?d&fQYyWS zhaUo=rgIwBxO(|@WRh%WH_Y}_kEg@R`(6$7&%)0uIbSMPeoaj3qP?bUcb!gmhsbiI z_Vdc2K<9cO_P?>8C>3*ZQZ~%xdL`ZTsV-!OZ5jz zIOA{z9lhF!h2MRwXMr6R;WaUn`i;<>-mww7G3Xfll-A(<_cEGR;9mserDX}{qckiC zKvDNQXL``~CC*uXly}Tma5{V~#&N2H&#n&sSP=X}1iJ_>dEhMGc$Lr~^hX%F9%tN} zno1jx^raCY-^Io|-`9lY6IV$t+MiZQ47}MbvH82WpkOw;4-s^%EEo#JcD04e3|tX6 zi0C{10=Sx-b9svY|6yJWwZUUO?sM0%g*lR8j*#2=I5{!3a~{qDt=6=`7wpzi*Teg{4jdWr_b z4SFeK_yiR27e0jJh~vBgkADhaHlFgr0Q)y`u1?3je&P&yPmeywzo$pty|98>JL-q^ zPjWlTP!rPK33I|jv+xBBYCm?*eE&YQ1u`$A7-Kr>v~Wi5e83sXtVSc4VZVX8r)nMz zBIn(?W(a&L_M;W$sgh%3wZaut;ReHnBhLEP;BV*n`#rMaaU>lnB0?24iQ zQl_jrp)>dc?meq|cf|y8)qTEA)&bu$Lu*7#{7@wPV!K)o8k6<;j_2>r62W)IF|9L9 z^A7y99Fmwcp-YdTu1NK`p?rGK&6uwi+GCCz3aDF&|+SujcHnx&fFgZ{5ovZ#+EpIipyp#Nvx4KHpb1{#7 z4)B_n&e80*L+#MnLpxmgA8LnlG@YAS*8X2jo`1X-D*bGkw@)Osnboq*G?&SRuw7hKKR~iu$6~=>Iaxfo|G@E`m4hcQyXL1K-!KgTNZ5 zJv|o>B^^E2+ty3w$_5GyJ`8ZhTs{eJ(fRj#*f-Y1C*Kn^-&6f{0AN8*Wl!UUYMFZD z1<7Vs5@thmB$k$!=cJ=@ZwCIoBIvy#@s^;sbVQe2A6KxgwmOx2LH#Z>r7SuHJ;9_5X8}RrZ%`L95re6x+?!#I8(k2Q4~W-`*KhZM$|*E6WqkkuD$b6;T4 zI4fAK(edGDGSK)mi>Jy`M7-VW)H!&&*Qt9*n`6UIW9+$y2$TqVh<{=a5z@%>+ISDn z1o#j7U)+u}>0W(uU*U%Oik0uHuPBB3ik1IIeTA9_SSRJHbHJCcq&t70@@7DmnhS7L zztRW_5pik1FCkLzPzOq$I@Ixz0Xo!Ck%X%nbjgNer zN;$i8g8kwtRr^Kc;eo)z^^%7x z4^&(WG$FK0NRfhFLKC5AoP6v+o~5$8VmNITI+4P2vN+qJ?_Q+(yo|k(YPt|Lx2!3) zvzoe#^!hai2KD-^JAr73lkIH@M*5!vgTrw%vu*t%YWc;sV62A^3dYJWx18&7yHU(w z#}doA5&d)hzL+7@Ar}%+_ASXv`kLqC^$rMf-T6Vxxbj3XUYhT(JgNDwT5;eKwQu1V z@#CIIgStz*4I0;m3SOhU<`yWQzWcBWo~;IcWO`39ZNQi}8)`ERWAY2qwdpb2*2%@? zJ_|(R8temXN!i>5NV}(I+|w6?CjCZ4dQ5hC!G>6J0G?LMpd5VmA>m-wfY43SqT_3LjX^_# zqwafX8Kwj;%iQRq?5dm z1_hErr$#2Qdtqd1DKeSe+ak$( zA~Mb&BFVpVoK`vKan5_n+|d;>cO1#wF=kDs!N@O&r;TmvjzU>8obN_)56IWB*<18FmrE3ZHqrV_{(9w z={|HO&+MGVaR<>$>xO4az*!1#R>a?Lf_J5ST=Gp@YAgyG@r5@kqp%9Nj6!GBS}yFTXKRE04CEdLX$U$) zE7a?XOx-6Fe!78Jd^`!GQN7~6=w@#pk=DphD^u*4f(IK!SO<)Z-P1hS`5w&mU_%J218H-IJ=m}Z z+v344Kp60KqkF3d+lUgkRD%}qV9aX)rB(8(Dw@k}ue%auaOmO)-7q94cmuEt70j6d z>HGiy9HQgKj14NnmNlW!Ln+ixPUdwm!a|BLTSjQ)?C=#F{NmG;&P=5A8HRut%$7uU zxv`=*={_Fw9&jJTboA6TM&qZZ=^=Fr$PIu{FQR*3(W`IE4J$zB;3W|{aflxoY;0HO z3KuEaC$tct5$?U}*R!QOZGL)SJ?gW~L(1BC0;Rr$IYZ;0}Z;#^r;)7n^r5>H` z^`ml{{0S7+WH)D_5q`oh@0aV8<;W!R8OC95(;d`F*iy~xa)n^}PcurN?#OMLD(3*?mzn8F zy6LzlCSlH-&VYCCy-D}ppU>yQrDRZUD=4>eQjx}seYhkwd*vx|J8M89vg&R6Ah{r$ zB%Y-ckb*A7A*Lltd;ia;JB&Ho7=P;`x{BF7L(lY1;x_7uMNlF%liO0baSJ}naJH%^ zrk+~$a)r9DK?}jTu9V0HM4f_F=>iF=)Q@b?x_nb2koT4~e#Uj059D0K8E#n<$_-+T zo)wMt*WggvYeTGls+E)AoTHNfcQW5-(Uy8(<2vM?vmfdyi#OH(d?anrruvk>bgFVy zZZkX%;0JVLh(UP1i>YqHG|I`=n7L4z2=1d=T= z*ORBs6pWE5S$ER?Jupd5S9DT3kdZ4qBpjDy_8qimIa9QbPt@sjRmPr9ld3~kM(8N+ z;FTmT`*0cAXK)AA$6i9_dG-x@W-%)y4x)dw2k(P!FU6ct`UCbheIkoz0~8VSgA^^; zTO57zS=Vzh!R2z$pbSCx?!yCy^%mKG(|4i*To@h{@O`x$iEbgqL!C1~jEAm@s5J|u z5`E4k5r6L=p3@tWV~hv&cO1c!5UIK6|M@U;10H|35+J{;1Kr8zASQYq0Lwxz%@G>pQRWo!4Ww{Wz_k zEnOO++phBCOv|~9H#OD9oXc_T{|cn2yFeH9m=5TNMBk6Rcs21tZ9EWfdQB*vbnM?9 z!IOdLv{vA#yfhQ%grZv7xN-ybt2Y2CR)d*uO-FGLHexQ#HiWuP5DX=pHJ4a_oQ`UP zm?Gm`8KL9S7#|mj`gZ|u(iYK!3o!*-OUG!RER`GFNMxa2lP;P}W1c~(E$G=QJy#)$ zczxVIu*qB;&vW>RbOI_4Q*KWuvhCe;^CCE#wZZEcIJVtZz!q(AD+62GXDeWvHh3)q z$F)yYK$`NWiouPsH^SFFZ?U&AHs{@ojC~%&60bz~?Cq6uPs}F;?}hL>0xDaSOI2%d z5eycB@oKAtEQje8!&Id(y+W9(45n8EQ0qoDB0zrV=wM5QNCd~f3 za7tQEeO`|fg-J8RyUdd#<5P_4ge9Sa-rjM9!bciwELx1I8R={=IP#7qI1Lrv#qBN9 z#S2aG^~-?jLQQ-femC9>Y4YuywBsl*=`lwIH*ybStYYKt@2m2b{zrpx=*`MLqCNa$ zgq0EXSJFJ;QjuJx_6%Mm;#cySjj!8R;|85~%+CWWO4p#sZ^b=q68bq0dToSn;@HZw zHukkTovsZ{*x8@K4##;-Q$hYJunc+?gB}W}3U>to9J=##R7LkORgM0tAANXKnw;-@ z;Z+Ia@V%$*nfFH>MSrFe`*lZE#g26zNE6PYBF(F1Y0yq>2MPEj-uLloh=T7r*W$a* zrt@qx@SyYW_QbGf--BV#z6Zm1zejos2VvTd!nC#;o<`?&b>!`CjC5}$|86hih3+T0 z*Gm#+UuBXJOwvt0=cnjyp#}!Tag#!RqF%TN_h#aC{s}rNkTl(gkCONETeMt8PWNXD z*k!tJcoAs%tTKXmv~=6oMdV>=j)clWMe6b*(c9`?BnZM+RivBXxfc6YEV%s4_H_L= zsZO^=gt~hh=RYo{vCJJ2yhiq&rfHxRO#6E51}AERcOo>xP|Lmnp(*WrjBDSB8i8Zv zP6O=d(6saMW8Z{54XRk7;vSW20_=g~y79m>ZFI zc!w}jhPpcq>)>WAnopDNE&%B6Q0A1}tZx2AvMd&RNzK-ff zRZ11Q8MFInI6L$X-4#G_uZMVh0Q!Ijy*mJX1reqrA%y51x;GH%O)u#^0q8$H=%*0M zk63+&+e<{$3g)Ff0sB=b3rYn@C3<1tK{y6)Rk9eN1MkFpuHP@|fmD3~pqCbFAvYpD zSo|UgH&z?i%mma1Q4&fQL81VAC@QvtZ^`c?@{974>(&c+2l=-n@=gk!?#L$D<T{AnDr9+%b&&59}y#F6H4)`dwb9DU9cw21?wIy1n@ zQ8Pgl)Y=0AMWpd~{oG2L3-x-y$1lP&p2CqqDj}NhQ_+aN<_gMSn2su3575IYaO{Jp zCpUTZIfx=Yd#lg4OFZ)ITT$=b7H$U=zfd3W@aXSonP!|6D&PFZI3qKDAMdHT#4iiBs^ZB~*p}OO@Zw~v>D(Ei zLzfhbebfT;bwSBM$jC%V=o4W=12IG(GykrYCNc9cG4V>lZ>WANT+i4HXW!-X7!NJm zcOgyv^l`SMyXd=}Pa&X9GARtEMjfUcAtMJ#$}c~*3gw>)mhF_Kqs0gk?4P4+6-S*V zCO%6xD!8xWa_*9GQS%g=CDSEY^q^xvCs8D@nAn3F4Ern31CspB2;YbNCw!jbo79%R zDce73F0>n-^X9$&N6lA|@(<`8d@b~s2)fya z-sQ)=*N1NRp%3`byM5>@KJ;E6`lb)P$A|vYhki;yLCeyEfcDdJveD)@{vKpz+0S@9 zIzKFfNJH@ySxv{Yb}byZ2Nm~-r{XYa-d0f_@l@R16@ut@V3Z#cOMUv2WJ!9j8L~eZ zCfA(su;!(F7M*)~ovVM9zA|ZL=KLO_SuHCIO`82EEeUl}Xv@jeyIJEYp-#*)Q<23rEmY1hWfY-Hdo^JkajMWoYX@Y|@I@H>o9=>~J2zS5aJOc^T($%exGa zpkE;9fib>B%#0C~8e2`=?Oukr(INw!*8mcCk0iiO1u)|j-L%g_L%9hce~Gq$EvRfM_uDho((hg1Bcst~AtZ z_yTNVJ#U07-~(x&j_|><^(O&V+zMKVr=!jo9d|;djY8atrwyVV5Yf8D7e|`XCf^2R z1uscsYAv#=)O_86V(HDG(BbcmpvI~Xcy#AgIJH<|yYor3v>wN{ zY0~Rg4A{Ydb3DLK25j&EyBOelfF~j}s&Kvtp5ezx9Uxl0(Me+~t`cH!$o-l#8HfZ$ zQyznQecdR{1lf{kP}XDkh9=L6amwydQfAe3n6cdqAweAbg>m$af}=TrBO9%PXKonJ zzN6q7TZX5(wv4Fl5;8 zos~S^@xFN6S;^xa@5SStqw;uXn8#g}Jl?r?JnpLG@y_?ll6fdA#fW@_0%mk9Yk$Jf2d?<6ZBI$5SeKyz9Mq z{KTj{ej?0cyOPIG>>ZEoN*+J)etB$H^7x5=hsSm$kDqv7Jhm%&{6r;>7jgvF)lNeQ zw4)NVvl6tc67+-z!Z|-&54wW(M9PylmL_}lf!(fW79fSW^FnKfPa@G7Iwmmmy$E0D zlQ(GX9)oah%`Twd;NZnzHsIQtZuj7QdPPIXJ5Zu{Mh*8W%X99U^O*==1%MmRQkj~3 zr)kBv;nVgB*9999J)gyyFuDqo*8J$=+F0+)BTWs)@KX`olD!NM^{d+$b|aaAm%hQ& zZOwW2mCiYc&+y|b-4P!B5y=C)OCATFiUby!T85uy@5ZOY;1@NVG%D>2h2tPvdqvax z%JQ|>XCmIx>a*x9A@hcw_o2HZv|SIE7DHFTa!Q>SAfF}E?{c1U=rno7GOd|`1xvzX zmbw-Ck%r{(3&^5hFH;xZzzBT2I*6(bVuI~)Z+$Ngqijs)KuOH)ac_|?-l7dYOHsW= zzIdB9_zZ!(MLs^cI`kYegZbSjmR`ztNsZ^c=;>+seMWwtm*3~O9yWOOfRxjvasvjb z8a2!NB9@Y-frnm_XlFc!lSADh-)yM&w5D{eh~3GFX1H-^6=cre1xVB1nF?R zKgmRgL(_I`6Ge%p-S_Hi*>Y^=z+Do(E%nH0F@UnC@!YCy@w|jTb-Yl9re8 z_&~)OrkH4%=-)Y8RW~g*WZ$6S`D1YngpY~Py8{WcJ<$_4+NbgR$A)}K*=V250EiYR z%@U4gRYo&uPeV9bjH9V>=fB{)74H#vJ>uPd0V%%_@je|JZ@5XEapHp;Ws*;bN71s=pAjSrRFVq+%RzJn!*P}I^JkAo}47+fiBpFD`RcmfU zGDc#c7K!TyU)gW87o0CL*#?*U!#y!9Hv*9fo(FjFrAXj%4*%YbmExGM@bOPgq{MID z;yQFQXHb^3Mz#?t;|nid4=T-tnte2O6ZAmS&`%=ro;Tb_*vxfXyQjMCkN|BElS1tK zQ1N|PExrX}K-m2V4kyGrB9U=O&(VfIC$v`1SC=O%dO~vFp2+f})$U2;%8Bro=YEQe zI1O^w2GJRK?2)F_>9EAll!E(NkfHEhjkpp`fG#`qE0TiMT*Sd&sU*LWO7hnVK#sS| z)gnUWF^P8e@lG<{jg(@9MXf29rSl=#q2GkE`;Ef>8=2i33h;&m{8j;e8sh~D2RYJMll`@I7EKH{%m9yAJl z7^hI+FRf1$+I8ofL<527mB$q4f)q4K8s7A2SgQ^GF+#IG>=0_(j?V7+GvE;M-CBz`sbwB_P#`yzw(6f_O}Z$vJ6UNH1ms!e)Ur4iR7 z{^9lbSp2smbZ%^r5)4w@!M~wqjN{DS4bUAYa4q70*~Uwu`>*V-MfcxiHUC|4ksPzZ z@iw7)TiFk<15dA`wR}XC>B(?rMB?-~C>&=Cb=bhNfA~EZdpf}W7c^n)WMcFH075wh zyPdC7PvLxnlpCY&9Uqgf75s4?h>%T!?quGIQMcsx9u||xEjKg7X4waBUT2;h#zt{uxnc z19jrT4M1m`_vi!;onS!fZd{JvW_J^P$GTV3x5eE~-&S`AeK)?vf|VWm7s>CXvibf? zW%e(nUvvSoE^frWa{bwCr-6K#&Mlb2HCKqU{rTmxeQ)ke2rb=%t$il21s6P2sqC9D z`6hc1`IFM^$$s&nvqY$Kr|h;VCcb&6_7mIR#8J@xnzI>4+2a5+stkfM%z0Q3X4y^Bw8O8Kaki;-lUh8zjqQd`+xFwLqs*rM*F2}( zdit~v*a=+kO!of(S0&xHlT!Q%uqxF1<1|gWLXFJdQd`9ewbMwp+~6;Q>@Ii)?rPCK`+OqJMvjla6|ig=-k+$l3-WmnKeGA;R}?x`U6w$1}YN zyb&HV?fXf*X?m@0@@2=W?~P}dTk#bVZ7^tH_syR4V;Mb`j%Py{{og|WL>NarrU&%5 zR~?sCRL5#1L}YW373ir|itxOwov|vStR+9DCx$N~XlpRB>@V?b$8BhX+TWmv4`Iab z8G&s@zx7IqHY?tdbUTkvaaZ0LxjFACIZyO7e9s8yVbGZN7Ec!zBe_axDwGS8fs%6h z@zsS%Ct;!}Z&wp0!Dk!S!}ku-GsNL5xaFC6d&0CjPJZ$U-fftJh!rFyKi7g7eI`mx zeuimnOX==UAX?1X5A|5gnS-=HgFoNLiK9$!Qg{D&f;3|=m6hpv7;AnSPbc5$i3Vm# zwgqP8^9cJ3d}|pZrfFwKf_{^_(+e?DG>uRbD@=>=)NrP^3om}i#NEFlS!rXN^GpN} zfXK@nWVGJb<7B61db4qMHLqxPp2e7Po+;6E8;ju@C*svvxPz8nuujlh08wO5?8LxZ z0Ny>TICs2p6VDw7ix-uW|Ey9>k5|ZapU!o$DcC45>W+%2Jl|B_FFh3MmrU)w`=xt4 z`b~;kO|nv!5F{YpMj~FkoAifbP)(_Q!xvRSB3oS^)0uuNtrjQ*5mgaO7wK$6>&= zRRY#xz;#su+|dHg$AIgr1Z*5FU@HdPR3+es(E{$ofLp2rpwUw`;BHKDYn6b{j27^9 z47jlx6BmyX@DQfBy-L6%qXq09EdU>E+B7RcUP0E%79#-<~{^q`wu*3 zxhw9uQFg^)U&reS4Px0DycbRro5l2Rvm5&+yc=gb_JbPp$N4iFAdlhPSS|4re-rr$ z=K3pWg{x3!IX9!V6@!r%G9C=(%XlREsI=*})vUN%?kaLtqPHgkly2c0Z$72ss|aAwF|-PvKPL%w8l zBAs_voW(XmN5H7o@!ChMYOrIUpe>X3TUhejHL|Bl&my<#kXr$Nnj{n-e9LWr&v-gZ zcb_(h!On|lI35MiUz23}2{A@G6yuFRj5M2p+$>b>c#j9a0X!g`ZV$Av})N-TO|KrnVeP>COvSCcHzT zG3qn)Lb;uw$=5&`rGXlyiPosfpa4w@Kn@e^y$2vS#qR<5-b;6Agh(uOBg9LKehV%9ISezw#8AF^`xB_rJaC{GgiJ;-pVKu+xMhl=EU z38CHO#BOz{hn#5G3{4~FPcT9+m9>FRqXf^J{YUZZ#AbT6U2!Wf+1IB4eG)KT0j4V( z*gHpLkEMO@n6w`c7_(DO`{31t8bjQ_qoSY}%ZO?TjjdA9VgTCWL3;wwJ`dU*fX?xt z(*n?AJZP_`_OZO638WkE$UzdEA4X6P(bhF+bnpC#0KX&v3Vg=?G3tH>qeT^zVuqp_ zA_qta;7Q;@yPOQ>36`|(p1lgA?ee4Tl+kvEqOB%uJN;-oWV9WjXrG~IJ3K11!J;aU zW>0|nC^kZa!{sr}&Vtuo26CI9YBvy0ggdX(m^}j{WcyWI1ktTPR8Tt<6K5MzG3QNC zc9}VU#@<02>`^(zc-whw)_o9=js-eUh}G@$7d5@?OsNx>`7Dn~>KhwC)+Zs+U539l zruto6Aq%7cE1_2wqiR$t7hQ6kj>@7n7&<*-4JH9Gi^`Vf=ZvIIhN?sK7v_`hZc&R@os&?Mu4ucHlPSfdYFT}~3q`PUA zy6H;JcgJ-hK7+c^eP@-NtSZ=GZLgM|Vk?UUK?0HJ*nr^NvSe$T&Ot>SIu)88*_cE`|U_#wJ21%`|0(f>}cm~uMPl&Nj zP}5@e$oo_Zx_hRVS4FdwV&=~cg3Y&oK)NlG>r|{TB_@kEUUx6`@Wn=Hwl#6tY;VM7 z>)xso#AU0^pAc-a*hU`l`9V$A2-w{}Dr<3u-{KmgvUx=-n^*Ccy=_}ly|&e^yFc(K z8NF$(@|u?W7oYI|8!b!i?fOY%&7s`37Ixfk36af~>L9|#8CqcT3eA%~1#$jM+PN*K z_;zk88dwE2*01aMkE!j;w$v%Jcwi*`Q{M%|Bt)x4vecf9^Tt`_pZv; zsho<7&cd?Kr;}W3(3Kib%Ni zP~Tvu)8&^-;=Xt#m4!!35g(nC6y*w!WY0JNtk#ky=M;EjlRZ@@a)h7!_@>@_t%YxF z)J#2)&_f0FbJ5!FVOcI(@lM#TX`DG-wAx{|kJTd}pB(`K$9QsGv^ryt_2hBU>P&E) zC)-8qG&zl!j=$uhb%F2&Lm>mZXvKWwY7mn-U9=KHbkTYOO+FBmE?Oy|rt?rvp8F1^ zB^8Qx?}=yoXPs`vNk600DNihEp_Jt9$-!4c!Q`J6Uxa^FX96eZd4v*K{#k!ym7SSQ z9~+8F>f*;yQ(e4^A~@kE?0NmOV&**lSuyW`{#mp0=-GMl`e!|nII};#X#zs0r^Iym zgT7CRmC8S>Y!S&y$;fOj_V>@a!jsoOtCRD(vD%~d4TXQ!9}EAiQY@&n^;B9esYv5A zJKXZm`U@ugv)U42`Db;KYx!q2kb+T)Lr(v!KNfROD%K}{$v>+|sr<82fl4f#62W!R zk+OR>%k|Gn)KiyUr%;pMQb)LGDq>@%$mGP6CJ27@-XRUm1@5jL3Fcf@xq3dXF)5nGp@{v zTqWn2qTfy6#yU@b|Ez~&8q`^UGvRTO5g}jrZIx$8NnB$*y7DZzs%9iV&b*7M! znHCa}mSk4?XPqgAo>&`V$F;@zWGi*e#_-9!b2drKk)nzov=|F$@qr2#vKJ3i-`%kA%s&~NHb_Tx8o4!0~O zQds-*o2q<|-kIfl6fp?jqw_r9?0fV?2R)}XIqbn4ie`A^r$rr7kJ`b?MXD+%p~IY0 z3|d%o<1l2Ny2rM5j!iqvXz)x^PTBU?L5`ABuI#IgEM63k5%}yKfO$ePJL$Jt1>nnk zPK(wMH$N+A0ynpznSHT`J{>cA0nlicMM044NQv`Em5*MA$bF|`F&6Hkw3+MCNy!n^ zX~YxL_D)mAX6)}!l~H&&V*!MlddhJ)gQ@c)#ccR^aXw>{z!G~CbAic6C}Wp-=;X|A zEejTLp<(!zi+He*t26Yd=XB(8;vfy(`<0PaEQFP&SR0}+7iXJB{E>S3Ro`bbTORD+>Lw; z)E4WViy<7Q>)adHDL2eM-bKnfm#UmgC91_LV6o_A=x!$>q z3kN@U;>UH%sF{|LwEYYM`a&{oF{FJ_^}7l-Vj2qx*>%zP#}zbwP|89ZtFIg8Kkh(Z zrGSllaO2HF8Ag;=Ukl@mof(LGPxQnrS`h7IWYA#wq8WDqIqN{&ybf{mQYTIXywpE~ z-nx54fkqe-PwPdkGwm^wI}9x|iXfOsw{N*SB_;0}zuP138Gn=lDtPSYsPff)cXW-M z<9bWMfHzapYnTA%HfMp?A&57T2`z3%^kM}1tu-#ih@4pW1{M3Z%Na{6GI4nZVKl3l zDddc?zq01(E=~A^G+fOeMJ)_u&BZU2oePHR)g0=>bM-t3IoazR$PLdu!g@a7phC>zc z9lJp0P88#NX^}%l8V_jX(C1z;&^&AnG)GB&8@o}McIxJ*l~NzmFI`K`t&6e#ij%5i zvLjCKA91Xm;~9)NHap_<{t?I7IiAIcUvWjY*BquE3p zz*pld&uqu{H57b0aHMN34RRmisBtu>RfzQzvJV;BjTiiMt&^NsrADSzGJqoP(yZI1 zG?BFX1QflgD0+B5d=8e?@^_8=UF)zVQGeV^=Z4?ICc6k9XtoAx3%o`P&FaYz^BS9R z8}Pk+ld%%Rg+sd3p9QgDcxGM+l&VkR!fqN7j|3Uxd)jw^p z?W@(KXN>6{`5g!9S~B78I+2v8y@`{Q-K|k+1$v>mD1JYEKaHOaXhoBnh2P9)hP z1pzHHMOV||hjVA?YHm7&RZOzyy66k|0je8eD{x>l-owfIWLiTL0XTaX`^oOwa(Q?Y z%mge7B-|_SvyeM&FAs1OQ@2NL;oL?8O0v9o2>W3it68niR2Hy~v!suP942Ujf3Z=z z{Y?g*Rr)RZx=7&&b_29JH{SHH+*?<9tQfiV3mQqBwKqPbb}V*BiaoVuVRzWGyZvE0 zok@wq9uQ}!QW#etUzJ#X0uef077IB*_(hJ8k0Qce$l(n`ufQBuRe9`Vk3GgsVGY;V z>mTS~_(Af)gXp>Oe%5@~xE+a>p*>dUJ9bs1SQsCZMTHeY&qPCfenD73FCiRynQ<%p z2!BMluVu??>=QA5YL0REFgD2)G=2x$;U&96DaQd;W5ASE=v&SfL;8m-e@T+>vEjOt zvJypEQ1?=lMbevkFV7YjH+e%6`tu<8{hin^cps#*t^!_23^lS|g%cJ+7$H)#9%aU{+xS{vz+oDd3Cl(|KBJ$^3Y0%N zq*(rMMo(e^qz?%=$m$#7EaW4(H1Nz!9SwfXn1#y>-?lJSR^c#F)|Ds|j%$mIPtnjX z;Ktjy>P9Xt;$?B6ckm4Bqqg1&IQ7o?u6*}}7qEg#yMN%h@;~G~Tl|qFltLX!tTn|t zl~EEDuuzjBU)?y|!9>j+^h(Vw;)N3$?v2GzP`$=zY?@+E--$j_crb=~`~WWZb@bvu zh=(qw?iW?q?Tw8gT)8LI-|3GWx_aNfeZIPoCe`fCN~bJ@Dm*UsHV*~q`~b}ZsiSW~hTKgH!1yFL zCUwP{j6e(^=r@z{!yQlqR6=0FFXMv8+nKy`7bIy;+V(v%9!iIx^^Tyi5L7yGw$Q>N zh0#slD$2{RhL~H^cpw8~%-hm(>=C;enr>8~${uHFcact@)r^UVjjkSh6G=IClU=Uv zBT`Paf_Us}%CFO*DW6Xsd7~NU0A>}>Z&uB=ujJ`TNrR|a8AQ!8V1o+SAOkk4fQ{VR z$6dmN@4;cpxuAL7Ci3SX5Yi49dUbe!LMsGTbnDPd0Ye1VJ^E1kzER%21oQe*B10|( zcW1Bbra7HPKu7sqn{iIz8#)=)-tyjyUQ- z!W&=0%@2VrT3diX95`_~`iIWn-RhRK((aQ`(*KRkV+l51@O-;ivv|VdFs5_3ggeKw zNW0GF>J0NLu#Wyr>v}%ki7Dz_an1OUj#ts~aB;G;u=`vrblFMjv)EWCJnPnL=1mY} ze1y{hk>uW!@S{;E-(d-P=2E^#_MY6pwlAD$%FvtnD|G3{nt z%{JpLvWSpKG`R&25@i>m4l@q%Ig9YgB2IM_ade9;LNj+N#07qteTv_aJuWib(ju2A z1o)K#{SM?2Jn=YtvqVP*>FlsaBAwd%lxmZ(Cw3nszxgRr>3zdTNxp8z1CI{-@mz5c z7e(&ENcTmUMO-PLU2_=7CsvBKGti_GnI7A$YH56oR`n-HR$wYjOIbKThIRX7G@a2k z_doFT-OTS`l-@o`euhLcKqpzrH$o!7!`|3j&>FR;s>o<-|HxxhBnh+~IS(TbQ;~Q$ z$q{)3MvhRC6BOFIK@cfw7Fz&GfN(lwJzX5K4hZ8PCVpW22jxLfx(iY?f=_T_E}#qh za%}Ukl9!{yPJvm(?aOMyzSv?Yl&-76(MGOc4H5)}{bUVG5or@;^tP%pP(I{2wc}is zTU^6YOL6w5>+!q9nNRF{pcmO+ux}l;{)dqe--)%T$vLw!Zu{mVS zp{v8QZR^9jXYoijek-%;I2`KGOLeq}321Zz&!IHL+Bmjk#M}er?SUD+4v%v4Q2|wW z;USmA!$EsZ+*>B@o})|Uh+QF{Zh-xsCHA4I=$$Yevc(?yyAb*}Ai^(X9_$n$e=izR z{tm$lM8a;nb&5ScvifON;y5Si1>u5-`56&gP!{&Uv)oLy5m@0fK*vIL3M#4R!i!x2 z9(KoOixmxT;%HjccoGuVE_EUw6dn{Y*AccsgnW=fKFC5osM5S$1PSEWShapY?-N}o zB)ZP$d#US$M7s|T4~BLhEZZHA2n&PD3*AF!N|lT{Im>m7P`AZ_z9WkLPAUt-g%NYn z$w)&Xwq9Ymd5(av^$IJ^>jXsfh5a;al>i#hM=*fSnuM}LcdN2O^bhM|LWtxap5N?- zu&3c4?sJO0BsZ;7J&_|{g6t=W>}*{r`mSz#1YNg7m~(Pcu9>S%nO~^&kgS_a%0|RI z$wd0yWnQsy6Ly!IXNaH*-$j?By%Bb+CU%oOA!O7?Q(&%nBeD57{juCdivBW_wcKvs zON#r}Pm&Ez3cZ*%PSk8$)5|0ZubR9F93?DRW#gCvG(Sb>s(<3i?g^f$=u`)Ky44c` zO8x%@ZFcGjL2ph!NSpyv3Y5~2*X|1izQiJD^Fx=2m^TtX^fEs@%FU+)RNd3tJNE}Ff@G6AfBZNLA z#tToLPi);n=y7u81%9E>E1nj!F9*3SJqE(Uo+de)k+JpIF`0aNjHG2tMo5bglxqcq zJ;5O(78ms1d(^N~68kj-(6M2dJPr|Tc_@=D%hEFmiO9PiTMznZ5xQ@9fym}*&$7k* z{mxrl$cEe^?!Cmh$vPMA?4jJy+|HBGX%r8L4>J1I6ZbMFw$olFZDY=(cc`LI*3hwe zX>LYRL{lB?QRd{C?aG`KFk;iqciNp@)-4v2;%>LtpnIP-cDmIfmD@n;SenLD9n`_( z&K%zXRQSuhd;I0*YI?8G_xL4sep^wB;)glxshXu3>7&8$|dJ8IBV! zG4TkyhxS(l@gd{9>SLrkWIE zeT&P@s#6H65T9efn;LqH9Xu;hU+Ng2WATF>Qc~=xJykRQjlpeB^;1$iD_oMt_^hlC z$hV4#RbfwE5TO4EJcVJ81ZZ0tOqCL0zT5*nxdstAjZAmCMTGGg})AH>pk@F#@>zSu9lxJl}RaTuENSSgr< zzbsr9F&7fXvN8)}S-E+<2m{#;msOhW0vh5|35J>viXew&paJ&2dBs_3t2|sDF{@9- zq~&E{P~qhYbvdFgSEQGV5j?0|rTbt~gO+k}C>%;059Y(sPOKH-iio*{uvV0T8Df3Y z18}+d6A@7%FPer|RZ4};pl}Fm@n3mG35WDT3-}MgbtoruD#Mi#^M1lsS>~6>D$C6` zL{LR`$(5Dn$0A|~Llyq^jDMs%lk>YN|!GsztS3i(I)mD11-^(;noIo4(_Vi<~tY86K%>G}10? zq^i1_iFonBF!{0SGkK0OS!dR8kEec`+T#)D6`!LsEqig;jB{fj4hhvfvV;86KnA?h zqDVJf@Ky&UbNnU0-IyQ0*LWTqIAAV>hI5nP2DPe5hQ@KsFZM=?eYJDLFtytavtKu6 z9w%f9jRc+ih}O{_0(lfI@srJfO9MO8WfMLAV!f|0>?>P`6T~ncn*C`>JS_GE7Rfbj zd+kJ2kCMOS4-9Rd`fTrFowSvIpQ2P*QHOY*Fm)ix+zYStX}~ z&Jp$4bvk_mje48B@5v>>tmVAg(fQZ%CJyFuB`=({a#q(nz_M9b&V$t42a9|>Nys8jm1aN+E#^Y(qdPsl4lTF_BZrFLpO3?%TRhN z>wWsry{-tYfy;e1{Eq2Gaj%CKk4^HCM|1oFIaC{Ud{7=#?wF*rCR%cm{p`6s{mijf zS;P{DiGDV__epDQ9NFzS#&>~S&ZplA8r_^~xgFf*@W+VXCcT7v|J!k`e1*7YB<6wc zWa!w@YKKexKo?W!UW)RPqhfN0C24*kAI&|8lMpK%QO@GC1?~4ppPuDf38C!o0J$XA zpgWv-ZaXla!xv)d`Fsw`i2go@DMI-iMgV;dU&Oz`=P)H4z~?Zofe7D@m?{=_;m7mJ zwIgB9a_wlH0WL09z8zn%+W8{Uu#Ps=$p2@b#gD{Xr)S~ulY8G)mV*c{i+O?HH@{2z zKIY@3f(pHsn_h8iNZ+VX_YO6e@WpzNG_VmV=tt0%v*zAI1-(m_uwpSz!Fy8C{x^&E z9eHSn=_UHISF|tAqWy3I#r!l_)D@@-1hU|A31|Bn7L^Eg?^KoW%1VSp5LUwHIM*%f zuy(Cohqaqj9bUBRursF)cs75%T+zC0@T^5s%3Cq&RWY*hEfNK|E)+U2kv zZaddE7@Izw4ckF9y=2jJaSlzmpI8gOuh4h(ePY+Hf(vfxf~DkpU7^^b?5DWbH8oB3u}es zmS`pNm2PTPN=&CaShKYlmOqm@eFa1N9IS*lVR;Dlac|cyq`mtxta)EIs-IIub~dVl+JBf}|GV+U8w@~(R#r1|K+pV}&K)yT0$RpTIP z{kkU#G`|S;X;tg!O@8u>G)%a=59h_SN=vt}5lQW5IBsE!i*slNY~_jK3Yc zMku*>-75X^Jo+d{R~KdJ>MOpDu71P9e}%-q0fl>-W>4Y3U{K$5`JBElLV9d4aETV* zxHA`F zI{W0ojXiYoK=_=%LkG`OK!t|q4L;}*=MC_v0ZnAYQ3Hv@^7Ddv;wMrDdf&2GawS)n zL|uiFU{$gA@78y9mjRyMYAfRH?1&00;)Cpn?<=tPz3hm=E*0^9c0|HL^=?)~T=`?B z^HzzGT4F>uQY#N#(K}ZkOX^vBA4P0XRP0+!hQ_&ydcMw-k7v}IuVX(YY#|3WaRl`p z($sZBcTB$2K;`rknpViOOy&v{`PZ|tXxJF?5T zGYZ8R97C_;#<^*^(Mynj1mkUA%2n95%C(?od~Hn$TAA7HCw_pKk0(g93g_hu-mG0F`K(q=&*5Y zJe$BK!W{l!HW_#^l^w#8tbsMMCYEB&Fk_m{=CHYJ9-GfjW$Rcyo5pHbL)DNScqL>_ z?=THCX9U&#)!gCxsUH&t;AMtNlO7>EvZVj8#g$2YdAx@RB@k6)LQ^|-CO`YZIqT*CY5VPg7r4HrIX1Q;8Q-{oE- zr*!mNtr965*q6?Nvft_VeIW1L&DEV**Wz24iy-5Am=$+nkchxz#glyg-RNDGLsZ{E z!S3s@%l!E)oWBYE#(XuRo$&m? zVJie}Pil#=lBUs$fx8%_dyLY2TSQjc=UlWLoy+Yuy&Th|OlQYn8jC^y- zt3w5q-?P~a`tJs%|89^9@w+O3UK)7k_lN_zr+bHs2vn=MpdTyaq-ys_EPE6ddYK>s zjB-vM-vv%o5@Gx_pF%%k7E%6|t2nY;R+?wsYHS7r~&I3u6AbP0KTwJDNp{ea6Fy z$U#SxY%^ZgbrZ?P6Ud7BIQe-NXXKGhT{m;}eXUOZr#}*9{Y@u7S2vSEjE!4HHcQYO z(XRIzLm^<(I?9X8i9Lr0(f7|BMN@sf;*AdWk*J#|GX7BF&x^UGVp9)u6jrJV8-RCi zHoDg4-7=O>%?{%udRC0UE8=7C;Hp|){`uIpOKko@^RrKx^WJg7EPi&TV^yfp^9hvW<0yr< zc49W(e>!|GX^{zjP1JD$x@(C#tEjCL6*+Eq9-mG=7N1~$D~k6l{VU6-6K2f*$W-O? zhxeE7wr|X*#>~p@A9C`JgkG>B@c@rk#=eKcUw!5SU~|t8xnt5$*?oKd#Fd#S@bWbI z15uT+s~zFO!&W8v5KupX5*1sY`4^T%sGE6d*B!_^ad+;I?2-Jwfnq>QP`F!!dAfcq z2eLbqF1kYo{741-NCx~^1<*@3&pZc2?=9~72_niM@~%6noCkICcDA>;^Cz~2X34^5 zWGi7x)c`VK<{w_Ve8Wu^1=lmr+xYvPVJ%>z95S|We|V(BLHh8GWKT4G^?Z$)}qm3`nQ#kJ%!8Kz9uE;;Di3QQS_&~mP%FAv4 zICZ&rswEz`@!Wuj9CkxRg^g=;F0P?~YhZHvtB8)WZGN1G2!%KqiXiR0D(0ghJ=Q1-rb%FG)FE_+#cUORBv z`!ZYhUO!OT`zlBF{(gY6_f@X!y?NlW_mwSs1C#R&viFsv%?BoB|8nER@%H}!$6E&| zdtW(a=Dh=#y(~QM9JuU#l`VVk9;obnog;hiAE4}gohy4E9JuU#ZOh)kN(%6US%&104T4K-t^tl$rk=xa?)&`TW3TZ*R8j{rlU? z-t68lt@U+Gjtjr^S^wSkbg_?j-c2(l6W!2s;ci7ZD+oOcI|DRvTW7KKOZqv@iGB*v ziCXcC+clNAQ>5vXfqZk)7D&k2xp{?F+tF|N*?{BUgaeBpS5G?{#e#_)P=Gt$GN78% z{dg{>$Rcl0UJ;^u@n*4-7-y{38}aT;$426@N^)%zM%OkWpV7{;o!Y$3yl~~DX zIx16R+VXyBL$qKYlxa}rkAgH`65s9t+Uq9AmQc#N!J14Q&?&JV>Z=LzvMx;3{d1I= zN6*1CduNMN!U>%c$MG5wDL+0obR?^!Gd+5`F>6$EO zoK{i`WhPWnnG=xSI$R^mEiUNoUz}GICy%0)~Yq_$65%Je}C&G1OcqgVvjNsyh3Np>L z(BzbmmbEFX$PhmaaNdug*7Y0CthTDmKf#aPIkYam)JQdVcYkaTX47fA(NEnu) zlIX^7@tfh(y&e0+NgtDLND7HNi9+N7xBItTeT0Qyl|FGUeO0RASEXamqpwQ6jt{T= zmF7JZI>fifFVB2APX6a1#oqs)%lwPQokr6neQu%;Iwe=fDteHb_|e@DQ+FiKJCK9- zJnRfUJv$gA;`dzo&T+B93{UZ6J3fN4Sj1viyTo4MBQo)$^7jw&_c8q4&SNLz`dX|N zI|g0L^>78M4HIDcMj?K`Y!*5P*!74Iq2CK3MV#Ezg(&$Tch_UwS~qKvV`8M|k0@6? zkHfR9=TE5Ao<0wEUGP|`?Q6y4=Vu3=hJoW$pu?+7UwNR{t@vghdwxG#p@_{|$;xp| zt?d4zs4LMBuk3zYf{zREPZFfx^N7od3i>I*0X)-zO}Yaalg2K(kkBRkghqVua96Aw z7cEDU=bS{LS-j2iwtqgdRRom8x-kE{BJl)~czAANcOodh&2?sVi>#xpGVh9=nN{Lw z8_71xHae@sGqXy}No<$s$eO3bbFxaDlUw4PtP;=3Dsj&KOPu2I$%R@=5M^{K2pE#EHByOyH)GYT$r-tE}Z8{yIQ7aV)3zjfkkZeLu&J28*j z*ok7{rUM4UMOeJmnJ=fa+Fzyg%I-(MYb;8h5FP4C8T*9%B^dQI`U}K6USi{DfYW1_ zBgq$g$$2SvK&02b;;tVT3rF!7e;|r}ID%0Ij0n*{Tu|iRTY5GgS@4Koo|vWkPV}Bw z3Ci!-{%Bw%uX(~5-Va`k%vchzX(A?cZgGW5%cF+vp6l=c1#P z-zhxJd};}uW=8*$IHHN8?D06z6^Y$0UrXfca6xr^7w<&UsIIXqaVDbEdz_z+;nv{u zjFjW&UvxGVlRi(FxKn^9#&NmFKbq6&@L*pw(ETb7CRj&qUc4>) zoGa7pdjvwvUuyfq!2NWv;KCfgP2n zK^ddcg*Md4QMD#dE%P$`=H_xiSrF*B7SE}oi#;M2@S{IWqEdbjtFem!mm6`BWrlNB zfr`gWc=2bZp&@0&ksMQD+6+Few!BuCZf|SMu&bKY&aJ+A?j(vPh7dKLZ3_V+x(6E}dBI ztwa8Cujpak^(3Lj$&Ac^3gMZNDYop`wX=A3*5k;Vyw${}AtzuYc- z1^J`{6%Wa*Gsg~Ar=CT}`b^WVuZMHw1m>DS-UjDdGzoF01^?UBycrFwc(rgyVL zRC)@d6%BEhB`H})s9fiu>(aa5Mjdzv7uSf=+DQQnz+M;n9-aChNT*fR=)}UHH!=a2 z6_EL5>nB!l5S*{E{eO?Wo`M5YAHf{nvUSEu09MsZ90IAl`g#bsS|#Eyhp}*eGwxFZ$1%F6*yYvDE1Zk zV$)FNKZWS0!`nJaNgqi`^n+yL*rE76`VUp`N>yt8#3QM=**+r#S?TD*L@csE6dB4c z(qH87S7gC{i@a5Y>g#bSX(|q=?y#HO&r`U6+)0{Fm%kGjn}K=O>6nHB)&)w6b%lAn zqPlb9C@fK{>JsfncF=?(z@)fcOfI_v91(?eU+fVevbIpIUb%Os5AT4gO2mhM`Srei z@m6(oEzHeb$AKwK4MjP{80cYj(4;<)o9?$jq^g1rcSZ+YDBKxoi7IWbx; zpdlV=K-+(jA;O1wh|4N`xY;SftNb2g5JpJPXH@~&VI3ZigviTl-TooJq#^3e%Pz!2 zbq`;d^>JQFP&a(+2IJ@L+#7q;Yx}gun-z-x%<9zGk8ArkQeVb?j>qSH$NmjX+_yp?04;P`eh{Q6ziw+`+O@r`($$BUz#j?Nt5tu!vaEe;iN z@p(&ZCJvGHna9x3e4DFtg&Mm@-q%r8l!0+P(DM#jS@H0Lfg?V!dkR{-x_@I1XfNEj7RSx zU_2=;YJ_NIkX{-%7eTS7aE|#P&Pw0o>Rt!*Vg5Zl51RQcj$cHI@uZ7fg)Wq?LWOsQ z%tK`LNFNJyKHYd2f_&25LOb~&c?8cL8V><3nb1cyQ4U4#7{H+@?|k1XSg#!w*6o4| zBsxv_cF=6!4v>nFJ^@JeJdXQx`5goL>07%=-Q#c(oA?_heNbq$2Xmu55BuT?_V+!= zp+N0mT`Mszp)b5I5N;7ZjN85|2B|qI-K&nC`=7>vL|v;+{coLIOF;bZTKIdnTOVQx zbw##a)YMNzU)>mD&OK3{^A*`{7G%9o>g0F2x>=HJV!Th_CYH|+y?u*0wH^*|*krn! z+6f4Lh8CivNPS>S8Og>mfH#14Xl}H+-nPbTHxo>}U&dx)qM4XzCTx4J@+F(+Dg(=h z#rOrv&yD!rGMK;I!?-N>aGYLQMb5+leHN#3XLBhYUSkdp#ZQr~Ut`&6m_=+YZL-PE zGP&ZDMW7gz;`L_54*MQe8FPl5kbc1Jv(@*V&%}l2by# zOMZoXVv%?r8pGa1u`f~RPZVh0*nEyX=_W@{x_f}0WSwCwW6L)RIiDa2dUF4@amF~` z17-2E#Bc->b^Z?P8tj31q>976x%dPJe=Xn$xjat@+{Tg4xCKt&JtvBV&KMLx96Rw4 zCVjR2JgqXK9shz@#B!2nmqne%icC52KiNMjn?Wie-VG7oEm=}XEHUrgVRcef6lw54 zB!1;Lq!c86Grndg4gHx5C4C!~=Hp`Lhib(5P)=ArQUM=vdv9l|T!$NCebxSp9dbqJ zL%AaK@($@r|06D3={r5=D^sUhetknPkK+sKATgF@j>6ThkFnIryc2&*jYaZ9AcTy? z@*5!$wZs{mvaYcG)KD;bvw?j zXt|>2Q^4IDv8=X#a_PgM=RY`Xe*!fQnET)vG>7bz`wO7rYLxfzq1~9noUt>HL;8Su zhROm~XN^BQ%bh#X(QS4Xf6&|WZ?rIbKBv{k*a{@SUfj&Ml4h{teHE&~)gp2YzONPU z*J0#3u5|oOa$lwUUx04f<+$p-9=|e1uy4vJL5Oy-@_kt&L$0(!iUT5~?h@QNA$Ks0 zkR?L&BiwKm#g4YH>Z8PtS-(UT-B>e9Byc`@iMqKG!{RPn{9yqWim;;387)M!P>e}G zZty-$oPA*IL>6jcnxWneChwu->=Y)xCGP$VP4={X-(?R5ptnydId!S!?UPahou65B zMq)#Kw8{QYD<4&;U&4T>5C%}F^Z=Y?gtuRWf0X$?Wo5p&i!Rq4#HP+?{xhha@V=B) zyrteZvWhPCekSu{{Y~jZz+8v!1dc_aT?8;;cYX^le7r28{#=zXjuXosYk;yY^*Y~|;J&y!ak$g>+%1<0-*XzdoqJM1 z6M#6FrjLnUx*TAc?;GrX+MLSoV9X2Yv( zJT@&W^Pt%PFDt)+7GX1jq7O@FYUoET0G~i$zt~qQ^__F4xWq{ZNc13emWz}9Uo6+x zCtR+qaoY9?&@H^^&BL3SC5*q>*d@I_V*$!G(WWON%7I0J&SU#f7(PXL=Hf?`S;9sf zEa>Iv}TH5h@GD=#XitiVuIL7p`8@iiD9v+s!z<8Jitq~gMEj% z>)cwfZvu9k3Df~b2fDvTb{u*+uGLtdoa=PR2rQAym?PsS@QCp$dPIs%$AbyM+F=?gK$*_#h=k4_^y(8{*38qb z1fuT=-%iDOXaN#h@Muln$be?1uawzzo2lm6D$udFUC08J!hhrJ-ZIPb`IGnLQh>&*nx-TgVbjQ{qhN@7RZk`X_DYhQK zbw>w5k6o-lojRI~snpHO6m;~ukk32L$92O%X%!e~uNP`I7Q@>x9FMUs<1p^~!*02G zhT(oOI#jHmSSsF%-CSTmY_-+gyh;K7@^!^-fj;b}4Z8w=>A2g&Ze8wrAa>d;5+zRV z_G{#o>tt@*U(?{XjP{)(L9xXb5}OVMK3t&o*HuR1Toe0&X!(@Z7vMezkPW)aH{lIE zKHt0^C>Wl(8>diM0?z$#cF+~V;>4*55aEC(`#?a-bWjBZWk5&;ST6zOiH0cO?NG~tqv5km&9HB1I1x=4Kv^u~l zf~ZmErGUpTHcjSP2z;3iYEYjuhfn0lhb8QGD1ahO900~&;}qv~yE{{eioF<_iXI@% zy-Da5!%>~mk;cmIVoj|-_(>n*`h)o|AhFU~ggEAET7)n+&~JJ7u~>b*qN*ekiIind zh4L<1Ce8=l-P%6cQ?Aius{(&EWsXD|F^Ix5O$b&vGfoh5iP&k_uJr`O zPRDl@(e0xpDJ^!n#`M@V3cA9ACh*vm2<(=?RThBhuFlGJjRnmY=xNqum$5r5^|cmM z8M{ui={r}BDA#M^_dAZbZ8Gi#8TVaB+)f#{L;mjc^^e;n^IfJncyOgJ7l0IdG{-M4 z-Q3jg<(90M%Gj-%I;W3!omZlLPK9G(bRT#?r>!zhcYnv{cUNM^HI4$c(hg=07h^ll zBZr_}zB9c8LqVO@4%WTgyPKG`hiom5j;4^l%swpi_>#T)wGf$^54bW5;n7p+6a#gB zAHNkRKc}1qIHac}F1H0HiwI4~_XL@2reGoh#%!O%=i{2#kFZ-bqrJBZW9MOPztH)4 zLlTd zw_@?i=&U7kqjQ!nnY&=sf~8AVM&~bG5na7SZYWRm+-HM>89fEiKW_sbp)k9ctX3GB;n|oN8_FPnu!&qpi_s+iIpaY;2DjTUt|Q6sUr%>GrMBWJmi( z!%Uw>B`QSuvb1kZwnw4d4Q3K@wr-$Ak{4Mtq&6g5qVouQKRP;Ev6fVYR5aO0coZSP z3rMT*7?45|nNDRy>A=@^(`ZRVlV(Z*Ekt+%YlNX4txb@v(b&A%XjQ0W%IKDK`$mCC z6j>jgZdXJ;vGk@INxp6FqDxTg<}?xj4Vp2U+qa;kWvE1GoF-@l)fows!Xr{7luBq$Z|E>70W?ob zDodvsAp4?b6Xg-KE(yHbZ3N#$+o{ZuJ+Ckk$+)O)BA{kQNCxN0U*( zBf^)+uB1YeQ&;FlZE5Ua29YQ0x&ed&>H)!7wa!v%P~B66a?c0m1$<1w0Hsl1o4^l63V$xY{ zZ7C@GROnqT#+EToR?JPA=~IB4r=+6Dl}vT6EMPJD86i2KPzgpT;v13~Y{gdUoK08= zb_Nh6p~A2%YBuZ|TQ;T}H##*0v|2li5YSo8)G29dQoC@`(b&8ab}@zbE4%;sbx4Il~UAZl^8 zA6dwul+o;L{W+-Tr6rKJ<#RiP)rXx$T5OaZP>r@0DTpnrX-J-%q{U*PG6aVx8zdO0 z0trVCX~!YKfU;XGjh^Xf0Cghui84<}&WLy-Q1%NdiBx<)2r0mEQP?z=QRd`)!l_oWgu%gb?=jU5@X1E|Q&q(i06 zxt4UGW7JBWsu+=7T_u=Mn@n4}vBT)dKv&+JG*3chXxc`UWt*ik=?$$kCV)(0OA&YT ziX>{U>LtMRWYpPj>#Os1=p2jOs=Dfq-)tE<*@!xGb56O@jX+OB3Iq$x%M|H%pxarH zqeo^^CwG7#wP3-G25?;r=V%{0`l3=z6Y8T!paF&@&#{=GY_RCc4l(pfvCTURa&|hW zvQEJm8g+0fiaG`8CWDVG2QVa|reF-VrP_f#mL!5YY-!q(Mth{yXssg=$UwCbtOMJ~ z+<O?0%=vLx!_|34Zj2KiEL z?bzX9rqZqqDIhT;W>RCKZKAr4Mg#*Nux(79k|Jx+B8leWMsqV7gfKd!T0kp{Cny=i zY!~fgX$EOlOY@O5k5xHjgJ>#MZnCYd1t+UUD>Oc_8ughZuCXPV2BwR&&iVl>35%1( zmNspL-kixK%`|n^W)l>Wnh2%R*0|`@1hLE*m`59}DLGn#P6VUHng&q5+zeKo#0*)E z#ZUub3}%xj%h-bLp~k`b=z?Yx1A7XU0quqIZ8c4MdV?S$xgm+sr1<3AKW2|*wk2*F znM@sV4QtY9bfA?bU=V<0v?aME(~)k++P0)Nh|vMKrpR~L3^}TDe@c%A3qg8D&ea`= z8to?9s%oZMWi#2dfJfMC*&=C~Rcb0LdySf!*!@iohsyF2qXza@Y(qvuXA?97~Q7)$IVO+kiA9 ziDHfd4V;F0q9SwJ$@at&|N7N7Nh3$@Hh}eNlGBfExgfDxS48)E|*Y-wqqTDW)whFZVjDfTV>k9 zk-$D@kDduB?Fm$uO)0dn5>AtYB(~k|fU<&ODI*U>{d6t<*;bxVs|pE`*JO|Z3_}ps z6qzdepxN#i)M0-iCb1r&tB1r zrkic;gJbFjdxY#?fMF)`usW&iLdUw9oKfWARC8{(Au9u>kD|!{quEr4_1tQ;P%Eza z!HgTNk5m$-u&XwT2^=c5JiK-^J6RZFE^e(H!py^-`=T9_Ly+ugq{X&o?EzRrO0ua5 z-%Xq-IYrZnMo}-h^ldstLNq}JS|h7kG!?^DlBT9qYg5N&W#nc_j?y$@@~9fMpPC~s ztF;hdMc$4@YhN(g61IZb(N7Qsa|Yfc$;&8vE<#o=Z3+l0A!jAc*&>KVR>ny-uJWbP z$j!2f^BDb(<-$DMR05AQ{si%XY31+9dSbBFh@4 zEjt~Ts>$|7fy!Rtu_ib+Aeh}l+~EV2{hq! zY{%FuC0lciPRHt)V_9s#r7*|z0L#o>6%vMFgL8HJznaxai;M_$NRGfEOx-4H?^7UH zVzgr}YrBX>o(4nA=dc@Zps68_FGO6X1BQuAswpM5p0H0iTSgWo3=pyO3aqr|QX61C zNS$D->@75zOP!i(bgF*R#}-q})P|%fwz6`kEY_C8WYCbxO39$MblBca1}W5bVWvCw zppgA?BTv{k){aSXGp@y1b`LJ3rOZ=s=Rkr$mXv3aSP8Hq+7cOinro&`?nul1Dje`L z&@?#YQ`3TFU~I;Xa-;`%4VFnGR8lsGJz2q3;C^ers&A?0ljB65u|ctGN_}*0Iz!Vg z+&6BHt_5oqn6uUD5f-%#Tg42RX74yXb0`LCPMY@ED{Be6;iNXm*wn_5TwHqSH^+4* z$A!_XRvv>ZWiS|2&srH>u(CQjd)CSYD=ikUU9jrNrK?v(*Unn8V%CyX3+AniE?wa~ zBd~OSbk>sf(W4eDnF}^iTI@leiVLq9M`hBaYnmKOuy%iqfd({< zHZzU(JXN|Gv^CQf+Fow+(o(N;pSS;P zSV`g3dI(XB#cYex$%b?bZQ?J$p*adhQfoVrBCtSE3$3F9nJ`;-F59TRGmxZq=h8!K zYC}sJthC0|n1r?Ip2%7$w%3uqQTAiPmcX5ZmUIJIenj2|T-UHSNK~QicpM@_yY%_{ ziqNT9;|ebDSS{C*rlRG-0yS}Rb8)eSlv9!a|IvpY;-71^Zp=`6(9b)_4m{)XR z&07p1x*H6mX-m2#Yen)T7_*JGwj{1SqSerWv^OWyEghy9sFE$s9j&$jL<3~LvnjaQ zfO72Qi6}ai0RcjRM1wweZBHSw7VMKvr=)3nwppGhf!-h)p^jQe{Hiw`QXiewh=T>P zLg`~He3m_sJ37ePjcDs<_uhV+l>6P{QwD3}M#B*6tF(lgz2#5qxnSTmr%1zq`Xd^X zt&J&Bkv6fwDmCI(lEBpFRy^+FSYs2+ZBgV$jfNJvtVOoXSX4x4CX0O?s1o)aIW0?D zYSo&Q9BFL9`IDH1T1+FZIxyQ+q;oc{EzXS>%S4wuFtkD}gHgNMx|JvW^^TIpt?wXy$;?oa$_w)xYPYKA$E$O3kBQ=Y~7q`8??lQP9EPC9ybhiTe7 zbaG)DG&M}>aiS~MXA}Kbr5m(n62=4T=W>C9cazj<~>ek zkn+;xm~LfDQo?zfH5$VN)=AMZ(+P)~$e?-<-*jYl5m@|7R?e#fvSp@kW7iL4q{!28gvYT`*Z&L_?ol`s3~09h zA8mGJtPAd~Or^4jP(n`@5C{;|u608Ph#!~^Flw~so0dP{N__Y73r6Rq zrJ%GJ8z!};+H>R&k2}{*7&m?j^8hGfS}W7mp~NN_>spL9 z)Z*kSZ5BkusiyhR>*!SW0 zt1B2gXk|NYhoKvHcGImcw(V*NTfLGcW^(jY%MLnX^@6#W58#al13bIMXi(n?F;=*C z-#v%>(ed>cu8AzdMCtGt1OJ9;jQ!Zh*!f<@3<%!J>7IFZFMWB8-Umebp)N)jzlDXr z8TKT=&q3OGL^WeN`lFC(T}-5fXz~ll8tT6hN7sgXvAy@En+rRSd`cS6XE^!^dy`43@mm*IPa zo(XzRF2itt#XY5i*d0T@H)If7ITW84(K9m~pHIS5XDg}^n^7|)5@1tD*NoQLf-y73 z=xk{m!;huscjAcc>{@)^QHwO(K+o4}F?@O=p3qrgJ<@#4*kxk_?3u9-!SgeChuHBL zTR#b7jVUKg39#_Ahami~(;k{u#15HWKV4^Yrw@q~v6+X~PYz+kIZoJ*C50OHX5DI6IS`_rY@z>+8WZ`zXzzGcj+Bp3~^L;7lyB zmEL>kc^*6??7A~gUaGUdoO$<|I(v_vUr_Awv+$WZ3+sL^y>F-Y@4_>{rqyBF{qQWL z{I0W5LY_SfLrTy7PFH}9J{#W;KO1u$P0wa}o^t_6mx6-rsTud3HUa;&ueE;e^ zq;}f*D9=mi*?vAs{(1DghMtd5_>1&>o1TT+uwM+JXJQ+sSxfKD^jtU_>)XB!@n5tJ z@&A&ZWf!0xSa|`KzVQO=1??AL-ZSWVBRq@PpDw7MUc{cK=a=*hY{%ZTX*;IBfS$kG zju^h$j(sX{A%-ltaN>o4`9du5iVLyyf75&SMJV&%q38E6!jL~)gzf(MMM%%m9XBlw zuw&`jumk(rxjRl?8euo>xO7K^{S@8zO#t^d?!-%FgS%A zSc*EJ@e=Y7bU0f=kWSDsGS17+gwd}VAP+!3g0=uu4&%^B2q|Qj0yLDBvS|c;mr{;^ z{0QAkDPwFCdWoj5RsF1volMZH1Wg7AalXgChJ1%(9QqG{_(^Og>mV!<7vh}Dy4fBk z##6=?u-nmtEjz-6SQfA!GtE`Vj&k8Rd6b0K0CXtS>ZgR|WEax1l>Le7cdiR-y9{W; zxNBTkhh^+Jf__FRmji`J=i^kudiD_u0?wxZ8o?SQ^gKaL5_*H6jR4to*bETj+($Uu z*k=R{<_Kk=&Ik=7sDtS)%vaAbUk}&<7&o8d&SX^ttq15F_-~2}>(>k^YuJTsmCF?^ zWbJ$j@b+SMl8Zy!nGkmgK!)oq$agtMzFf@OsDzsVx*B3T3A&r0OW9cj{f3~+*#%Ty zFO_~3yM&Oxt%T@&5oYl`~~#BBp;FJXC#uoSy$xf`ID2`UE&^Swj)q5x@-?^6xA8+9cJ za=8Um&k<*_8_SEj#&N_Mbt9H>t~C@lk>VyvXn`B+H_f$yy8&89SZ25kf|?1M>Dodm zGn8_+>okt-ex`f3dpw)#I-9#j6tdd@in`{x&f_kSg8KpTuz9ZYIrgz$N;%(k3FUi} zpd(zDQNAw#8s}Qzx`y%vJeY5R>sm@#2~Yy!ZlRPD0Xo#R*mW1tvWQYHcHPafR~epe zFjE)1enu&Gc(8=Uu6qc&p0F%+-7hGke9K)Aag^jgd$4{hUC$Dhw>;Q4*STJ#621h; z1JD};mFfr`=lTS&Fg6w-KWlQiHOzO2j`>;u!jvm1WsA#0am^Ih>IxCmE}_8$og<+_ zf-aI!sfHz73(yRJB82k+fMx+ysbP&?qY@0)P>Oq-pmSVx8cN8&(Nt&KTZ zcDwG-{E)8=pb_j^*N-XXnO@}5t*$!>%XUinGk~zRS9!04@*i|POQqigaX)oE=-Njq zZ>N-xx@z56!p{kM+%?gSDIby0!EQ|XGC_ZGO{2IE33}Q!%Z;UfzYq-#XgLC z*0s=$r4RSj!K~;7*D{Km1CR%x#jzkr57MSd)<{HEH6{sTN3)1pm$s+5#;hC^u8-2s3zz` z*H(gR04nGIaGgcaB!GtUPhIB`beM$BCt8m5d zbzSf7fw=EU=mv_rAD~G9?IGv|3Ef1{za?}FL6LxfzVAlAJCgze%MU1S0YQxah@eIZ z{e++%3Ef4|^%D9iLH9`L9)cd1(7jZLcO-Nl#q9&AiEI2ff|el0Y5cbY)l29hf)-2Y zVSfs*#1f_h6;&lErLGK2!be%s#kQNeg&r!ai038X? z3nU?vLWhQ6w#;9mIvfR%2cXwbv9qHAx{e3<2h@HW0s1a4z2 z?ErZIn(0BE^=n*OU^94&$JSXhxZ$yN*5ML*9#X!|XY+O{?;nI^4&P2xe?`zdele90 z90cWQNAN2>I5yS{Ld$I-zn*BBK4>ApNAd4^u*Eh21hyOh9$`6MLN@{n3)$I_u0&hO z@AqIY-U)Ft*h>BzD&aPOW&!jN;r#8Ory%Vr{xD&A6Ce*jeH6Ek;!fl~9igFv1r*Q` z%ap+j2gS4#c~JMDRWcZB+swi6hSC=eMq1K*3PEcCTFg%3(j(-K3g}o}=!ruMV|+V5k)ULu zfEsks-x0cyrzq}pirc}{1nnVcCvVY34@c-?Zcx7aDee+(Qrt5DovK~JPa)_-8F#8E zFNn~kyptebSU_F6=y3>L&d=0Ek2|z*qjm*9hoGA9uR*S_Fv4xsH+zcn)M z5=yy|psV@S)GDWiu^(N{ucf$iW!&`yt@k5z4gVfNSBC|36G18Hj4X*pqKd13ED@{Yy7uVhk_C;{cZjj zDk4^0f^qNgKY3A>#u4-Zf6j~CT@27n_lNuwDxrbmKIFO&p|%oiv5$Gkhb5d(aUb)+ z6n8a1N%jdZ@nPNXptw(X8Ku0JpfC7jg8o>7oZri55cE35?c;NOHm{ks#Aowb)0R`p z&nTrwTS-u$6d|v+hDt9fMZN^IV|+L(s4Yc3F<46z&KaeMvj`xh?AX%lyfAiXClQuS z1eIv51Z^RxTsxVdiwLUJItaRopds4z1YIkkJp|n#q1%0^?_;~LykXi;e8s4ccpCU`zY&sWNCgXcT+{G$AJ zHl7WtxDzm}sz3~fRpRrgO03qh$^v*ETZt)~=)I$|$TfoXK!}@_58DhOHN#GZ=agZm zz;pgEEO$LUH_`Jeu{{7!QLc-9G8|)FRrf<|pbBFnRS&{@H9g~1 zqFxWX*7U5Zx{9soIRT!_ds?b6*L9Ts&ZyJRnH9dc+s^V*Uo}uRp^!z(L-=pWJ z^!$RJzG#(|Yf$tk2q~dwIX#Edvxc5=dQPC{6nMJW@+k6lJ-w&sc`{&gvF<3+cF+i< zdD4h&5OOHJ&xPk?&^VV{B_2HTaBT#eG4gUqvv8zJqeAW7+|kSrwfHIZUv zEL9?%h_qJTi)0xh{Yg%P$_J2aj&ks5Y!mTlV42~yt4PbWcBWUxlJ+jP3eHa;as-jI z7c` zSDla2g;f_znx&uL29|?j*bmnkO61mR`0DX-RjhUM$Mtyo<2q?hbN@hH+r}T;igTbu3E|=}u%>A}bN;Ph=w`wNk;=yQ7>|M1~XDk;tw@ z_9t=(k)w!ACvqZ@Q;A$aZaRH=b;T99;y8hEc*USlwn$nJqgsRk~!gUAC!(%A_KtdGv#PJwtldj$re z^e~bh7uZ~(^Vo6X!9cv%8F##o{j(H2<~X8?j`nN?_Y}(#M7k4MmdHv(`V-j*Nj} zERpA{<9=O5ZG*t2CLX0SHP@kZrJA_c;WalYS`4?Sqo7kYvJSTCN#yW4jwmOC$gDcf zNY1HaLvnc?Ty{H=Cy4yHjt9!WS%<_nk*|p?RTs;eb#ZOMbpz#^pi^B(RU4%zbv@LW zi5<#g`4>sQMpDz7>N%qvJCT)$3?Q;Tk-cRn&7`%VQ`|Yc^+_VR^S%QG0FN#NdVwF%wG>S)NFL zA{!FfhR9eXwKk6r#v_1RRS$TEEJ5d;7m=_1v8+MTrs`OhAhHh0aVP1|KvjWbBEdmO-sw_eB zGD+Vc@=+LGo8?-dH3dRdM@Mv?w!ry!{IRS{(k+M#Z{h5ywLGy!DRdQ-MC9c#EN>7Q zs$%I+@>>vj#~;hgYFLJooIVY)>>Gk*GRaA8f%ot!L@sQ>BQ~(rua4+6Y;_&U_N|;9 zy+N;5IA$idx{cB^THSNhVvp|U%Uj_X_G^R72DQPX*M`VwA`^%lf}}Q{crAFNtH(Ht zHeyHH476z4mWI)8WEkgwwhJvDfe{Y+n=A&@f_Ak&~+?_$VUIg8jxL?XC#i zm;FQ@j=;5j8-ZK(Q^Y1Dg$~YmE;`_vvpZ~d(#BzNhehOSIY6JglN|zpF&gzbjl`A> ziNy89OzaYgM77MG(yBcjaSM-k#65aO zyn?gW>(02%=R4zA#b=o|GIOGEPZuKT0+vU;EXj9|K<9Vw9{J9A zuh`)H_U^F(<(r~$T+!7*_k5b}7<~fScZudZFwWP~)RNv)c*hhXOTQTCqFq(ii`jr| zn#U+8CxvLK{qM0EDCco(CX#Prvt6{k%iIO`)V<40loQb9dlX{>yUa!DBV86E>C@HO zQR{nb9R9QaNpW}t2FKx=Q{!;i*>Q3y%?9tTknFCI?5^7St<{~Mj7__f`6aRkkpqcL zCvpmr^N3tQ3iN_z0 z9&MX8Ygc;CagCXH9Z7HSpyx~%7vR+^&176n@0Xo>Z9=!)-Fv-jWobLu_FnjmKHm%9 zkSfk5}=SczoqRXAqy8-fVTxZ)CS>ckA>H{ZTx=X7fylM){Qz z@GMj(vJR2W5^#HZCL~$0%(A{~4{_|h)anhqdf(P({JY+Gt}pcVv~`?#y*IfI>CLY| z{QIo7q5Ava{E$BDY(h_kWGZOJGJv|ZEHjl_9iT4~`K(D?VkmV2}$M(f>ezNZ_RO-9Fxa^C*U%5fh zt{?V@TY`J);#AH`yPw7FO?1cBK9- z+&fMT>yP*0sQx^LPoaEm_p6?SCEX9}BxzS)*yAGi_wAP6pj#5or#oc+pxdYoPX?_< zzFrQ(ew~sRp&H5$spp}^jNcGEN_B~BMPw%;`wqclRcC0Zhc{?86pvNwp{?~&Lx$pL z!865YC&fdXov}ml4B|P$voqC0>)o`WxD9iM;`(n6#plt}po9&rz03cY zhqh{3RsX^xX5#n5zCbPcbJ!bHn^TI5J!WEqDBKsHlqx9QFa@6@ZBlR)Ii=uu7?cug zuLW4Y(hF2JRo!wY$FurjcKZBpL-CZa7HKHLl8w1I_B_`dmD7s z70>9Vdj~|D82#lQ15~hsk;$VwqWz3qJ$fVhk`lx%GlAoTt~=l!nZS39aF0yj93_ZH z!U1^tP{JeO0M6;;1I*xB1=0st&SL;@1VI(42S1Ntzyh)u)$uR`C$Op_wQTN@hUjxf zu}D{fjnYxMmq!UiN13jdhYu(T?l9`-kpZ01sY6B(jP$_Yq^#5_2gQzaWn$@&jVxWs zKY)Y1<&$pt>hnn(dNMl0(B}t6kVB)e3Cr_*gy|P!|er#`Y{@3KM&l% z5JuDOml35gT4KKj+`$A!>+QD?Wi#4^bRJ+1qmxMI0Y0Sdbhv>0*}-~7&yhbnILgRc z`XML{PBHQ<{S48MlmPBu8E{GOtr>WNn>rOBI$MQW;(0F%8v4?x!y{i7gfYS+Ult@+ zrDI*O^lMN~pOxCBeSjDElIW(AG4lq`DVcsQZ9_!<5mQ9>O4|`RFcQnyfDdqCnoB6ll;GJ6 z`hgD_4f6~`wAzo4bv1C(kB@aVaE=ikPej#7onV4zTj&pNR-+?dyL2S14u(~ywA6Dl z2mt#TeeBr{27)V$_Ivh*wZNVll+Jo4!P>w=_OMCdmZuri24@+mWifdL@)b}U)C}aa zSsO%CGIc0tL)3#&LODC4evHPJn+5BDA&jP!n~x}i(VTK0!n$B8qvhq6A)3u-6VlZK zix}-fx_V$GqeJD+gZf}Sqm$(>Bl?t)$zwHa0QNF+^;nPSXdsR2i{(Cn4MA81KH)3BjN;qdc#{hyoaGM7rjn zKBGNI*Bk^hI_5P(2m!4b{pd9sQB-Z-vQUsp{;j)A(={&}qH%TjNQ8pfgcgDb@0mg< zSZmOQfzNchjObgP77H!FeVvvIErC;Ajn)dSKn+4u5PdAP22JYH(T(*!588khlwgAQ za-j|Apwp*9Tad{tle{xPIGD;P-FvSP4rVdR_CA1U1*5s%M}+p^5UXX0_g6v(;8Bm# za&I$;1VN1QQ7w@mo6$z^(}?yn+K$R~1P>VPLv?ln!|GEy>|G#4flZ7~dS3?7plk!` z{d?5T7~sX|DxnIL;6v{VLJX+JbZ=1KV?YB&7N5(A7Bfq`&#yu(ur}1_hR_8})ajnk z6_^@P^6@c)Zoq?4b)P3fH_(C5Bv2RC*$s5p>4gvnHZclCx*p&%p%Mi8RA%|Jl^cg(3&#k!(Sa=D5bfK!!qYB9nwh;~9oI6gB#J3@31$pDFj=>C}ju23TT=LGN@wKU~d z3>7DU+l)S~*and{@84G}5GLvoa;ajRI7!#tsTgmd=V+!U>*QFepJ=3bF%vv7v@8o0 zvXgv^NHFz>Pp26mixEDZW`NJAB|4pEh%>6hg1KJvDlHW`t*x}eKnE(V73b=7uF__4KCt3{V3DoVT+kqd&e1Hd zFT`9B%qY+67@{_eHX_{u(2>y|q+0;Gh0qAWZCMCL6T;`wDRCi~7{bS8A;>O5b9CyB zXo*f);v%p$gpbmP;6w-?r4PaL5FT|)fLACVm!+UWDEF`wgoJVrOFl9OQ*^?<+u|!TU<^#^8M=Xb{G|uLP|qnU+?z zfmNUbqji<-h`KP^j&!R*Jfq`Cw;Bv!bROx}fD}fzk!}qb5vIk<&tg89#B}(Yb}h(Z zgs*AWf_aQyRz43t0!tXFRW2i16Q=e3intDZ9H#aC8loLxd~Vl+2CYcE0M{yii0eW3 zR(vEr1{K@zk=O)$DZ#c?9*CR3ur{>ZgDOkK%^o(M1h_5Vd20t+B;_Ha$ zLK{AwTfns<^jIekX$wFX7>vB7t)P5cKGWMkm9~7Qw}HU6G?s?=`bpbC14d(f0}y4m zr9Hy;n>&Eoj`wc|@Yl%)>;%IY;r(S7$R~8ngzwRJflZ9?J^C(S3FqUo8Cge^i%XHeeuCyDJXLQB4F(TjgJa+eh5giAqohWUonkk(G**XPCUx7SAxnO_Q9O-M2--*x4DX_DXHu9sS zQ{YM`+S`GCo274nwKJtuMBjrDM)*n1PoM*%34Z&epFj^r)BFxg=RmK{S`?VU&tN#C zIesUlpTT5C3;fQ53t%>*4Sr{&3m~7-7QdgROJEP7U*R4!boE=!46cDh zLQ_Eqs^uCu!6<_0yrOwrUjx26*%8&$>7MjEXiNy-)%_{m04)rbe*pTwWAfUnvV2P? zJnwgP!ZFARM;)h-Y9(Y&xMg=i1odFrSIrgaVi+fE?@z%LM%epPFpUvz^;3|;2)Ftvm>$E&>?xRU z@bDC@F?e_m)*C!L2Nh$vhv%SSEcfsnG>+vSo`WW_+{1IwI+lBQ4pzo;4==%mSnlB^ z2=Br@yaah&xQCa(sVn#J5;W_|J-h_1icln>qs%gw5#9@4f{%6b0fpcwt&?0Gz5-s| z2$8G9*C3e^xjK9e_AtU%hi~vt9)Wgs_y&aQ6fXj}IF7dk!UL2{-TZBczGT$j-;U^8 zMydXFWdRm2n&jUY(Pc{Lv=5O*_#lptgam`SlRl7ZMG21X&U-7vqm;-AB*PPw;4J?( zvJAs}V44e-_;->O@~9hM9iH`1lubHa@Ehzm`s$2qg?m=62xB5v$ag1J6{|-@N z58m67Fu4d#=t0L5U)Pm{xs332T}gPfht|IfvNJr}gU^u*jO@w#PzrYL$@^Xk_UlQ# z&+__BE(M1$%JcdIQ3jz*Q=J+az!gqqx{b)v70zO`2U)tp<;=1>vb4gFdh%9V;g%wF zih76BYP^)K(5n~i1Ac~Ug#nE4Gh8cd#|S^ewZYDe@H1Q+?B0v_&kb&+I`Uk@9X??+ z7kO}pUE;ZScNkB}bh3sGQ4*uGHSCB|7+pp>4>*R=U8M7XlNr54Iy?M;krH4>G@lVZ zi%Y|$jPO}p8s^9Iu`UCz#Pc{S1NS8GS@C2MlI!IXASj-2UjlEnH$0NS%Xz~yhH^f7 zxuyY*iVr+%C|3dApk(SB;H*@D_Zg)HxFLGZC@0`Ns0cxCN{a(7BO1qO9nw{TS&Vif zT_q^?p@gqWDnmy`_^PBbv=TyBPXT3>D$tYB?SKl1DlvkAeu^)w&d3@Vh^RpyK1x+# zY9gQ8s?ge(_tp=(QzC2A4+c?!RRS@c?#uh`2c7%TmUZ(F75$(GqyGMF5P367_3xon zgH;(#^6!JF7A3Tf1}gqAxF2szby(P+x3dOxPNLpt`KKr~U@jqaC+0s^34o`PSoBoS zRcgYsj9yezJ)?18*x_2HF))WbGH zUV~`MQfhvx)Q7%|rqMjs?EGqrrN(M?O^LvN{4ITRNBMBR32Fo zFn<)){aE|H5&`dwq8@&&T>v7X|7c40kcW;iXbh!iwVx`T;W$P@9Xp7E55`h*s$&Mx z@LW2j(nuE#Bga#!U+0Aq19QnEEqVptMTZGF7V4Dx>H4T zXN%AaN~VN*HbnHH8H$2>c0|sMh9X^8=)q_d(shNE8I4D}ZmWMqzJLCv$mkK$^@q|VN@9Znh@1)0y)Fr^q(n}H0WhBuv^KCKk}^pwfin$qq=C>glSkGd z7@WytVi4?{$zx&=jLYOPF$gAR^0`fh$(ej^li|orKDUG6_)I>xgW*(0BO2Pk5IBp` zq=t4xix|yDx}k6-qg6;Z6c#eVR}jOXltl?&K@5Y=S-kHl@az;!bfpf5!BhE242PkF z=zZ~U*lsHC?Fbk*mCy7Dm^hWs^ayx`)fHuwP3b@&6igB}a7e4zPDSI0u%>D)s)44cj^$H5cR`ACd|H+1Ta$Y}=k zho5zghc-s|S=V@2juC#UnE@*^!cR3bV89GM5))v|3_fNPVb>XS%<$*Z6PG*F^9hnTL8!R(nE}=>Ei9F0Bv=HPqnyhBQJUw+(8_)A?DOQTMxU{%K zaff07f=h9ySScRdN`c~TMS_K(1&TXCi))Y;OK~d%56&;2?;pSSZf5RwXLt79-P^sH zotvo=SC@Zo_eszM{HzmXT&5Ah>1AB45f%wDuGxMM=W5fJ{?uRwCdipwuNQme&5)*O z=UEbLmb9?@MI4W1q6iXDuFdXFU@9J)cx2jQM~3V(ZE+?;9!g&Q;aXktJH~x{arCKPSn}LJdW2uRN@slHUVTR@vJDp)n&1k z%wU)DH@#TmQhJ%)-r`canY|9+0!PY!17$%QCi^c$(UIc!fub(Lt{0y~BT~u@Y^c$* z$v43!M&ls|$r*IKd`j;3Z9;Ceknwnd_tJOa(?`EBqb|ovk|TDkxL@YV8w`@i6P6uV z?wiJsmEgM(K;9%B*?bqxpFFe^^^kVmu@mjWQP0xcY4S>%YcR@35y;xAn^-luIAWWu zF@O^)^LrE7vf8kjdz{_yAYHP9bIxue5PDhRpR~afY*IrByU))erT%?+Xl)4jGvtB& zFLM-q<(Q_HlN1Sddj`Q6>eKiR9v!qLKR50UXvdy6?cT5@d}-WmFi0or9@_M*%K+8; zBO)+92#fqcujibyqg+=AE=|#*3|TC>cPr9}SI7SA2$oaBwgL}OHHy%F-5_&%$SaRr z>n9X4BZq7IuFI=041!+zbIpOm)LAX>bkwocEqeMTx%VrwGbH$9$Ow8eWcaNja$!_LSH+KGtW5pQ8Z>V{Ta~yZ4w)v06+$Cq?A3nFiK|Svy)iOa9OXuYtilrIqn%Tk3n-SGd+J&W@ z3u>dPd+|B>)cMn$y%*1^CCAt(riFa1m=iM*R;UjR;1=5jt2zx6HIct!fEHU3tEo@% z1X(V!2UI}x$Dkz><8od5yZjUkmp^8{Ux;1)NckpAY5%UtitP(BZ26XWfw7x5IV$xf z{mid5@||dY^9?cA&`wqG%lyqVeVNb`CqML4vkEWy8lx^nlhgB)5d=Cxrm;4Lw`+$w9D##?^e z9+T@I-y^EgSoB3-^J(%=oJBRl7j#d!@D;<&YVqhwfH{Hri_tfQZzTb6zZDE-jhdK7*SG%)~*H-0q zQ#ZQKrlvF%IJIeNK}pyag_+eku?|@pv9uMq2U*NV@?KV)klgJZ;zKJznAkimg92)0 zzZVzal-(XX7m*n!T;w72+>x5rEbwxHD4WFCVR0_7RsIW6&#tP1P()tb#M=t);&*MK zWz|UoyO>2cy)OX3A&NI&zyQ6!(l_8 zIA7W{OiSSJol-h0Z7t&N{AXeMhG*uDwlL8?V+c0|T*YP*eC>$zAGGLDc)U(*-bV-8 z3%$RJCr;>j+KT}Y#lps^p;)7!c`JHU8gAoO@K*!(FNGQz$GcuWQ9~TdaEQy#sc_8-T1;*qC3hH-J?8F#{K| z*ETse8sXV?Bya|l6)o9I_-=rgFetb}?AfK2sXbbP$d)0=*5z-+y(QLm0-RXw5G&F_ z81u=z=Q=ce2OK{A_EMN}2jUSq6Vc$Jzw&ps6C-BA6U6>j#;VH=Y=Bnr`aYHAgcru; z8Y?H{gi{VSist-lF>0xV2M!*7y$=Ue()!?i@LF8I%F@~i-$rUW=D#~(a=vIIlb|KU zQKdL!YS?GGh=lD)zx`|r`k{z_@x|?i$@S0EH3mpM_vfKgG6=%>pM2w0pyHlwY-jJ& zp2TF`QQo9#GR8n#ulEiLY_EKqL9(;id!HH`Lc`?fnWyS(zksy9UkS|((68*sU9kf( zaLsJO5zHYxxi{Z*sHQvZ1Y5V<2PY$p5jwp{1{rcHzW56V)|g#(e!j+Cp&Xj_&?t==>f=Rov|7I99c9M&PxId>rSp^paT-Cf zTE@g9>~enL&s5IUm;*E^Yb6RH$9_)a*qSG*a)WOZpmpoEU>feNei+4?;VDVbvFTcZx6QJ4aFTp^QPqC$5r**TW zQZEE6tR3I7?7z0eC9&u4t({dfElq_m8{U0I^AeqeYCyTItikz$r*#dl2lw;_W&o0f zx?iB3S4rr4<>`}LKte`>H8VgoLp)YnJiSRFHWuA+e~bYL?b*O`^Y}yi3$&DC96gAy zqW=xTl`j(AP{BPB-SK_D9Jqr^#riid)rZ=bBs;sWEh#yUpqpQ899w*2v@PT^DWSyv z{cMp*fq6P~^n`M$UzSS>ZCeZziB>Xo2K09tMFqn2YV$R`6&SrinZ29bl*L)=40=tII7d4g>?g`bEYSbi4=liC*lUt zD*xeF$8Tu#>ZMmTSv{qcyjL~x&bySw$hS91$*Q++lX$DG^$7M(2h_1boD>tCmJv$U z>HovsLPto(+NY4qLuX4c#aNj^fJD);Q^&-Gbzb2F{`#Pr$d@Viut@xMA1p%Ze$TiG zdP3>}&N!Fgn=PLNS z(x7!RKnS2%g7!7xfaq(4_tj~6Dz%H)3}VbP(Vm@fMHP^ zNVicu>r+~3JMw;ZMNsQE5AuF)A2Bl$Sj#APO%yAB8|OM^*inV=ctJadH2-dOH1Eqc zry{sibvw`Ek^73*^g=;9JJ#yPeS3Lgpn2qQlrZs%kj@by-@SBxW!B6;}rh8n^Y3uikFR1%gLkBjLDa|7hocJU#auRGFh4<#vgLigRocL`b>;CesBI`V11i;9b z;%tBDJi%-#iLE}#_tObBr!PL1r^3Ssgx?-KXNcc43_teIgw`ecz1|f+b$Z$wg>7_N z>im?Gfd%8kzQXQzj7$5JHvZlRHJxXWBxQ-B(72yI*p8x*OXZ!nP=Q`&KGm$a<5ims zI|}~;HhjMcrCx2|!f=8ED>EE-vxkA!5`^pbQ<)WqHbRpjAj2(1<4#dB30@w)dHt2- z$O4!B0rN1w+y+51F{2GmQEgE!$y{!)e0`M?;FI1)B5v0k)C|0*SnD!@f&eW@VfGy2 zqjq&;yE3@?;(1E*nEK)=8jrstgsA!|TkLK5W3+=pjpcrDR+)Goi54nQg8hARb$WGm z@c7Ik4Gr{9KZbj46*on6aBo316w9cYJxVe%{RMjMKlwRo(W8!-3u0%=3L~zld`Za=V$znuz#6O zN)Xmkte9jgh0tmra~@3^yeRzG>wd@?0b5@U`r}KN-VC}c2+vPL#WXKkaLkrJ(N0{L z?W@-i)-u~4Ro?xqBp9BoyYo^@o@$^>XXly1D+(dmwkM8M5FTanx8r`}OO$L8o%GI6 zTew4YXzvCa8XJ{z*Iji&Nq*=%?s!=`RT+D`Tykn){480&|P=YC>ySuOk$wha3aA2ji z2l0+j@0p7oKQu0&WCIr}Qt#MC20~MHzf&qG(_OvsU~rW?5K~eX8tWjWE!ILWG%<7K zS)Rp$#-$k(w9p9gDpGNkcHA|QLgEQ9)Fym4XNqml1o*C}9qO3|(kOM?!Z+~nn$Y@yEb;$Qvr3J zUmL)C#}ehw_lOwL9I~ezvfPK#e^Ps+uZPgy`ovl+y}ud=zkY%{LZcZten81Gm>Wr8W_LUFZ` zkKu^$66Lf1dSfh3k2}tp(sRW4kE56_8Oo6%w5PBd?$PTis03{PpB}~t^$bTd)s<+^ z&;mErciGBA@t93r(q@+HL&v z?Td5V3axzoXoy3rWwkSdac(b5RNIZfqF95fN@(qDEU62AR4Fvo~NbY%ZB4l<{N~;2ywp9#%2u>W=7;URo3mdyw zo}1GfB(D6}b%>Sbq8Yk<(yy$>^_C4Cm+RVmM; z1Ua701JSpK7c8B^<2yx~fEcVwttOURXqaa17H97eY5-Q?eg=>1dFfLlwJbq zZ5zI~?A~R~Ca09UpXKMGNX1;m*4TE^$aGh1VH$AjPt*>wYVsIsHTa@v0HwG_2z!bZ z!26~$c(A=l`m!l;1}}ERKXA+W(t$jTX;YsP?43KRg@zIgH27T0m0DQOzewvKl8WBj z^e|*)Zb}^`29NZ6dx=%(aw}Nuzow%`dZ?9lMI{{29ly$ZEHBHBlx|lsW?f7@4)T1u}057{~8A?LC2vnysS)vSG%pzP$moSpZDp?T)MT%HXd{ zU7@0ybi)XhAj#{z3vk*P&g8TsdpdC*1U|z7@GY5CrlwfSl4cAV!I?bIVyO2k8TuS- z@lhC-c^PnOc7i=z&jqarkE_29o6Xv%IsTlNzD}|BN0O77zqkGx@?Uq`i8DiWp!>By zTuF9(=)%;71me7LPxSkZ&fu95Y!_~SM!rYPD4DavJm`^j{Mnq1KZl&jNz6ZH4kCYaS9hAh>u|_U;ige2NkU$vjuvL{FR7H{Nl(5H%xRN2N|TIx zuNftk5}6S|kYtX}?fh2lY=rip3nq^yR6Ts^gL(6_wXE|-jnRmm86!EPw}jIc=(NWb zOMjfv>Ep{)Z7bSiccBfX{9qY&9{krp1B$f+s6mPWDbV^ibEZMcT;@c;a7*ljYcW=r zpg#xwvpRzhi*<|cB4!1W*;*_((E*zbBg}Vfjj^|*iYX?y({uT6n&%WVUQy7#FCMbF z_YE&Q1<8odU)}0|$eSF3+}bMm#SK|}PCuhehW+MnMekIEdnNhspYFLRfrb(jcpiA> zxiYJNK?b=Ds(xv*)-RV(HTGK!i;rl>9g{aCoHDJP7S$`}RW6V`%iV08oe8hO0}ka- zuGPcBJ5q_IZ&ioLD^6B3(vbU&%N{)JId^+Q8>D}^>@lY(bEYBC%Gli3%It5n*{>D2 zflL0M-Q3g37fL`x$sfA9cNG$G4031;GiQ*>JM<<8+Wv7MZ$D5FuqFWHb&%&oGRvs5xbVl4;SmE2*Y37w? zCL6fX8A`o&+6wt<{D?!rLXz% zmnlB)dM5!JTh!k?a8K_U&ed2Y7)~`KN!nO1GRDJqQGwBQ=~Hr3;=8&F!F8D$`K>I& zXd^7IBKC0Wq3ouPEUU8VP?pY1w(B|K3w8&J#-?CSGQ1eT8S4`8BG116K46i$sVqHV*LYKA+ zkxQ@nF&rskKa!`Nc6`6B)(Szda9m>2F^PAd#h8H-)Z>;-xul9F;KQIE_a-hycn0^0 zcilv?6y~_#(x~ndO!L!y=8^9IttpU%+ z@Q}Wi_Zik~YlwF|Nnp0*%9IEX+mgP8;n+r%g|~IJHJdQ@SdZ_D2%$fWwB)WSb7pN2%VBFxN(|0iFL*({I|cfmnu& z260<-^Fw{st&xF#PF$#;8o_jnuVdl$ivdLpsjxt0Z z%&?-zmUAM*2t2Bo^P~KnKB@DpQ!?8~CjG2k+y50}u}%Fl5we+dth35uVG~|s(mX7? z(pVPzKBF}*_tiw$;VFB3g;k3Gv6*}OXZnVzS-!$%ul9e7VF16cB1Fxj!oba}D~&&4 z#KHQlx;%Y2GT>$QOq(q_|A1JDEuhrZ{%`gL!K)>9k=gtBpGRq7_z&JA^jIP7TV(&C z`Tvl2`0m-tiU+IyC<&5pe#OH8;A?t0auO%(-yR#VC5>Lg4P{cX`NjVovIn!2z9YP% z+>sVbpZ*}{8262}!RHUFy@NBoV1#xP3hmsw`5EA;ZE`tUkI(3?Wxg0zvmSP;0rsfE z-f~J)JDZ9NqDNRYFs<zb5w~?Y(x+p5O(nI1$oq`r^ z?}1(D?W_Zlx{wY4!Wfns$+tg!Ykz<`B>-0&hot2nfCl|F2sEa4c@HqfOjxJA6{W}7 zDE%JIE_bV@c@FT!v`cN~O-}v6U5%^B$ag@+Rpe-BkYL-VAg0oN(BO^UY7N|C9`=!4 zn{oOQNMJ8W=|`Ss3idW)-ipx}{86D(TZ5KMo5loq^A<^Fo2p?@#hi{UzEYc^Lv;?{ z<*m%&*Jhp8Hx}!0;5#)pcR#9`=BaF+F+)p@83CfD>g!kY8Ao&&de%fzj4tYlmBRU)JO?}r&|>A&eE|W~a~BAt|a!^#gv(&)c2amJm9`%7o9(QEH?b&FZ@$ORpzsANg1KN ztFJzzL%c9%O6wA(Q}>#H3kr&ZGoi#?quEvm5Z&AD)}}7;we}xRf!#z^b4#Bw(ue35 zRXpgJIHkTFXE1Xb#WCFeCX%vzJ-3s@ZA2-Y*3`y1gRifz#m{^pW=H+whmByFP3UrFrGb%o7t}%*M4B;g3#}$k_H&{I%ZHwpT z|4KPB{raxowve5JZ^ikmN1irAQS=Dp^}du0AFhVZ3(7Ubotn;aq;49WB?qO3w?f3pIp82;WRsy- zHgG{cwku&oXG;u{5OwSIko;80M;W3WIemK11*m?~&x&dQ5rPVWD$5mAel%I8~;U2q-SZ%I4M2OOB?DV0)VT-6P7JryFXmdOuh;N#m4!{8f_x#&zJ@hA4$Ktn!gJOCcJNUtO+ETfeVcovbnMN; zEv88tq(MWp%mOb`Gd%$!v?ApgIb+5u@f&*nM&16io(xE;?4@nmT+O#OlVRI5Rkp?6yvu)O|Crzk%ul@=MGeuK{w6v8Ki?+RLd~Pt@#!e zBtgn%1;yTK!ybQxfZu=dh|tz}3_i-|guvOk_ho+H;|+)>%w#+;t|W4xeod3QwLFTV zY(~!9JGfa%BToXKYjTjXhkD*0hy_6#ARpUiA6vFKnLkOIacbTSz8$eSF9~^91b)RP z#{8#;eT$26ve@wm!DgPymL)#nE>i`{>hH|g#!_2nbO)$_6?S^4Qg(s?e;j|_$%+|= zm)M=MUCCa*OGT|=+wwA>-v2e)!UJ60_SBCUWC^}F9=?NkaHn3d)!E}J7&Ra{8J-nC z8}N()2p^}C{K5%Qze=q$FWn^BNt4j^H3`=4){D>m0b_&UPL~39(slK)Zkqia8Ji-hFpkoa=~NG$ndb+t zBa?AWOnxyic9?*8&L)q!E*;!slVHnd3m;C(5?}jJEo%45gH7fw#*BZ{cAuB|3;6en>9V~c@X zsrm;UdvpEucPafm`!l|PA8cZQV|i@zG;Oce_yQ_?caG7xVPehZQq3_F?J1m(GAVnlsvD#lXBR5T(OaIWd08~dpe|T)QIDy55^rE zfFpqPj2-nbonk^ZKM?A*1^dLCW8LjWl8dKr4i;|NHMCw2u3)#Iv37AqI(CTPndai>{@w4`oAo9bQN$!Blh9Gl7O zV3FkaUdm%L=Dq^Q53`)m%&!p&fI)+p^O z_TzSSMQfaO(nK+xZCdz{tW=-F*k76D@%8U+vd+feg1NLh!@8@o=AF~B%3|Qz?%u4GLyHo#P_j0vkdLmbVj&QC2w9h^D9@q5RKhq6(IY?SSAyR8TzTxw2ORJXT#$<&(wtW7fuao@e@l`>aypYekQf# zthNj^V>6*F!GB7tI>A4NxQnp@@)a}fm{yxsDDY|3D+KY}2RM7OL{Zx(7REp&Jp*v< zmqZ;YA)lva$g701yzJ)pPNQsz{`hpy^NJF%{vm5J5Z`p5(iJo`Slc-Zd~ucT3l)8 z+tHarwYSNb6Yhsp^0OcYJ@EVCS(o1nbcOqZ0QbI$x7mF-k5!@Xy!asK1SV1Xd{k0n zSjJ`46zcMAWcz40LDz;RJrr+A=Rj!?XX8jDNb=-^EvHcO)bihmz6rDqT|33pf|us9 zQb_`=Ptd+GtzD|#N9PaHk^|eTYp_f=bLv966$+68 zfcw~lw<^Q{o%P{~s&O}}$sU?9vqohLGX!%CJkZzqGsMY$<+Y|z=r51Ca^@D&>~Jn> zK7R`FS-Q%mk4)c~>Gyw_B-Ht6zXFZ?^wEvn->N%YnR6E(uSIEjo*M)H1XRSLYX&Qw zyo{}pRY&uVjh%@%P>nZBw-qw)dP7o+VK;b;B615}9(p&GDA1ydhR)+hJyIhAtq93@ zn)Ig?Mx}?_p`X|Rn1${C!e%|h@%agLI1dDubAQZRq8&RjgMKb5m&$JUe2UWO8<(GL ziu>AoxfEGZ8^Kh=9Yp&TLHJeb9He#h5pldg~pjDzF7q~ zyc_7$URCvR^M3C*l(GxFtr{4%nu3ZJ6Q`|Qm2B(8zfOA~^~7|+Xl+^-4Dc!uVpknd z^D-hHJ&Y4Bm29xDV5K}%@%y&>0x~3RFmAM;A6InK(PUq)G0IL0Oa^Ldk8&+6rf_KL zc2Wd^t=Xm2<4q=(QmQVEs;g)+Xa4MWZ!M0vE2Y)tCMpOUBZ*AadQQob38Mm?huC>| zskj{5X5F|B`w&&!iKmzuB|-*t4?Y*v%#Ag!WvxQxRn)^OSA!QFnln@>Q8XH#O2llU za@9Px3COklFJvygf?8N27;FM2r(#j*_o=@-m~^N@p>oC1%6Q2WZLhyjs|4)pSYBMk z`I_h)E{SC$$kSVjyDD~do_tVg3+96Xa@H@j{(N^pOoSHv!C6JDOWpYRvAejUx8tng zF8xc6R2a#~Y3~K-lN*W-iXETV({}L%j!&WXsplkNQt8Ob!y;LeK*bJCr_U-UcMS^v zYzJ`eHoaGH%oBrrr!R3V+Y3Kz#m?E8ZVW5|R1X=n>oj25+((BP&NXJ+g}ZItjFpBu}KV(F;$_P)c3&PXSqTRLkUUzGM(9 zXNtT$K&SP)k9&-t$NPG&_m}yLmvYSCS4_i;yz`PN=ElZKr#7nxp+zqxy^W}0=49+ z1#%z+)!?ieIB;i^i2E(wCAWu%@wx*=G0bc>5RK)05;Ws0WNnHmDCNLp!6?Qk#7^Py z+|EXgkRjMpWr8ZD-e$Aiz(_)VJmBTU)Hyu^OnCDRe=$t>H$~&X;P`J68~^yiG`>d~ z6$`rPg;TSXv$Uag`}u=p0z)oZvtfXXgUvdKJmQ-8dDm7(cvl>QyLpkTw3Tn zyX4qby`r+{l$JsE{!5;X8cfC|C*fw{V3=LFw4sSDEGVrID~~K%|JglagE?$-jB22B zO5ZQJ?&&vgs>T8MfC2nP(S4br#npqFlHv0J0O|Pj{GOE##%k!EBSR=NQ%Ky}!@7vI zXKb3kXv{)4oI&glvo&syr@ZFj=4`P1XPTLq?Shq*%@+8bVD2MQ{c&gUA!Nh9OKou} zd0qq7MEvrWTb+7`)+`bN|Wbi@ME0c!ym}ZqhFXr19B9s1>PQ- zT_>q*c=0;JPF#A+Xl4HmPV=#PcvB%Lcg1F(RJbTYi`;P z?`{rhvc35>;kw<1mq^c;+cv{7*OR+uIKwf;JuLMMsrs0j`{=S5|Kn@Sz@i!?d*rco z5T%%a+--*c(g}rJi$e`W0k`V{E`b#)aP{aQwuW z;%%_YesDiu>WZU7?M_NH1YPmhmM**lCAcK{{|+R+K9{<+I%%4wjm{A2QY0C4LuxQN zv(|AWUqrv8gvz;t+o!E?7VG^AF zrGQDUYyo5yNSnJ8Vw!vDJrO8BA?_g(a|UI&?)cGvWR3vy)(8B4Y`B!Ex`)*^hT)f9 z-|DZ!`2s@(^4udn5{3wrINX@o=e{Fz;-u6dGM152nnu_pTKMNPkLRQGjqgMpb|^Q8yIfHxn8UcV=s2LvHZvJRY$=E! zuIehJ;qqcyt#5|Ful1d4c#>X^nzhR0`QA6ryA|Z#>f^Qx@kyh{zok6~5{w*`?7Y46 z&3h1+CR~I!Qdz>0U2^f+Rd(@Y+?=)Mb6671&C8z5*-MGxR@F^LYZaKr(>>8h^T)pu zqEBDzuiGMm%}=UXNtspfe{p7^sv>-rI*@9!9&x2RGN_B1xyMTZe06=M;JtLfA?Py# z9VqVBn<+8@S6!D<{$GAdDNWFfJ81fkAF#U9Jwe!_Z`DRDdUH}^2SG3p*KaYxt^U|9 zc(})VlZyZJ$J^_HdPM*1IonI-2F} z4kZfZH#rBd#jU#hbUi*eCM?GfS0-OzJy+BmSbb6yM?G$Y z-y}3m3gf#`*El9m>b1i0B3Lzl@VB^Ct?onR! z65a)AhP-mSId=YxsD=lu(#E0qjy^7rw?w+vXux8QSvIim=A=uI_Op`cA56n2&nWOh z2MKslNk)k`Vo1$-v}NoEF8YW|Nj* zO*sA-O(ry*rvX!?aVLpU?i{0%(dmPULt7{lDYYyly_xb-ep9dHwH7eI$r&QEu71)pB8|qBZe8||z>&ld4az{6h2Kt8kTpC?vR3mSop#aT zt9$(wyb+mGZH#r1LhLnp*XgFR%Odit+y1x@H8J3?s|GG7vo-#%L*^&LZX~s>fY~i~+be(rMN6Luu9nqhp zZjJZ)aCp*Tyu1L*G?9ffH_@yLrX0Wibvz_uyX5YSB#$*f#ofJc;yri)rE#HawP>mf z9{TMB*xp+*c=RsbhWgxPqrQvrUJD^B2YBfTBPSdw(hoXqf3rhQI~K34-h8^aLn=Aj z&>9CwM&`&<-wBZnOv%*A!jxo?**v7oxQysX z3+YWf-41vReBir|?MTd*(F^Z%&3!zH`iVm9AcA~<9~hl!ukr_8q=aOlASZsuwETr) zAzh`P)J0|fRawCEV2c6s*{WwEzPu)$%s&gR7p_e@7Jm4B(4w37ZLTe;b6$R-w~B~g zJ?iuvA7mUt^-R+rDeAHEUdykKt($bx*VbJHTV@}UlgT_QrjT1dU0?a>$`ed_c{mVY z39Itu{rNS>g8PB>pDUR~Wki2S%p}HuK$hFoW=N>?SNHYJ&Q)6T`3Od}F`K)7)vHFI zb`(^Ix&!4W^W)05KWO#M{9VwwOL&MUs1<;G&Hjjp3x-QL9r{^!k(sJ8SD4(Ehe(eU zk$3Dta|8cM**FKw<}JwBTlZkE&MwY;mCCD}pOByY(ECSGtchf@mj(Iejk3s?C8EtM zPmV(y(JP5~9@ip=03TqHlikog*}kqe@y;`>lB%tCwM;^f;L+3o;@60w;qEB55y*(PSoM^ zzk!n%vQ$p7yuRa_od=l({k*@w`Oc6p2l=)lm+_=WOb*S0dgk&x5a_?&6u-NEwT-Nq z5BBS+99l#2UXhePzF9)gN{+uWvrfsDWUOy9Kcg(JxR0msqWMqdoX0+;*}ik@N%ldR zRmH=OkGjGdPw^!1cZvd?~Zy&teC%gaA?mCJj4$MQqnROZzsNX;{2)Wr)+ir2iSRCGvh>aVfda^O;1TAmP8` z=`puAY+*6Il7J?Mg=&$QOTPy{(B#l<%K#F7WEhh7Tiy0e`x5HvrtqgsGo4c|GX3I_ zLe**&>t-kLd0<%J0PBGP!Ef&1FF~<@mT|bN{KsWFi#;qVT_3WpZA1|*tcPv!fDv)H zxcZ^oJs_wf!!PsmuE?GAVa{JA8=2#AiOUpsKEwcZu-FmC?6pw$l8C8{3k>;yj}dqq zq(?SBSy|YdDBQt>b-P1*yW^gX@R@$q-N)naZJL*Fw;}ns8T%mYQVMXo*O+%|)`gH- zoW1dz_Sx`u=!w1CKpp%3sh%?z)cZGG78lTv5sPDBDrkMjBr|tL=X{`O!^X7H+3lei zvQ?x~(BV0)YE7o=&Dd0T640nkok#~W;rt^S5ICf{JmeA_ErH1I`rChUcAxk80)0oUn+(+1zQ z)x-`%4RW28mFtuMv-(${v^~SG(Og^#Uc__UK?_qV!zx(%1{#FO$v4@|%hMCOI?DL>?d%?I8w+8}Q_9LRSb??VF zJgqgpk@>z~XoJ@Y&&~-Ugrqxrgcfy`SJID!nRifM*1-JJoxL7a3y#%|8r$MyL0x>( ztwsE*@KRGCMf>@uhUpm9@<`sUzlfo;Hr0^#4>cVPP2W#Vr!?V@ZhJ$+*$>KVzlQ|{ zU1s|O+XIzP5=STnyurplYi_Yw6$Q?`Z@cL#|p z;(jpLWu1%~&#Y$qOHN|8c2*?$$!HX+KnF=KM2JkOW)< zN%BNpQCI#cFzBZ*^nTf@vU9;z+G_`93X8JOf#o5@VvL>fvt{5o?9IXLejVL5iK>Fv@q8VaO68Sc#v8UJ zUTLb%w$G{smoYG*u?T=@l3gRp$b#~79$R1Zek?rNSRNFFrZR2X-MF7WZCOF{XmTOx#hGxgB)|g{E23LeE@W$HEkTr;5wvt?Z>6LG} z=Sjo;gL{rdsID+C_QdbNqXrQSp&Z_P0OT|i9wpG~oy`IjaJ$IYTzZq_tRUcA7<^$z z6(;fw`=B462ad$Y&(ioV(wS>8W_#6S>7V#;ZkHywlVK%LQiEmt0Qyv}Te5>w^PR=x zIE3XPfheH=iSkuIWn>?=1#zr=Kb1D zt|)XYq)iwY2J?@E`CABL$ZWgH$an5U@eWXSKgQs=B>_&pJA9f47J?AGNLW}OVqgt9S1$bUqvoVA z`23>V>;~-(dtvb;e?9~=&>V(!Rn&!l6{E2gr2Z)N&vjP>12K(!(p7`NzcYM%bu4gC z|2Ol72l3Ttu{XDij-}FUI})5hGye~GK!?B5s_~thGe9i%y$nnPQC=T~yvj!*uklgHtv-tF z1|P+ClaFG%#Ybfy=KzfG6i%IbeV| zE$4dR;+)%ntvL?>J97RCjOTm>?8^Bbn9dnIaDZ5mQw%&eXC`n}&d-2ra~1&C=PUtU zoRb7zp0f&gWzHtxRXNuHugTdC+?w-8;0-zV18>UNH4v?wLpAf?94gBlxs;Q;at9qU zK-`;K2>f&IG~mOzCjxino&Ydz+ zV1GY%6Y%5Q-vd9(y$|?h?(@L^=DrI2F833l=<_Ym+vo5h14K@r=|ghF$Uani1$~N; zs~7te4h6mMCxsML1sidf$2-Nd2GHd($mTOLLA2a--;qOM`$mx*;iY|<`C_9HYaPZv3ZO( zioY*X@lV%2KY|n|pM$YaO3sGp7mauu=JlTB$cQdYk4O4r;uRm|4l62hm_zjPq6oWx zTeL=**E9W(Y?Av?c7Is(wsL#=*ya#@;J8R18Q&U3U(-*e+h3Zw{bjx?l>6=eGC$h~ z6MfN`$WS3tGukFs43qwkD)Vh+&K^nO?jO0BO)=`xQIyVSQ$6|8zet&nD)Wte8D5N* z;XR`zy+WCh(XxH6SMG;L%kUKi>iYue_KZ>SE7MaX%{9stV=3I$`~qcq#tCurpdwvN zAoth#1#C8sURx%_t5`WJ%cZ$inQu-f|M?TO8Du^_araCze?M(;y-a^q6PfvAw<_~t zWxkFzp3nysfw^PSUFzD}2>w?&#aD03&wr9+DJ zv0?SSGPf-e;{GAWPp^zf_t;kTT~w8~O@(h)>2;{|Vk*5eReEvtoifKJq$yIA@8>2I zm}Z*HK@%4%bE|3gkonZ4H+p106K6|v*EK5s>r}kTeCJOpKliJAJgCAwq{2O-@}taM zkE!xJuD;u?;!)cX1}cN9KU_;}%qg?}&ncVW($!^iw=%oSsv9P{Fs*T#G{Ml0$m zT3d8w(KSUk7d<%kiLqaeT`=zSaUJ7UkJ~=(wQ-+}8#umt{KD~(@yo`q7{7k}rQ?4+ z{?74Fj(=|a>*K!~KXk&e6Mi<~Ovm;ANljgoyOeW#3?Qaokql%u9pPnkbu;grrP#+3C_E}OD# z%EMEhpYqidy|i!X=+ctXSm}MG&y@b7^y|_=QxBUuY3eak8>XHzwQXu@>dL7br(QR8 z`_yNremHgiRA1R4WuwX_l^szwuk7Tqwlbq^L)m3zSCw5?_Q$flWgnD%TK3S}-^yPt-&g)kd0<-qX~U--KP@$F^|bZV-k-LA znrC|7>EotP72)Y^(-YGd(pkLF#Ue;=yMSbx2{Gm@9rO=84}SrQeHsNVZMlW-N-gBBk3zi?~B9 z7Jo!4cZ!I(3n|?rqT(UZ4tcjjJR)MK=QB~yOCjyX#a~6IctIo}?RJU3iDj7bQsN_F zK(g%?pNq4=r!9wM+avaimEs$*3jEp{@g4n!9df2=7l6;ZQ24crL_pgJ-tG6IpLQc; z;G4vu+IBHiyIl;^?i7b>cY(jVTjXo^iqYDAqCoqTDAex9tnq*-)*cik+C$*y9u_mS zonof;m^ey%Qq0zNi=g%w5z?L!^R;J1v$jVp)cz_KX)lUXw7uXvKM|*CpNiA9&%_zp zKGC9mE*5KFfZzO5v}<39nD(_eQ~QtT)cz}$Y5T?5+Bf3o+W*9P+7Du-CbZR>uC39$ z+FH%0U9S1HO0w7%NaT7PYuHc9j4u*9j-m1 zk=helzV@V6s6DNX(Vo$Yv}d*P+Vk23Z4dfq>o726Vr1Uk!0~za6W5xz z6L@^y6Ta7e-O|cNo85%*iJl#(3+9 z^AM&epTgf0Am!H6*UNHclMLpkq=KQ9z8qjYqYxJ8TKQ5tq`>JGvpYpQ}xTKuoJblKffDnlpWIuZb z#c;_CD$y3EY-h^7Gl~%Au^HT>7*9X)h=3d4J&MA=&-fAJr;J}Re#cl5pl^M%&OrD> zXAxx-&W%H&zCpdT@d!W_@^>RD8llNeo(3oIl-T zio#3ERsGvx|Ga-E@aTXs*zD(*F61?LVb5T*&YkOZ_E*{AKR%V`rPC;_KBx6L#2mRY z9yxwxZe>0nIm3?O$d((2VBT1qZ{`2FqC*cgQN|$W5Sf--edH|t(Bd+Ld6vJG>(QHw zpW*hR8Th%PQ{fv5Q%;P@gt2hvp=K+{7Ljcc3vcL^?rfb4!j#*MjL#KaM(J|Qe`S0r z{ETqtT*h;6X>m8nC&IQj{^o!iNl_9!RCAuOr+%hcMc9_%QOFWchyE#%azV#;whbM_r#Q0oC{C9r*TULigQ>MV=p2+h+66dkC+ z>ks-Nd;@u}Zvg180Ckq$28maFgFyK^P!kixV9>_{2Z`5x zhk*W1pe`mN4oyq~4iazr4h8)Upa!XJD7``eqIAB)Kz|FUK^`0idI@ll_^DGUJA?+`+dXV`wdWov^N6uGGLDQ);ALL?|_;(7P6xbd2bZxef{~M_XBE>{zlWA z9w1~-e*t_;fI1|?Lio-G4icS#F`&nR8f4ER_y&O*q{MNsS1?wg#G0sPoQLx1kR1s_ zD48aH##n>W=;B1iT9iN&b&RJY*E(cM!ZRSJYLG1n!;n>V$e1%=k3bsMA!`!0LUz?4 zYtDkb4Q0|Ga~=cxQj|l3ta%*lNtA##ID?=VjAtRII;2g)<;brlRseO#oO5A68>owO zkzXAW=ZV1e$fGVcKJcn}V;(5r+ zn%D!>AwwJVf&t~AZOrAMzYC--ydL1EkmohX)aSsyPy8JA&w;x55>mAe*?Ki7-vD*U z)@xuF+B(>O5QG{eY)$AuUHG&Ou;)V7)YujNzfibAv49aZAIohqDQ~=R)wA<-@jJAXNk9H?8s@+Zf zN4tmm4^S6pY4^dt9EkSS?uY#v?E!iL!+5Rs5WU_2>f(BBC+vUF9)*27<=+Mru~h21>@t| z%b+~LxLex`%9B7%Jf*z~`(GHJ)&2qetM)qRFKKVW{x_f|UeVr${bk0z+Pk3qo$)p8 zJy2d{{D<}dDE|cN;&tsK*xvx^;%)8Uu)nW;3j2FNO?;^BgZ%@bCiZDx!2TKIm)cjL zdfeImV+`p31H}(SAJc!JJ_bbZ(lre|jj^BZ(a_Tv2kJgh z1~3lN1E35B>SD5<3oOz50!#J&pik2W!d}ieT^|g}5kOtc(1*Z&Bv2PK^`WpI#dx$n z43t@n$LM*W9LspTJ_3~EfS3dIQLvxD7}Q6DG6#rxPcMYMlCfGZ0;LLw*-sw_`&=OA zJ$(Y~A;uH+Nubm)*6EW$sb#F!r-0G`)J3B{750<$a@ZFFHF1hQ9ri_xr|L66IgRlQ zeI_WU12wT&p9OmhV^}{1lqEp)aQ!%7hkgPmF(770JqS$e6`=fFuY&zt#`E;KpsWPy zVznNEeVu+H>}we}>$RZ#5{S7@uZR6Ape}CI=fi#z;~(@UP__d#af`kH_L~{+)fa+t z9}x4Nz6kdFfx37|KNa?efw~BIPKP~*v5%((lw8I^o-puGPXsvB69ta&v;*@!G2m#= zQec6n6L^FtNiFMH20Y4RP@8(XseOTHDbI3XrKbm2?KubZxs3BYKL@3Oagk>w)u(4Q zaIt3%u+_7U>d~L3=D7^?v}Y6S24j!s3Q*1lqEwp(|wgESKt_R-a`5nI94%EeMo*QAm!?PXs+Zq4Qb2IQB z&#hFep4)-DWtd?sEcnr&j7#mJO}*Fvj_M;&kMlsJ%0m^^}Y-o=iLh&?|l_G z!TS&3MDOdsGVhx-2EA|7xbwbC;|_@N<$Vu$toH*NS>BI;$9w-xBg^|KwUKupjV7Qj zYP??nPxF2S%IS<@?|-OW7~8!2L1|}^o|Dp%Ug&r?|X}2e-DV6 z);kXN4}hBZ*gFCCj~GAmP6A~g<2T;PpzH@~;ydpY*uMp01o@`Io(t5(VZL(MhXOTm zxNkb_!x)GAW&lU~W`bS-1PAMz1^XDrvA$zKDFSMu*moT4lNe|DP5>U~3j*i*Du6%p zRRK@*%>~x@LI__A)Wu1@6M+kTwZKKbdeBc{Z1v3tCBhi@HBr0x761+3Lf~@WBH#+& zslXoJ>A- z`I4}20qWug-!j;L$9SX90Oj|LH~G3j`Gapc?Aw8u$9z4o-^_TM?;PNrzMli{@vQ{z z@~uXg$9-#He~j@7-#Xxvz6*i7eH-BWly4*Ke*tRZ1>YsG|CRAY-({fu4G3P&w~6|I z?+Q@f1A>?HZHD~=pe{c2{fb)Ow*~mI?`q%|zH8z8B~TY%`L2WgYam9bZyW4~_^*e3 zFyj#a??4&qzY+FB8K?TUgHpyg&3`i}<&4w)w}Ns65F^xoJM72%cTih1*8A@SHu>)c zF7e+3yxo5v!rTGGyyU+h_<;WbPAP{|Qi@ z2I}G&|8C&3{-;2B-v12j&jB^D*Z&;suQ2}IzXz0e{4c=%Hsgo>zfsNjU#6Pz?*)G1 zf0f3F{~y48{?~z@``-k9?I(Hhzy5b=y!hV(e&hduB*?%=Kt1qppeOJt&>Pr?RQ!Q2 zVD|yRlLWqky$@r*z<)sL&p0r!ACv(=)Op}rs&gP#{J{TU4>6t;_yKroK=WYL24V&a zc!1%64;T#ufQdjZFd66z>peLst=*@`%{W(h!G5`c`nbQe-E>IVFIZ5E~oMpffIRoSy>=b5;V!m6{J&tp$Mdv|QlNw7$R^jb2IDX#;@` z8oico)P?|?wV~n=$Ueiw5RpI(MdCp{4|4Sl{#@WzzYq9Ze*pL!zX$kxe_!BDetH-E z2me6eEq;0*eVcy>@DBe_I`#DrgJip_j|cd8A0P0^J^|og`s4zi?$a0eY#(~%{CuB* zz`ypP*Um5Y83KH%&rtDz_*b7{;u&##zd`+;5wrUp0<7$JXuto8ulo;$jQZyR`TjxL z-v>^Gw7F~GDB$A*M+5&dun_q4z#`zY1IGcMA2=wA=Y_pdnrinSlC{p03`HuoPfq4?F3yeYpg>r-B> z{Z0GDILHjz%i8bQ+^apn=BwH(<47j2^}JX@a#OwMHJC!1?|B>MZ0$PF;He(CZ}c2L zmBLRMcw8Ig6YZHnzwGh~zxLdqtzACQ_YArP?uL5E+#c^LdQFdkBIrH65Ea9(2}p|h zPZPHeCDTp&zg}qDMr6}UkIAH6)qhz%nI7SDgbOao4i`Dh_7~#A%|et-k@nAF?<@L< ze)t<8`tW;y>b-~HkNWT7VwlLo-*Ehmz~4yx6^PO3$794e;CPr5@HY{Elkis}CW|Tf zE5%=#m@1AGGsH~%9fiN6#Vm2GI7S?YzvJZ;l9xDp4t_fhUOtB8r~ghQD_F zb>Q!Q^xHqd1%XV9KcD8+259}Y;aZ+H0)L~me60X~ zleCFcRPmiQh_*~&4jJb0^qDZ%yQhpR<=EO}Yj-?)yoe{;k4Qw*rLFO}2nD;kqKVdM z%A#6?(46l0QrlJEm5wD7^TLVNxFd8$G8Gk}>Ug)&5nd9H3Nw7u(r7%IPA0^h?zXmQ zDwb%^@(H#k>!N8Z0k^XuoCLwea zqQ1VdQZ&^DYie2=t16m7sB5aPscLDeXsoKLYnij4y1J^dB~({kFEXR3j4tW6)2TWu znn>3qZ35TPG?UDg*xb_<70uBV>4m8n8paA*9dkrmlZ-4y0h-dOXt-0*rz;{+?m6t$ zln$q(ZW2PHV@Bh1!bViU3tcI8R+M~1Z7dP%49D3XN+8XKR5B7Z3?}qaTcC&IO+7~3 zQ4r~DLUEAm9_6eKM`CeuaxpE>+HfM=PPN@@rPoF~lPRmA1=_X=Hp^Y#o$l&RbG4%M z&TK7c?Xv8Rh$J1&$RiV-UxZ{ZR9`z)W-PH(G@@fsA8}T;qEYp+y&)M(q(!I_b=(~5 zjLQ13TniGY*OcL)GZ#?aodE(h^EbX zLAom9F+?NWeLonFg^k8&SJH^3sUpph>zGRtZLxM4t}@vfjwS3c=pC_$4A3n{p3`B6 z>n;AwxGL*wT``^98Sg!^jDWTW8s-SJzwL?IYLdg=tcXxUyc>;&o<^Cm$|$Kq8g_*E zxSP5lVoYO%p`V`>le2^hkda5L^wD6VbzwLi>9EqZYoIAgQxOO5>_R?z@u`fqg}dXu z`BbG+Nz7*GS)t}sti7FQD4q|h&I-r7ITO}Ewn-uW&dN-6Yz01Rj4tbrVMK`#^=P6? zb72Z|G>=Ufy)>G0vIFnb62@VB+mbVsr^l#X_0_KXAd z6oHvFvb35OP5z9=w_O62FSE+bDph1E8c!OSQai)xv}1X9Q-ez|A$H5j!|h{EDQ;@W zNFH@$S-G3o6hjF!17ccpCaav%uo#BQXrd<=kGni8qmh_lwOK8V1m(|!#&DuNY7$g~ z*+Jwy?WCYOQ6cFb<*aRuC|jLnYv3#=Q2&@s9fX>2PqI60lg+Y7dZ`LU42PVLvf`2a z!U1BFo)zF3q6hfU>=3>C(h!Uq2l8#gqKZn)@}*YFB3h$9%ZC;xbBttrcE{rf^bEDq zvXkz~^59m?rp6KnPN)uJpf&pwZv8BBElQ37+zXvX;DOU5NIXx){R$Xah=G1c8wkC|n&M>h9XF@_+a%PlPS>kpa6F>&pT5^@! zwD2tKVh@~)SSF>HRV?cxNuYS8&1x_=cNtBg)>Oh-d?znQYPrtjW$d-MbY2XZNkuw( z%;LGfP|LnFtkuz8ka}6@vzPZ!CI`?lUVmxstdmT5Qk9&#i1leNoZEt~Rtz}i++AE`MF*`|tq!Ipvp^l)>DJ`(AK{Ih zQ8q@6X!@rIcjh2d+UMb?Mz&l$9pexyTT?Vma!mG;kvJ=sN+voHWpy&n;(fZ~V4-@M z@qyv&DX=cOoEC%LCS#HmL)o(;V_ED&Ms*6;Bl2ZvOZ1Z4by?l4A)GQS&bKC-Xis;rbePKQiT1K$Rji{C4@T^fb0l18 zbb*R^(ug|x3PnqT5;=Gur!m@X&_0+1?;rr=mx zSt081=MK6tpkURu$JStMDJ;Z3RVD6!L#%35)pP>!L5ZWLSl~zYrItkKY zlsENMjG=m=_U%G;d1;P`s|_K0+OwyiknBDj)XJG-IpNvwfV(8MU=rt-HsJe z*uz7`)<|1m`a6vxLO>YFXZU0&E=wb znv>$FnvgXnT)mR}vZzeTX;-vI(=EhK3&XT9(8O~ViXum#A$W6KL|RfjRm)kjDRy== zgH#({Q4#J6M`$Cml(%52X}6mKQbN=}j1DZGoSN+-Ki9xFG6@ty%C7U!!`P|VSi`o; z0CGzLOO%pzE3g=*q#d2i2pYUq8VwqD`t=D}E2>T!QfkAmq9e+Kn+oXK@Syb7hLE8W z?`(;imIT#cXG_|Ozq2LkEKFxh2MVFGhj0*!EJuVgLSLk4Jku`n-0pBn5)#&=!)vK% zjYi^OYFfFgZ6)WbIY+ITGJ`wgl~vWj1vSm)Mtf7}lqy-jNyF%o)yp=bIU3$@JGlw1 zy&A*ivSM=w$RJTDnyag0D=@*QF)-|HC*vS~vTLm1Fl5q(HpyFRDJQ40cD5|BGmNTU zLJec3j|Sv&DznPr(Pr*?QFx?V+ij%hM3ER;N>+}eCLDWi?syJV0LnBK0&`44&Ma#6 zGI}FYNSjMFh<`V-Nxj8q4f9?-++T2yGO|fBRA(nT7fneji0xMM9hb|bXMSf#?e>Rc z&#PKkEeJ+0Gzyow(iy$baQEZf)3QVB zwGu9vvvD@8s{hs{s%~Qm%s9&4Wu=P7=agVl^zO3QnUmS!9H=A0dMpLXD(k5sX-J8i z4p8LCYYwMi$i-V)F(OQXrn6-^txe5I{#-F(m`t5QkNS$H#Ar*4n3IaNcVGpIb&3VF zxDmq`6?5WzR!FNf*5rAy*4Ai(d6=b9EUC%v_6|tW^xd3zn3v~PF*g-Om_^ZeJh>d? zZsMlek#$T$J>i5{*ny16Wr&Yg49lkSM{_)qmM8C6CJ?V_58H?H+`E@RQkSQza^o)yWi9*Fov2pLU1i3ln@fnFk6E+WwOkn|^>-Y_lb2$Ith%&4=l9*z-PkA_`Q z-v$#hTbeiL&Wb7{sA4jBDYf{BkYVKvv#Nuo<$Rj_rQviSc|InATomhUPI6SuN#>tP zMu^cy73T!vhtZAdv_9k@+2Tm4Ll7xdwbENC;?7I0>NsEs<3~eK1s>4Ts?7t2Fsu0> z0l5AT=&u^)NBo1m$6yO;rS2A!y(*(CS>1?h#M%0embY5yz$K!uxl44XQncjOB7=3b z2Jmj7Fv)5+mj{3)ThjbV-QggmLH$LGnnk8>1aD`0GGJOQ8k*g@T%cGx zb{N$4U6(6R`SG~ztw`3z1j~b$^6VY8rsm3)`UTAm3z}Qz1?wtns+dyM*jV3a5{#DR zaxbASx*T(GR7uiGozg&dp7HtniW&Fu%v zKa)n`YSCP%cPot3Ed?xeuu!WKucTe_ne1vxcBdlN5Uz}c+Y?yBV-dr;8fD*s;$dn! zNaQj3yKqLnI$Js&xljTS(ya}i+){N?Rb6vU{oIz?s-~vk+$t6xTht14kPs(@nwoUM`fw>7n*RqDtzGM;((#bJFs0 z5mdimF4^4Rm-S&f45veOX!~xP>eUVcmsds|Zj06ur>@ORxy{YhEsubd;2CxO}8Z~882gyNlW>Zbbea*CI zd?Gte!kWKm56|rEydzEhs1^&s3YyK7Y3;A^%`>?Os0$o&`Zpas)XckEK1KIcde8M1C>-3WM)c3f=%Dixt31uL`UNq?!o0 zhB)zZ6-bEo<>iK-SQt(vsHAmCP-zFDjRi^C7>>)Uvf{*ODuFRTcPKDZ#y}2(jR0Rs zmnM;KwJ|NPc4DrICDi$(Ar^E;x~LV?lBu*K06W#v5sq7)w#!bk zRNk{S=x(vPY|E2G+$z1Yh8i&8%6q|fx)#aECfS>3G6vV)SISio)6ID^9acoVaHx#a z-aKc=T@#LC+l8!fhO}Z+f`}YlRz>m6Xv4JdYQswrHzmHc9rjkXwM@}APh#nUR9xBW zmz+sVLwB@0+G+-pGFWXm(H)N4_b6z;CYf3~pMvu7wxn_N>u`ckk;l zON82})#jjrTElcfIcXR)Q<#BiXgS6g9kkRZqGpto?t(74(P9U3=7$kSS_3BW zWUIM<#Vnzj3%=S<4vv|CGhhfhV@=ES%&^?hrlXPh09hpKjR4ger$`jqLp435)$F3Q zcM5U2J07LOIg_DCm>-iJA|xgW>zM)xM|P)VS7sAn+Q@DfwHIgiKpCmk-K10HmaHm% zBde?M-tU2X9qnaG9^Dk?i2Xq)P`w*6Kh;3_teIsZYe+kXZ!criIUX~|UB&=&jirMQ zlkCAjw?a58_N5^7t+QxT&wek`ob0M^tBoaSpMmZ3APZyBj-xmCNQz}yNc^q*0Bovc z{p!%L^vAp0Nx8!j_rE!~K8lF5uAUF`d=Wcg=%1E5>a}SG-5ns%dvrl}r50q;aJuTYFrATm)Jbt2!yWoh|7k4Xp@u zd&V|u6$~5I4zQUOZxO3(L34>ST1XP^D(2Iyl$sQ}%u0k+G6$W`x+3}2tN~&wWSN7N zm5o(RO)ZsGHKE#2b5&y#YPe@fl=iHfXj_2x5e;-rf!;)2JDb+miW_e{am$7P?k-cQMPw_N5fgnJouQ&2%xcqypaes)Zm-*i}4 zCE}R&qa@dGsc5UHqQ0)Ks-ihmU)Q9bYFW&-<&>-%AxMw*D8U8A%lRM*dlea1^52mTAd1lFaer2A1gKF&{Ih<}^cboS{=j}6&*RX6> zn$)#9Ru^SKDkk@t%`}}3Xa9&~<=v6d-ZCQtp&Iy(v)o!xhPpP+Q@>f$*8ZRQ4#A?b zqd94vo2N~hv|0}r)O;ylHd*ny2-GVaPM06mL{>kt3Y+Cal}GK2UfPl7>txQ(LHU^` z!)89UqXj?Novw{xfi_$pu@~P@Vw0D4?oj+a`z%*B+t0rFmX&FhVoSYwJ6lLzt@S5; zqrzf9%H)|tlMxZ)>9{>F8`VLOoTGz4Co6ILt~}kk47awn^!hkYWlyAdqBwY%gL-DY zQdFIWiZ#uyb$aOlt~4{Sy-k1M6sQb85=52aM?%#n4qB3oH?UNlG@pQ}bj)O`AziN; z!mV&e+t{i+4V>;ySwCRK1!u!(7T^nPu zMqPnZvOM1_HbaDrj3=Ws5+tQQffY0o5379;Ye&>RN^ntl8p-<7=#}dJGTR?@&8Ma6 zf+*e84jFQVZ>>(IG8PWUf?%Fc@ypf3S;?hQxz(WTRf$$*v%?+aMGA+KH&j^ej~QL@ zuMdFH@8d_2w$>ikJ?Jqu&$4)bK%_Nxo3Juo!3wTf7x5VsATZgqDq zQQL*`jh`K~J07>h2KylZOPp4m#8g?4Ag^{5V9?A6SlF~aw=-mA#*q<6CaerN6EBTK zkd|_&i@+%AsS1)g_`#)m8DYP3H3`;} zOp~BGUnH>%>;GdU?&r zByy(gdN&1X%i-uaj+#TykSX(xSJgLNFXnlp&29i>Et5oTf=T_PB)zcZSLI>r_GmA! zp!oT;?Uu8NRrQG5;mP}3VR>;aD<*YZ;i5#saqwF_cFiroO4luOnl5C8@dbB!#Ah7{ z(&xw=KMRy^DXc!=YX9Dv*WI+4&6?R*Jin`lG$CnPN(2-yLS8iID=Qz7DLbzV%FgG0 z2FItCQAMI?+!TtV& zrVfNNE;na}vR6fGZBv=I?nZ{{nyVU53fAx~Fl6woFt7Mw!!<>POfSRfuq?E zD}$=kUSv?^Y&EAl7U!dSD{f+DY$?*PsaMN55#>~3E^*Na`hwiqHJ=EurB2>TNXU+p=mDWSokDBMjUtjc*ixThjT+_< zXinBz8zezj03(Yc?_@YWGBOG7@GdX&zI4nQinZYtc9cXnoDSP3yu#rFhZV%4m>h?* zFf}fUkwtO4_%063CmC)qcF`3k(Q(bF6dv7}f~r=~A%&stIA!m3-W_wi@?*D}Lb~kL+HkWXDo;FfwI`COaC>Do zdLv@;%OqumQH{AUxYG_K1@qrCpX9Q(Sk&fUD`RwK9Zf`{p@g;3 zWJ?!PMzR)_Os0?1Or$MQT3w`*?UqzKuT}`|UPtH@H%_ zG{snZm9h@p)Cx;e0G~EE?Q#+1lQyswv_{3zqdU#p83*t>xihZ%vFsnTEh+C&SZ7*P zExmqwfG8UptExjMi>jJhc~6vW>Y^yy8yf2ysv4U^75!@lJCm4Axpp4uGRliW#uE1q^)Qm~Y@T zd4F{>edG~#G}7((UX`=AvK%0@ye*|(w-^rlN!E)Ok|SI~g?s=a?T&{F&L`FBlo=qC z${RhV++%aLmR_9dSfVvZmqz(Q7N$5X6{Jmtrm7%qxnY>Jp_dy@9@zT2fwm_34!^mB zWbU8Z8%*l(!r^Bx;u&Ia6WpVp zdoYUSH>U(;<=nQmB8Icf!(xY%<#wzH^u#=BZ;;taY7Cc)t})rK8+cc@E{avD)h1%1 zi9}mzGnC)U$u8Pq#Q>&Grf%O4ReBp#ejS<1$QbiX&P@bXam1yz6cagkur9|TSvM&Q zG~7<7uT;z+`?KK+==Py)eV4)4_+))xijKW~V*1UsAEh{sYg$F` zS$F5Kmpt^EhWXT8)-_txs%iT*q4Nl^)!}fbZ_7r`6B47h%FHBZMCrIUCnGtKuNB>a z0%Z6&H5K(1wadTv$X!ABOwpVU(XUBX0~f2d4(OSjIlI&+EJ>43xii})gJ>Pvg=75m zxYxe1FdUQnJ@$Fpfltv~K0GOO#=x1h)+Nm@X5MHv4(2H@?`>8OqdcIlE=PpDhM|M0%9tUyh0KFGm!2^p)pE(H%}}n2 z4v6d^P!EtZ8@**WHw~==N3)tRd-82qs#Yx92da8gqCDU+S}N@8^IrYUKbt`5yz(8%mwOLK6pXsoKMtZJ-kWJj=}ft_v#SWhN21RI03 zYy-PkHMhQTkt8>U>KnoFu|qPCY$X=1g;+Szyr@Chn3hMl}s9t&t+0U=hU{VC+)N0^7Ou*k<<0`Znor zUQm(2EGCE};4a%lnng|Z3-iK;{lKr@{FpSnC_Q5kw7Rj9vuYhnu;g4joJ!m=cMcSD zBN;^VPK9|b2rMT(qNVqUr1HvE^k(kXy91b;gEq@CC)_R$9#Jhl@DOy5l`j>E-j_9I zuWT&|j-3Lh76&?hZ8o(Z^%7R2MN${h{2M8`R>Gdsop%!G5D5U%1EmnZOVFgCk+oNHmor3>)LN$ z?WQt!D}+T;TV{rR;%^9cD?8^v?Mj*(lIC8dy>)5sco{Aig_m2ECM82%7M*{^=sZe_ z9yGYkQ!*jn@wt_|5yNM`E$2%?Splp!+;k_TI}ur2F3*yxct6-WR3ayz)hN@Z@|n#F z=g|_mrSIXJ0TyYB43iDRSpqpX^JP)roInzv6qL7^xn%^ zo?eM*^)y78iX-fidRns&a|9%XFi;Ey3LC!sf>2<)6w_=H6l6-Sk>6rqIQoK1{>>4yF-!t#4x*4$^fTqdh*e&v!Od-Y&G z(JBoEsqaqn)I)aevvRHiALux*G+LI~Szs;l-??KMYO+%O-Rw|u3}NmrF~ zWpN;hXl_#yR~jmLl9l&QXlP)nlc$z+y6&=Aor#B^-JKHhW5;D0xv3+un&wa$kvi;k zobxI>AFE}!&C^3y(iVa5Lz%b3t?+8bR!>r*&K)!R7YwWnI1|rE*p(<>GjC~X4mLJh z_WA}VxuvG6&f&$*=A_aeE9A3k`JBUEv$485)@|vMt3{fWA)f0YtJ^z%t z`)T#|Q|j#hqrU$C>dLC8&K6ehWojCbx^kWR1{@R>#-&M@!#F5Xd4qL#qi#VBEKDhP)%@7O_lUg5|XJIgiZ_OW3;4w_+|@M&Yyg+*8%e~v&%bSs>LFPj!G2|8-7_Fjm$ef+6;eALlJ9}+VeJ+u z?pt!$6?Bx^QdL)}YzyjmF_+`7{zPyQJbtT;NVqH7dU9u6^_kkRu@o-HDQ`HEmM002 z_?TUgcY#86Ck1OlmBbq~(P?p(E^GN1&lHjPYNlj4F8~vcOk5eS7`!fcH5=VS!xCrY750ux+z*&$tz_7%sCu$CU7?qpdHHr13VADAi~W2~t?Xm3D^1&L1i zyNmLwts(1yo*%Qtp?BK#9^Z7Z?gP^yFn3uYxP_%U1E;D2s;+XzXrVssCTVlYsZxL+<8mXF0bR6pxhj>o_?iyrg2<7 zNG>^3MAg>5<7KC`TCJb5y{-98y^pnCSh`+I%CK}*f%=3>-2LRy;Z*w4dwW%92MXHJ zgj-FALyMpzBt1-XMlbc+Mptl*&SzpQ4GUY0|IrKfN%d4+-dI+ugHp1;+s}|%9Yc@Vh<9Pm~9-+kT2N?WfppE9uN@bI}&)dS7P`fc}(o?B6CefWr zW+VV*1my(NtcJ4ZQ9~uq_s3~IAt6~XOChW)*uCCw=F7h3h5k%QUZ^9B4#(X@nqkaq zcoEl+!^oc6EN3bQSM0oQ5Vgg3RvO5?uQ}Ohwu3sAl6Mk>d25EYrc6J3JKf2j#a-u> zu5*Wol<=uOly_G`HnrS|>T>-giG8ibjHEHzX4%a%w7Ba;jm~jRJIZZZV+IRsa>Odb zIZ&EyO4>S83)AdDjG^d?2s(?1Nv=dbe&iaKC$aX4PsDjN!(BJYI%Qlxih!tvc{)KC zW$kOSvRjCBxkyhF&b{mdZvi`YikXX%TpN3-T|YJdf&Xq@F8g=9OKoPhF0XZX)<9P2 zmX3IrVjmKmOH-ub?k~%%Do#4mG>37Nc9-a;U$EpUfeK=9cjH=-S8-X2>Es8_Sgoly zTXiQF6!)!UoBwm1>$SNLnK~Um$)U0*>)1Knso(bFmZnENrml3;#|rA!Mvm?Z4nvlf z2JjM4({I4x)JX(&bIVkkVC!BBCDka18ql) zx$Jb(Zq-UxhvdrT4z#7+h>42NX{xGNz$g2m+J>serusU0Z9v`vbu;(si(a|(xMGx5 zhf@<-r^))7HCq`qBB>Zxn&YRjl&9k2vpr}fJ)kE)j7{|P=F!!|n%A?v!0fh0JHx4^ zj)UD~=SeYx&e0vTnkI@Jt6;(rNrv!6mlBi9)iXkhx|>c=D|i7kvXge{D?DJKnqz5a zM(iRvgz#){w0moJq?hulE0?^U_Yy0-NE?CuW6FHK5q8yub>>madh+F&rMgEI53gXG zBW@)DaO0$7OPB?jWAU>dy*|1 znI|XG#!u0mzotRIi9qE@D&C(|^m>9-(U zWw5UP+dnzt@~)gi`K7n}20g%%Df7h%r5DpacM`nDIXf-)d)cR4eQg0TU(A|XJ;d=o zB$1vzP4xaNg8ZVs!twhn@`-)cjtnWQQ*VJxqD{;GHSu7?Ot}FZ!YPoNMRSr$DKBYI z#i0)oBi$-X>ZC|jc~aT6Lw^+gP@dGP?+Kt+W;O zO^MSG#Dt=L?bZHGb#|W!QCz*@wtp&_GU0eb?AqZoRZpwqRQ2{A9E z`o2|7*-hc_HLnKp%8N=YKT=rxY-*QI9eUcgkkr^lCzU_k#*d$x%&nvbOl~w&hbq-Q zXz5fpKh8{AKR_v1stp-r5Ti+F2#y~-bM-oFJ5`p^+FZ44^0t2Oy}bvVb{0CigJc=_m>q)lb| z^16_^OI022jHw^_=!Mc$5elh$Ip*yzb!mg@%u+O}ex?~MD_CVHabF9Qsik~+#r@4u z+q}CKmkOst3GnZoQUi`@s|~M^Od|pwd4zfSgu4r09I+1_OuKquYU^{NA?ludvwBMYbqS@qz|^TK$D+CeW$jJ!kK#DC zD&;z7c{M32he}vK`J$8;f=a3j4Rx~A&2POb!#$+UvPbDI#`y_qM-=j?^8Xs=6(ZpH5aKanx-vdd;eO59DCVwdN?YZB2VfaT{i1` zgY^o!UMtZq6cJ6Ox(<8h%37gj0r_)dyjNvv&q^mF$v8WL37XNA+TA%c9oMiLIi+4# zzV#*Dy3!`2v980b9IKhdnx_^}ejQArX_I2I)KwB@J(rfaWS&sRS)rHtZd%=Q=ul5) z)XGi!2=aPMBpg>$CnADiNVBE&Adg0hIXcu2QMy?b_l2W5;gt1gipLD`Le4DOy1OK6 z8IMN0M5x}u)cb8txb2}3F7%C@VDJ-IVpnT&Lsj|Szju*Dat z*R363k<*pwRyzbMk1{p6@dgT&OI`n+)6*Qbe|Li>C;I6jUd>tYoB6wrG4-pH?sZ3L zFJztP$#kr($Nbqyb;4>jMyS&iOb~#zNwVpY@Gc}yq`ZMXNg?;+L z>e#ILSSewXiOC~R#r`R`P|DG)V|!FWg3d+cPdAuOVf|>SdC`P+R;VjOT65g*rK?^k z{v{u!ii&^Ii8t9;yqC=0Ty@4|zvfll#JR&M*`F}UKs1S}$vZ=@kvb(+98*?hIW_KZ z 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Л>@yFZ1x*yww%Da!>gnsE<_cMEU%7AZ5YYtiW%B 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