From 72f98158b8b6d7ea452ab3e8d551051374c5f773 Mon Sep 17 00:00:00 2001 From: xusc Date: Tue, 27 Aug 2024 13:53:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E8=87=B3Root=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/ICSSoft.FromERP/v16/.suo | Bin 329728 -> 347136 bytes ICSSoft.FromERP/{ => Data}/ICSHelper.cs | 0 ICSSoft.FromERP/ICSSoft.FromERP.csproj | 7 +- ICSSoft.FromERP/Model/金杨/CapInputDto.cs | 44 + .../Model/金杨/ResponseInfoDto.cs | 20 + ICSSoft.FromERP/SyncCas_Jinyang.cs | 104 + ICSSoft.FromERP/SyncCustomer_WeiMas.cs | 2 +- Root/App.config | 29 + Root/ICSSoft.FromERP.dll | Bin 458752 -> 714752 bytes Root/ICSSoft.FromERP.dll.config | 20 +- Root/ICSSoft.FromERP.pdb | Bin 241152 -> 443904 bytes Root/Newtonsoft.Json.dll | Bin 701992 -> 712232 bytes Root/System.IO.dll | Bin 0 -> 22184 bytes Root/System.Net.Http.dll | Bin 58120 -> 197680 bytes Root/System.Runtime.dll | Bin 0 -> 29880 bytes Root/log4net.dll | Bin 276480 -> 270336 bytes Root/log4net.xml | 36295 ++++++++-------- 17 files changed, 18416 insertions(+), 18105 deletions(-) rename ICSSoft.FromERP/{ => Data}/ICSHelper.cs (100%) create mode 100644 ICSSoft.FromERP/Model/金杨/CapInputDto.cs create mode 100644 ICSSoft.FromERP/Model/金杨/ResponseInfoDto.cs create mode 100644 ICSSoft.FromERP/SyncCas_Jinyang.cs create mode 100644 Root/App.config create mode 100644 Root/System.IO.dll create mode 100644 Root/System.Runtime.dll diff --git a/.vs/ICSSoft.FromERP/v16/.suo b/.vs/ICSSoft.FromERP/v16/.suo index 8268e817226cbc8965d813d49b1582054ab7ab38..95e0e7bef39dd470a092227f8d8c7e465fab20b1 100644 GIT binary patch delta 18241 zcmdsf34BdQ`~RIYCy`xb6GTJ=S43p9B(|I6N)u}qQcEm1o26utpi+{nwN z3Pt-W;%W}naxHCDRij!jUR6|8-?y{~DlhW?&b{|UM0EMI@7wqPJNnHt^PD+zX6AY3 zd7hawxB6l?{R;Qu-t8BtR4N8GFKq*iFqyiZgI(xxs{DT=8{eM0~%D~Z| zlnR6bVK_D17VL=53atC6K)I}u&j)y=6G7(#{3XhLPPba}&UhowPe#5y;0we8ju!qJ zq^C(bn^wc~ka`Z_rM)e5IB1$BJ<>v3;7J|QeSvl{$?rD)}(rUTKy)4+Q`7Qid&584Kp2|NqT z2C{)pz*L|Qz+dn@Xc9W02h9W)0;R$fr|~T!k82^=%g7r|f+eF2x2#){B3?VccsG^H z8Kt;Am;!L=s(}swm#zobLq)s} zU~usofJ{`#8>5K#AK?AEc-x_rBHlQpc?~AWh~bP{eD8it3A(->WZPp6BA_ zlwWQTFQ=K{EmTPl>=S+X*f&H=s#3KAyZ|Z3AztJKq(crq0ny;}29ziIBHhoDj|7df zq!U0TXUDL%iAW?_n94)E1tY*4$@wL@t9Ce76Psu>jZYJayy<0#cf3MMT@FeIn+01B z$Bji(r5cw4;wepcEwXBk$84m#t)CE8QE0HVx<9v5aP2_jtY}m+>x=Xz5n7&jc40^O;5cq#(i0 z+5>%aGWV^esc$VzeVY~5)u8q|MM~rIt+^aVTP-gjYH7oKFKKW5V(~>jOu8Me((7&9 zt&(xySDKZuu-r!|_0A{F8;r@z7?Yhbd`#@kV}geL1B3G-r*&cac+tZUrM_fE!liY= zEhLSXX!A2}{+k!DwAnfsZLUzUf&nB@@^$l+jQ(L(PlLCOk%1VcAi;)d2a@+BeUPug zH|SiG*8H_WsDV=#ypdDox=^BXWkD{)LDcYfXa)te;J3a;#@6x(&-1zIgrbg{z-$Yg z2Ubf&bnUbpDPDwM%`NGHp!^Yj?XvKU(uF~7$R{Pb&SY$fuAekzu(NFi?zI5Uq3RY_ zECs&@{lSvv72GY+g|9=}T8jpn_x zGJyAnG;3>D!{&EKkjhvRO{9Z`eI$KFzSSt)b2HpcLNhUA_#FDB8N=r)pD}M6I?O&p zN=K^=>QN8cN*w}yrC7HBLw=x0$R_?KX>(UE;X=K(Rd-cOtK%G)x+hs>tGbQWabYT5 zWYs-MmCZlFx%&t=oTv?6`b$3ffRu2;VZydU{#K%EUbF>? zw}EW{pAFlA9RM%p$C2$h>JHU<8Y2XZS5#TRdfhjnq1etFDZlt~i zxCP@kxmY;m*T0ay3akRSo^tK|3Ahg20B!=+z%76a`3}Hs*nPaf<^d7{23Km6*PM-i zQ&byzE&9NI<9H&lgyy89p<~%;Qd;%1AXph{-m@m-=2&)WOR;STQ(>@e%;Qc>dONPt)pt*a zimbf;xhuzoH+#EnXUD9Y2JI+A!AnNRf1Euo&0XonP9)PVOf!yZnC5BvOm7eWPajNn zdp9@Y(u$QwPo}xMY&sFqs>aZ&Xx53U{XgHdtKYy1=-ZFt!v?a1D$=5SgLPXz?(?AY zobqcv(hGovz#`y9sqLvY?tF%nA}0aMfaSoT3f*g@MDI|(MJTHxnvG4YNZE1HO8SRy z`_2wC_vY@sbvS0TmnXaUvaBNqHaia7*Sbo>tQUOpeP!}|!lOWbMY7x-)SXO|BFp-f z7Ur9bP||NULM*qr7;FgM@fnfyTj4af`iK`%sWS7W{H;T!gI(b_w+^*6#mQXt9^T!y zq2&uuq5MU_4U-<%LnTYf=pu<341CoKKff2w+ zfP0|PKngGh7z>O8#sfMa72sZt`@Rey6PN%@1SSEKfoB9PaHk-_MbD+44RFaTQqMy= zACRiPb8A_E#B%^wi#b3cPz2}&=|QZ&q>gQ6isbTRhl$+Y)hT0jEL4;a4EGWW*Xk2I z`M$}eZ;taaMS0v1D!1*2!QgTKzu{pa=4K94=W!K5o6<=B}9@b}RLhDETn5eOMpAx8D6Ot0%N~Y~?s!sZ94STUh>(&O=MjX$m+}(= z3_j=1)6!Fe)LbeJXE5g}669&i4F17}XMX?8WeG3Qc6A~M31{ml>CMg;Q;~goPjKdU zd}O0FF$$hRrfbgZ;P9}3kTA1k^k_PlzM8dl6hqk%Khc`qwIv_1xqh@c7q1OlJD*yc z^&k{l6KsBNw&l4H^Q+FkLS0N{oP)!A)>Y1@ItTC| zQO>~(bj7aPU4gd#% zL%@dsFZdDYVc=un2yg*UG?Klsm`6cP@ zG-uQ6U8$}|NrILIyl1)z~MN+lai#ex}bP~v>r;#FiKh)vC8^N3L z$+N`g{`TCUw)qN_LS%yCF7@>jajIB z8mT7j*sW>Aw5?;seat*ID~~KJ9TG44A}0+S(z_=&I31ATR1Mk*@CP~r0YDdk-%}85 z$xDZa_=w|>k$xCbW!}^>4%IBz6JOcanVci#$yAJh>6XNi_sSOtrEeV;`5H{o5V?8~ zQ4`s#CAma44k1G2d*mQ78&ckBr5LMD!oJ1^cP~TViw6)eMx*v&sJ(12IV>L@L3)z@ zilR^`qX^hEP*PjudE@Ot9RMzuAwW~4TY@$NZ4UKr-pLcGba1>tm0A;!_eS2w!b?Pc zxOoce9h1Qv4@NIw0+_v0CxSBxm<&7vOaZ0>SwJ?B1LOkJfIJ`{m=4SUW&+Owvw#BN zIbb$02Pg!J06k%aYT_@e)#MbZOeS7}2L79{gw8`MA@*{o4yy6l#utpp9~E`BrAx3j?37Li%#R&3p6MC-e)XzwFYp z?M7+wJDeZ5pOr(mkDve$G%b!Rcw6l(g~nV^@@P-m));E9r}=M@}he54Q;c zN;<-B#_71R=S+>bWxZy-!p|5M^qImxyMF(_l(gG3*L9{2Pz;x>$sihHn$t?B*pf^V zChIf7-xxu}vWaB1ZCUE_{rnq&maV%%l330}62SZ>k-dUPu6$_{L|%GX+l*_pD-106 zuI`{E((ucpNidADE9r^9t>VJLjR1N9y@5VJU!WhL0V07YAR6Fnr~W_;@DvaW!~p|< zxv1?#iC*MU8@FqXM{U&Fh6g}lfHHTb{HyUcJX(4rob!ZDu!M7R?Hz(X&mccz7ng`l z>M!M)CWqL_UNgyAfeB7z+T-CtnHJldbq+g;?>8wv`n1VM+kXdrU%)3Uym4(Vxn;42 zwx%yrj^HXSHQB~ulWpXdQ?h!~&6`jBg{WW=!0T8H`Vuf6>0T-p5<^1Tzl!`SU^TD? zSPPT`it*rd6YPSk)n;%jkZQ*c#SlNMJ;;85Y)9ty6!8o?itMMrG2kA34|~$pX#5 zo=FyVOR~)sO)eybe9^F9PdbuNGYR7)a^qMc$U;-WgRuB{#KE1vArGJE2B;>Xf?3FA zsV2y_^T-&2=YtuZ9%L=pNut`>F$u59f?*zvQj=Io1?k9y>m-ala2H(Imic7E#zELH zidsmrDfx{~RjS=LQr(h|MZK#P@@*RMe36&*#ws$Bi?Z7&WJd#B5Mw~c0*X)3 zAU#Nor#h5H6QS7{}Aj)L{!em-m zM&bpthc18*WxgIlA~T*OUh>{pq138;1gZ1bEO8t0WctO#TVC)wIpSKmn#2ff?>ksV zRHh2AwyqpPVg-@=J64J|L2J4K&g`Y@U`N5B*rNEY5C*wt~mP~&G4fDJ~Y#!5|UXN%G zzJ3NmAXD&$$hAHwWk<_T41zkLp^iymh`Hnq2Ls9rvJi4c%-pB#!@7KES9m z6{ka9$!NyiX?@pP-~B$x&DM9zzr*F4-K@pu{sk_#sJ_qr3tTRDvkY$5SQaS+G3_F< zK%V%bFo146LxfE`mI$6@nPjfL;*@#ehYtAHo$oE;C9mbPDy zk=CB|E&mFJB0$(q%V6E4+_r6`?QLBo?LKEI@=8C+cvfRDUco+|{)&b zUEa9Kld@*%vL>*EdqQWnDvKtw;%|kHcHb{7xx8j`N}4W*&AlyzGQ(9NQ}$j8?=K$? z7it89^M^nEClpgQ8o3OAtKPUqOiIhk%g)RX%$$}zHDg*%N_r}5mPdohd#uEt&UUr* zV_HUDPIgva#-yywY?g3I2(;XH(dA6Sz3Ef(Q*^00rWA|6By?pziqybP|5KRBH1`CN zUArzsurWKSExRhv&1|ShU#}aiK=$9@uZ@b$n39t*t!yZDx2c~IVDHZNq=VS`9@N2(f685M6XOo&l4!x+4tnz!$-~i*MBMC6~66*Z%_7nMgSr`|*NFyv(PJilnows}Yij zS>SvJs3U)3kLd~dx!VZ9NQFszxTc;r7vqr;zDcOG@0%-zf(~U|UJCqh1b)Ktsf#|2;E4_Uw<{xR5O0ehsS_ef0(3GNcyU8n037MhmU zrDtfjj4nMgbeWmm(nEV>1oiY$Z8eRVn6As$u^%gFH*Vo(Dig47s!w}N!T+dXd9sQ9 z(@hR(*hk`Lwl)p;QEW#Xb#c;SC{p60lgyTfZHuGsBImJn=V-i#WgpX|G3`u$p*jDz z&6e3dIoGpK+?YMdYVloG^A%`JMj{;eU$j~xw_3}yX*^6;IFGo|$t3F7eZj2;| zt=Wf1NI}^!swa!2{cHOX6~jJVKiBiuYHOX*5`OWu9xm4ODCxqCiPW7X93`DM88z5| zPonNpLZ9YrN)mMwZcrALL~v5VXv*CVWfbS45RT) z(y^(+kI!shMccVuBWbD#oT-_$;@XT9RYB&GVP{_2_$eXMb{{KdbynEJbgO7zGL=;r z#9%pSC3PlV*;r3!U_G6JigK`soS&Y8YMC>}j%`h%W6jHSQ}zVjZqE&ZGITyk z=;yuFv^z14jMH$-z1VbBcU36Uj7C&+ehl?(!uOu0s502T(KM22hEpRmj^PJulIb{~ zMo!~2ei)~0?4NcPr*Z_Bm4;WSA4!cH*W-hfQAdrHDbz?|qe9sv3}+BK9xl4F9D6a)u6ew9yA(mT^HjRzF$cn`Cev4x*_Ecm z*F~3vWHx>>4N+VW`IH@>OkY-FlWC6yu;%+u3i+7RJM<76S3nol3t-Wn1KhP$@HTuR ze?FDQiYzybCjP!yAe%7VVj98vS&1QX)E>IczVV(a!R>C|lZ8sh9P5HxSkpfIvvP=o z65-Zyo)G5#a-W+u4097qweu4W)-4~8Wb@4iuU?^F40lVH(w83-Wr}30n|cF82)j;fp_uOnw!jT{l>ufSMtDIIdSnQNo4+vTa>}+^AC5i;v^y(|(V|$DFB5gkO%2KjIp+jK{}Ob;kgl zxm;V2fsZnB+0oDFIkt1G`0zx7>!Vp0_NYsO!&|zPo~avn7kswiTFK=zyn)L(%A>}9 ztRfbt5U^Wn`@~2XyGp??&{($p6m{etY9NWP*U;h@sdq!h403??GJ{37rxWFu2h%~K zyfcM5z#vV886w#@{eTERfyC5R3f3Ceb$B^Yvh#kD)_L6Q7Jsi`g(&^eaSDv}{?U0N$JDpoEPsj+Jd3egiWoxUK9{Mz5 z$kAiBW~}5PmGV_41_wZ1#}~r~PB?0g?~w|hg{RRMeVlv>KmKNX;oEU**W0E!UMxPl zd&{b8!)CMH{Wp(0Xgg5F58=AUV0)*3V*G&YRQ@@Te~$D~?K7!ny(QdZPV@m*QIEgSqng%ktfq`=JsMxUu?v@Js43uS;8^Re-+rev{fflZc?UPs zl1}iCZNT|M9@XU9f3u5hHkH1_CR@>-%&8QXRq`y zwdkRDH66Wd(lqUnu&{T%g8ZbdY=4p-#1i8Q^{YFQYdN#&Tn#^bgd4kMY;PHY3Z>JQ zSLAf2B0myLhCJ!c@{@FgTyvW0g@z^G-A)}E;US{0pd-j0v-4kSpxSzc9D7qo(ysx7 zh4-c-*ju7_qTUVD*r|ZPS$n2W^6{f=uDy?GGs6!ZCQCo zF+~a*>%pcxOWauR)}jro^c06Nqoe8bx;1OsMjUNE+^Q)gzCO1M!nUE`bWYqo=Zj8< zI<=TFf2aGgq8^2}eN`tmFMaUCTGQ`H3Nq=3?7%n#cj|0$1y-Gt==-$)#!zJo!Hb37 zqk}8&Q$NDeYpIt&2n)U{v@Baj?WMiGF7|`95h>s8*~vXC^S&+iZZhICI96m{trf$W z@c~tfv$C-nt-CF{ZLH--EANXM@{vsP#oG2P;SNpsT?%U+73|zM&}3`&=P0E0``85v zirA_2dy_T`^(RFl|+JG2$^d4OL7 zaMNI8nfWR<_dCH&F%V5G2Et?tNI2Wy9aeA|6%|`x#DQDbf=w++K2$KF?mP~Dch}mA z{|<2(m*6w(+#w7;w|p`z-@T^4N3X|8L9cnqJG+Q>|4mKW-&;&$#jc{ieCR_l#A;K{ zhZuLC7%`b`?<{)B6OW3oP&O@893>w)EOxiwct#W|&xwWh%z7Z{%bW+|BwF1c{EFOj zlkvVtD({FIfkjem55PaWW8aT_n##7gi5@-)yT{JkZFeFj%)R43$91JyZq9i*2}%Xlnm(afB_{pvqcNPaM+X@-wE6dpcv%U|k-|MT1&|bqfgY!G9W2 z+u#R|Qn7E4b6&=yzj~Cae1k}qsU^cki{3s*ipLzi@T2a6CizRJSJn*Kb4vKvs&&)c7VchUm8ksUg@ zo(O67&ACZCN`BhD|G8>E-U*wu?5xa56ZnZcUrl*C!V+7H>C*XuHgf7oajjK@k>>|N zHfbIx+y9(p*g<4hMi~$hkY&IDK?O%ZQ$s{WMQ~wI+(lF{L6UKARpF_*tz5~_ z$_O1l9^Y&km&(^lq0H1b*LY3SluAua<-5xB z&luLa8`ik3>Ej!qP$+B=_Zu1-Fi;RgSHuKFIbyD)w{_i-cb7O-9osv~`146}4pVhU zr6O8H6R7DXwIe0gm~;;nw0^8GO(^xnumItWXq{i#6wk&m88HzdbogO75Rr*J8H?e1 z#8QNWP$70BIw7JEGZD)ais6dUC~QV_M#LdTB80MF4D%2kh*^m4hy+Am#J>=c2!BK% zA_){>{E$`y>3QA&Z0MQRI29b)89F$%q87S0ZAMYW)Mfowrc*G2h&%iJYk&gHj zZBHI-PxWQ2&SR zP5PN`Sb39S;`Kx~gn64ECrlG2Ux5(j7UmVE8js!nf0|d)bMKL8NX4rNp|Q0cn_FnM zV>W7RPWwZ4bQgAXKs4L&ZPAKktMq=P5yzr_VMNhJYa@#I6igRJ6tXa)2wNLb#G9Y# zt@b2Yq$4D^J;@GZP{=?`6bUo;1ae_RY3&}Bn-BzwF{fFU4(^F5^GNsdWD12BqB*@e zl=AFSc?4!i2kg`xdZEx8(FYNSh)48A=p? z+uCqbpz1g&bIB(iqym=|TjGbqF1SU~?{tN%Fyc;TNjF?dtPJ=X$9qdfu0>V>n7y2s z?)X?yC=F72!+US?uFfA^e@C%ldEjG@&38%}-{nFQ49jHU(9mDGxFS?Z%KfSB60`%F zqrrKHej^T8xlAHUGLQB!^~CuE~^J0M)z_M}QWuuCIde=^Xd($rc1 zsm|Ipb{2IjO!s5CokYLu2m4bL1 zx9*RWe=v<-eJJJn!J*QA#|Y&o_*QR8w?|_~|EaS14$J)5x|}i%2ktG??LpQwVhLtw z5d9H8h~Z%cQ`J|ykgf-$N(US@Qhv8oo8wrh4$;zShdQkOrl^Y#4BJ7wnYtNI z5Qtd7gCO}bca!4o6sx~HLG>qIT(Zsol~2B@J~F>P`uXtwy?PAE{JyJ$>ZPCyC#7LK z-P?)nHBNzJhfi;X)^zUP9ia+d^;`ch6A%p&A-J)TV6`a-(^`J()Fe=|9_q$iwQ9=7QwI*bp@*~=qL5j&5N@@iU^e85J`&1;Ajy~>+de1~Pd1rAY3Np3i(LxxI; zZV`5OF~=md;8Neyov79R#yMMFI{aB~#hqM_-0q*HrH9)2^nb@YyvI_TE0Y$ch!KO% zdgdn?-ZPY?CN^63+(WIIQ0IC7;CJQz79)wRB0!U%QO1;-)*htw?oeY9L_t zp$6l0l1}`j_BX@fsp;fkr;)hAMj=Kc#1N0cFayyZRi%{b`zmK*WDk}fTE34O{isgX zsi~R3nkzh2PTftbNZGO1yytl4)XY~#OkUV|i|XRiU2B)U`q}fkJ1dNSbw?$`^Vy{{ zZKU9@j*&8noGbyI2DO;|sg6|JkSB=RcIUr8)UUIe(Qc>psqF2yW^cHw4o&@HF7Y<> z&N{RAv2GH1T~%su1hXyC8L=*yd!Pb?24AUc?XBil?Bp{$Xv};A(O&rO^={g`FVQcu zmh8@WX?x#u;dhpwM;)FHPB?1q5Y7mb?zowhAEhuno`-}D(8XCbB-FvS&yE#wi9 zl-5Ac2LuThy9Bq$eFcX)+(yk@EW- zevIZRQc6uEO_(j!UJ7N=A<h;xx>Hc~lg;=G}G zsIHZ~+O!ctyi%iNuc7iyZGPz)oets3K!u3iNe?c+BwJ5p|%SHGTsa|)ScB~DN`?WLmc zirV-?WvA7$+L@dszDux(*t**~E}JpUjJPNH#(0;`bQaD^&=ySiO=ksXb`|D}8SYuC z?_zOUp2LJG=#V&yv)!*87gxuRF&}dp4r2HjmLt4W-_zpGyoM=%$emIBwmYLx7%P$L z43*R%{9Tpc2mk7~k@LE=b!o9Re2}IszoF)&ks*Zsfm(Fi-kz|PUk*a)M9=Y~qLpx@s6@f@ovJ{K zvZ@!UW5z1F1hV6)nml@(2#~?7FVqI{K-gYM-3Y+BIGVWCJeX0*mwH*K+UM6+_zeqK zB_iR>Q^4k4)DzYuAcy4*N4vZ>gk_ffn8--)2M!qthk{fxg3oW=aS|ro__2gsl?r|; zi9d#oREznJ&tjC9AeJJQA(kUnAXXxtLOhLl2JtN7ImGh>B1e%($8{)+i7TFR+}S9k9baOYgJ~x)gt1r) z@;ylmY#&Yfc!(8s7t@7*bsxhbBz*-n-5=JUNQt+1Jmh7S-Axn@lT{cxip4}K8aT*S zaSMwJSER+bR!Nu}%wSj;i4Y5;gOn8hZp9>=OC5}i)%%DamHqs2?pK82WF_GwA692GrCg{bj}e_X9pRtlF74v}&JF|Dq&cqI zpOj!X%ERaOHm}!TMEUTVeHjeqFA{Y>y>V&u z>MjKdlTaRZ^7}8U*4<)Qz9iw?3#a#2xfC4D#*DRREQ&zuGM4 zq-l2XdYG!3_t3Hy4Fi!V%FjgO$P! zNrOU1va)(0xkVvPFbX0G8{lUKY)eceireP2k1!(Ap_vt0@7a|8${Erj7}uA z@$C7ZIUz%NC@quK*GMjT_?Qd(aQ6ZA54eq)gJ>ma&XPc=e;yZX>Jy}jLf$t7-QIGH z=N6L$R=t)CprFYkT)s1iR(Gi0O$Pq{ss@!m+0IwB9%lLa`(!AE#4hB$ihXDoT;^M= z))Nj1-Ec!Z9j`2hj|Q?LI1|J>qeb4sx?Tto_5*z!?GCEJ%wIV|QK)!I+Pk4Ir0CJ_ zey|@DIw|JjmG^WsQ8wP6PXlum)m4mSxO@CTG7&`4y!L;OSjsAOQpDTA(i@dK!1oyL zKeIWvcTp(X?m$v%WmQQt3;h?#q&1h6{C^;m)?DKL$H`=C)n>vgP7*3ty+%@9su$5p zA_pHN9jScq5V0ZPF_El-yPuNbe~fm1CMsSrP?|RFn=& z`g6bE@jZ>BnAx}k*(Cd0;s#%hVQ$jiKz~@1%sJ?GqnC=O@0#!vxWWB`9+$r+RvXbH zHoIqNRQBZTP^~tqM`(7AHYc>FHa03MGCC$!6Rq`DKtCmW0&42060UttW8v&h`Xtm0 zXYJtYTQm$#d_gyXxt5yX-Z5qicdpTGFzo^x1zF$IZ29t+)X2!|u=!uK5PtlQMaYX! z(BpP(bP^vpy@DNp#d90$g+a|cW+U`plSd3^tBE}F2fC8TZgEUUVemCt=9q!=u<<$j z!EV?b!YwPA_7C#I%=<9k3r>$Zw2+{y zd+ulINrIs^hjoBkKhvQ`Bja3bB(QlU8!cWe4C-HE95mKE5soZiVKV-UAdqFvm9S?l zUULN9rEcNJn+G~ON~_I|=@Ah+SsxW0s*Q-yhsNYYObqRrqnW6gn61@DMn|_D=1sbP zXJ%f`+^~uB8so+Wn%sUzOYg(YW|T+Cj`!&S2U&HO-uUZE0F~^QYwcJ#fm5%s2KK)4Y?y{wa%9XofYV_kn=EH0u-6!zUB(8$I4hP2x*w%(&D8o? zIdz9$OLl+$l^2h68j5$ZZqgU!p;Cm}72Y4iLM7d+Gt`CaR&LDBeCNi?3Hv^|J;Nd8 ztIO-_-aMyT6xpZpqx$}xI*3{@A(Q!5k7qjKh9}N>I1FchH4I>wfL#)AY#D|{Vi?By zl8l3^$KucubJK9_bVt|{^-q$`=9Qmq+%UbPlU}j%?w#!wD;7`PP&@o~T<|x^ znh(Uix0~I7xwB{WAD%jRcJ|iV1V)WtaSdn!xQF^mh+pa(E~?%iy!`mm?c>*dnC<(o zcPob8IsTEd-}defPghySt0;hfgzT+={ee6VT=dv)I+?u>hR@jhL<@a``1_8g`f3?( z6vVtjUa39Do@zzlC1)^Nf0QN)#@+$-vygdvA7lIE!sBcghtQLBl<@+KYNYGXQ|x^T zJG<~X@{qUK6hgaBh7D8L;0N9|ekbFQUBXq45BuA5JgF-^dsWhZ>(SQjZtu>0AbtZH zz_|qbk~)#c%g*Q6r`Bz{+O#i_e?sjl_I%5x69>miS*%oZ(fxr?Gm@v1!!6}T;o(DE z%R=5xoWjkL8cJ@^bnJ%n{CR!$n~!Zi#OCg-s(LHx{q@lJL$~Qb?OG|DyhGX`0<2zEDIHO^rhV&wK!cYM-AUO zEUnR6M_ypVU~@g|30c=@dor+5-t;0%YqR}1Kg(Va+utBOKyTiLZ*91ZZ`CZhz`c5! z_z-nJ*co>mMeF0v=#HmKY${q>Q|H_y!r7nbh(~Og=JhON7r#f~z$?5vT>6=|qrtJF zwO|n$FBslR?3PJ~S_aO#Wxq^0*sOj(2v#dy&z5aYnWr#0oVY4>4-0g+THJfuwe6Vo$|1q>LP- zj|uowpB#*}A=1%~4<8CG{D_32`*YL?<_zWm`@SU}jh@+`CrH6v7AkDvE*ZHigIM?s zbb1^y-615>1-Pg5HBM#*KrS=D91p$%juhgCCHxZ^{gWh8Jr%#9fMK#wD0rhElpJRB z{}XKI_JHlgCFi3lNze}gSm~8T??GSrVY#1iXyyw~n=tRXiSv z#8Py`&pa(&L1Plbq(^%OFzg4K0a?>=(OjFrlZ1j$sQrd@Y{QVhMUHRV|6k&)Q_UpP zmT)|NEERod72G3&^8n5zc|Ap;naQVNcuMRK*(U* zfX6#KJ^!LruaF=)sI$3s+qBe|nU$QE%|q~)8)B2&M3@I!u0@8^1oxojllhsJnw`kd z2QtiDkNKHX`NhVx!<>1OAuaMeIeIz|vVsECjUNGBnuYdIwFT?N&*A%EjfvXHc5At# zjdivnM$uD|gVlLBgaqN&AF?48JKDMZ! z$2L9`5-Rw8V|Tu#^JM(>XN)2iJ>YDl@F@IksunNsvw zVJNR8eZD?%c5Z&og8Z;a*|TPb&D0mpF33lRDg=K{(N)=Oz^;E|*gv&_&&Qx?sxrAs zzU8RI9@88iNuuPq`+UC=);+^VJ;=1)x~84dMqcBtT;vF374wl!RZf)Gcq$j!!=kRr zC7^qgo5A3()Kzy?;;n@lC1QldQ`i(J4#fMfeqEJOa5fb`*(Yz*!t4NLtud6hE>bmh zdBnc(2%p6bn#*H499erm%ADrA(QskNiumG%<=WD^Q({VsuXW-P@@a(l-JSSB>qUh4 zl>aP#oqGd)pfvo5+@UjmG4#Vtrue full false - ..\ICSSoft.Test\bin\Debug\ + ..\Root\ DEBUG;TRACE prompt 4 @@ -114,7 +114,7 @@ - + @@ -142,6 +142,8 @@ + + @@ -168,6 +170,7 @@ + diff --git a/ICSSoft.FromERP/Model/金杨/CapInputDto.cs b/ICSSoft.FromERP/Model/金杨/CapInputDto.cs new file mode 100644 index 0000000..d669786 --- /dev/null +++ b/ICSSoft.FromERP/Model/金杨/CapInputDto.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ICSSoft.FromERP.Model +{ + public class CapInputDto + { + /// + /// 车间编号 + /// + public string WorkshopID { get; set; } + /// + /// 设备编号 + /// + public string EquipmentID { get; set; } + /// + /// 产品信息 + /// + public string ProductNo { get; set; } + /// + /// 批次号 + /// + public string LotNo { get; set; } + /// + /// 数据采集时间 + /// + public string CollectionTime { get; set; } + /// + /// 内阻值 + /// + public double ParamValue_Resistance { get; set; } + /// + /// 高度值 + /// + public double ParamValue_Height { get; set; } + /// + /// 备注预留 + /// + public string Msg { get; set; } + } +} diff --git a/ICSSoft.FromERP/Model/金杨/ResponseInfoDto.cs b/ICSSoft.FromERP/Model/金杨/ResponseInfoDto.cs new file mode 100644 index 0000000..79b8283 --- /dev/null +++ b/ICSSoft.FromERP/Model/金杨/ResponseInfoDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ICSSoft.FromERP.Model +{ + public class ResponseInfoDto + { + /// + /// 响应时间 + /// + public string ResponseTime { get; set; } + /// + /// 上传结果,OK为上传成功 + /// + public string Result { get; set; } + } +} diff --git a/ICSSoft.FromERP/SyncCas_Jinyang.cs b/ICSSoft.FromERP/SyncCas_Jinyang.cs new file mode 100644 index 0000000..81648f6 --- /dev/null +++ b/ICSSoft.FromERP/SyncCas_Jinyang.cs @@ -0,0 +1,104 @@ +using ICSSoft.FromERP.Model; +using Newtonsoft.Json; +using Quartz; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ICSSoft.FromERP +{ + /// + /// 数采上传(金杨) + /// + public class SyncCas_Jinyang : IJob + { + private static object key = new object(); + private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + public void Execute(IJobExecutionContext context) + { + try + { + lock (key) + { + log.Info("开始……………………………………………………………………"); + Execute(); + log.Info("结束……………………………………………………………………"); + } + } + catch (Exception ex) + { + log.Error(ex.ToString()); + } + } + + public void Execute() + { + try + { + string conStr = ICSHelper.GetConnectString(); + string Namespace = this.GetType().Namespace; + //string Class = this.GetType().Name; + DataTable dt = ICSHelper.GetERPDB(conStr); + foreach (DataRow dr in dt.Rows) + { + var dtNowBegin = new DateTime(2000, 1, 1, 0, 0, 0);//默认开始时间 + var dtNow = DateTime.Now; + string erpName = ICSHelper.GetConfigString()["ERPDB"]; + string TenantId = dr["TenantId"].ToString();//mes 组织 + string TenantCode = dr["TenantCode"].ToString(); + string ErpId = dr["ErpID"].ToString(); //erpID + string Class = this.GetType().Name + TenantCode; + erpName = string.Format(erpName, TenantId); + + string sql0 = " SELECT top 1 ModifyDate FROM ICSERPTime where ClassName='" + Class + "'"; + var lastDate = ICSHelper.ExecuteScalar(conStr, sql0).ToDateOrNull(); + if (!lastDate.HasValue) + { + lastDate = dtNowBegin; + } + + string sql = @" select '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' as MTIME into #TempVendor "; + sql = ICSHelper.Time(Namespace, Class, TenantId, sql, "#TempVendor"); + sql += "DROP TABLE #TempVendor"; + ICSHelper.ExecuteDate(conStr, sql); + + + var input = new CapInputDto(); + input.WorkshopID = ""; + input.EquipmentID = ""; + input.ProductNo = ""; + input.LotNo = ""; + input.CollectionTime = ""; + input.ParamValue_Resistance = 12; + input.ParamValue_Height = 12; + input.Msg = ""; + + var inputObj = JsonConvert.SerializeObject(input); + string url = ICSHelper.GetConfigString()["WeiMasErpUrl"] + @"/BasicAssistingService/FromWeMec/APIVenderToMES"; + + var result = HttpHelper.HttpClientPost(url, inputObj).Result; + if (result.Result == "OK") + { + + + + + // insertSql += "DROP TABLE #tempFromErp4Vendor"; + //ICSHelper.ExecuteDate(conStr, insertSql); + } + else + { + throw new Exception(result.Result); + } + } + } + catch (Exception ex) + { + log.Error(ex.ToString()); + } + } + } +} diff --git a/ICSSoft.FromERP/SyncCustomer_WeiMas.cs b/ICSSoft.FromERP/SyncCustomer_WeiMas.cs index 13c2300..1249ff5 100644 --- a/ICSSoft.FromERP/SyncCustomer_WeiMas.cs +++ b/ICSSoft.FromERP/SyncCustomer_WeiMas.cs @@ -14,7 +14,7 @@ namespace ICSSoft.FromERP /// /// 客户档案(威迈) /// - public class SyncCustomer_WeiMas + public class SyncCustomer_WeiMas : IJob { private static object key = new object(); diff --git a/Root/App.config b/Root/App.config new file mode 100644 index 0000000..4c4ab2f --- /dev/null +++ b/Root/App.config @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Root/ICSSoft.FromERP.dll b/Root/ICSSoft.FromERP.dll index 6a0ec342458428e294e089437e1521416a52fe7a..db6fc0a4de4d8a1fe79c1c5cfb24ca52b5a13af0 100644 GIT binary patch literal 714752 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 z%0A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 literal 458752 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 z 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 - + + + + + + + + + + + - + + + + + - + diff --git a/Root/ICSSoft.FromERP.pdb b/Root/ICSSoft.FromERP.pdb index 2b7e586e5ea888808021d13a2957c5043558040c..1d4aca7fd5af733315ab02ae967d796a0a9c851e 100644 GIT binary patch literal 443904 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

    c^-U<^TQ!?M)8U8X*dHu18;}V!pGqn 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 literal 241152 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 WQ4V~R10UtUM>+6O4*c)Vf&T{)4mKhH diff --git a/Root/Newtonsoft.Json.dll b/Root/Newtonsoft.Json.dll index 7af125a246d180e71b9c4a20cca73cc44bfa8902..cfee60e16f08693ff6ed498181da686d581799db 100644 GIT binary patch delta 11384 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 Ue|Q!3!oo7W<-Nvg#0Z1^4=*X*vH$=8 delta 1342 zcmY+E4K$Ql7{}lDWk&Ndi&6;VqqclC-giEXvGhTmusUiuV|QsaGtESWvdXg6XjsOm zVQMlmmD+?!ll3*T(N-iheJG(J#WCoEjan+T*w;Co>Isd(LzJ|K~a9-gD2rOs0U#Vek+ND$oY*fSs2K@6k1AOD((dfupxl7XG9%uIT1UD~pPH zCHEgf@Q?DC57!Sb8^!H*biJ{awf-qypZX?kL~-(AQ%i#NPwjuYoQ1YUcXRb#t{ELc zmx4=|9t&6(zcse~vcApUUd|hO>14TE6d#*;dC}Dew|SC9al@}!l2gRay+#ehSz}@P zL4pdv#){nZV#SyQ-fVHRoTC}(P6{r$yez{A*% zWj+8M%Q;v!4-G&tf4+~4tr?huU|lF6P;lfh9fts90MS|&zyh!gEPx>r2|EP@0f>lX zgD1FW1!cV_f+o;e5s83FIE7;&%yJ@U9Jf;8r?wkI=lVv^FD-lN+$Q#X+T=HMW5edq z*ZVBAvO;*8h&L}pMCNiuekt7Uv~WS4(xtk%NLe7B3g;!?ci?v(;^yWoI{v!0U=KUM zS|Kchw+hwXXBk@(%K3BZnS0cud7KVk-DrDM@nNL^Ef`!F~yA=nPxJI(L&8AKbb*13IyYff) z@JjDt-uJkgy!eXdX3Z7XYBoD^MwIGy5oB(PZ(Fj_jRHX_XF71wfXDIyX?TtJo$Uj%QW% zXhZ)w5pg{tBCf^59(d3g6fum9KvYCTFwOI;`ye`ClC8p21&0Lq{^g(Od4&Cbk4z&G zlRH^8-?Z*J$n4kOa;}N-H3>+_89~b4fuB7OiL)y`}#E&~8 z^VaU1&}^LZN+OsIzBK6ah9csoS6dB63RlFw3TavUTYKugvFvwuV;;8Oj}q$Fw3-^| zw{cnN#8;9D*HXV%TRbvl*4a_Z3h{baqF$WTG-B8KMiotQkN$PBoez*~tEs6<>B#E} zVa?ejv$kdKlb=vUL2mVKR_5lo<%AgjIpXl)nP14-Lo6YqXY$IZ?ca>{o;xbvhc)Mv z-SUKwvByF}AFcE@=r+mEFmbXW-)!;u7t$qB>ux=3F0N+#{Nc9Y!X;{2)G2kBN!oRq a*}II%ewXyX6XK<%t9+ohPi^$`AH)AH{W6~b diff --git a/Root/System.IO.dll b/Root/System.IO.dll new file mode 100644 index 0000000000000000000000000000000000000000..c33120c6e803faa746bf660a1b5f67bdab15460c GIT binary patch literal 22184 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 EKbmnPJpcdz literal 0 HcmV?d00001 diff --git a/Root/System.Net.Http.dll b/Root/System.Net.Http.dll index 31270210d399b69de842ecfc79ca582ae1621547..899bf5e4b74ee580d13a3faf5bec55e4a3502240 100644 GIT binary patch literal 197680 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

    F~RAMRTBy`V>61q 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 diff --git a/Root/System.Runtime.dll b/Root/System.Runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f1201058f5070d07cc3ab031ce3050d6405162b GIT binary patch literal 29880 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 Lv66*{9rS+y8O*Y4 literal 0 HcmV?d00001 diff --git a/Root/log4net.dll b/Root/log4net.dll index 93fb476ce09698c5b42da2596d74de0cfdbd1c81..79b27e23bc8c158ebcba2940771bb1eb30295b7b 100644 GIT binary patch literal 270336 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 VDh94%;3@{LV&EzU{=bQV{|5w}M|uDN literal 276480 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ǚD6b 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 diff --git a/Root/log4net.xml b/Root/log4net.xml index df56743..e3d2991 100644 --- a/Root/log4net.xml +++ b/Root/log4net.xml @@ -55,38 +55,38 @@ An example configuration to log to the above table: - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -96,2460 +96,2618 @@ Gert Driesen Lance Nehring - + +

    + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + - Abstract base class implementation of that - buffers events in a fixed size buffer. + 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. + - 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. + The connections string is specific to the connection type. + See for more information. - Nicko Cadell - Gert Driesen + 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=;" + - + - Abstract base class implementation of . + 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. + - This class provides the code for common functionality, such - as support for threshold filtering and support for general filters. + The type name of the ADO.NET provider to use. - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. + The default is to use the OLE DB provider. - Nicko Cadell - Gert Driesen + 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. + - + - Implement this interface for your own strategies for printing log statements. + 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. + - Implementors should consider extending the - class which provides a default implementation of this interface. + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. + 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 + . - Nicko Cadell - Gert Driesen - + - Closes the appender and releases resources. + Gets or sets the command type to execute. + + The command type to execute. + - Releases any resources allocated within the appender such as file handles, - network connections, etc. + 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. - It is a programming error to append to a closed appender. + The default value is (System.Data.CommandType.Text). - + - Log the logging event in Appender specific way. + Should transactions be used to insert logging events in the database. - The event to log + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + - This method is called to log a message into this appender. + 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 name of this appender. + Gets or sets the used to call the NetSend method. - The name of the appender. + + The used to call the NetSend method. + - The name uniquely identifies the appender. + + 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. + - + - Interface for appenders that support bulk logging. + 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. + - This interface extends the interface to - support bulk logging of objects. Appenders - should only implement this interface if they can bulk log efficiently. + 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. + - Nicko Cadell - + - Log the array of logging events in Appender specific way. + Gets or sets the underlying . - The events to log + + The underlying . + - - This method is called to log an array of events into this appender. - + 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. - + - Interface used to delay activate a configured object. + Initialize the appender based on the options set - 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. + 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 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. + If any of the configuration properties are modified then + must be called again. - Nicko Cadell - + - Activate the options that were previously set with calls to properties. + Override the parent method to close the database - 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. + Closes the database command and database connection. - - - Interface that can be implemented by Appenders that buffer logging data and expose a method. - - - + - Flushes any buffered log data. + Inserts the events into the database. + The events to insert into the database. - 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.: - - - + Insert all the events specified in the + array into the database. + + + + + Adds a parameter to the command. + + The parameter to add to the command. + - The parameter is only relevant for appenders that process logging events asynchronously, - such as . + Adds a parameter to the ordered list of command parameters. - The maximum time to wait for logging events to be flushed. - True if all logging events were flushed successfully, else false. - + - Initial buffer size + 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. + + - + - Maximum buffer size before it is recycled + Prepare entire database command object to be executed. + The command to prepare. - + - Default constructor + Formats the log message into database statement text. + The event being logged. - Empty default constructor + 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 . + - + - Finalizes this appender by calling the implementation's - method. + Creates an instance used to connect to the database. - - If this appender has not been closed then the Finalize method - will call . - + 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. - + - Initialize the appender based on the options set + Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey + 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. - + 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. - + - Closes the appender and release resources. + Retrieves the class type of the ADO.NET provider. - 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. + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. - 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. + Subclasses can override this method to return a different type + if necessary. + The of the ADO.NET provider - + - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. + Connects to the database. + + + + + Cleanup the existing connection. - 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. - + Calls the IDbConnection's method. - + - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. + The list of objects. - 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. + The list of objects. - + - Test if the logging event should we output by this appender + 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. - 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 - . - - - - + Used by the internal logger to record the Type of the + log message. - + - Adds a filter to the end of the filter chain. + Parameter type used by the . - the filter to add to this appender - The Filters are organized in a linked list. + This class provides the basic database parameter properties + as defined by the interface. - - Setting this property causes the new filter to be pushed onto the - back of the filter chain. + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . - + - Clears the filter list for this appender. + Initializes a new instance of the class. - - Clears the filter list for this appender. - + Default constructor for the AdoNetAppenderParameter class. - + - Checks if the message level is below this appender's threshold. + Gets or sets the name of this parameter. - to test against. + + The name of this parameter. + - If there is no threshold set, then the return value is always true. - + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + - - 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. + Gets or sets the database type for this parameter. + + The database type for this parameter. + - Releases any resources allocated within the appender such as file handles, - network connections, etc. + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . - It is a programming error to append to a closed appender. + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + - + - Subclasses of should implement this method - to perform actual logging. + Gets or sets the precision for this parameter. - The event to append. + + The precision for this parameter. + - 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. + The maximum number of digits used to represent the Value. - To restrict the logging of events in the appender - override the method. + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + - + - Append a bulk array of logging events. + Gets or sets the scale for this parameter. - the array of logging events + + The scale for this parameter. + - This base class implementation calls the - method for each element in the bulk array. + The number of decimal places to which Value is resolved. - A sub class that can better process a bulk array of events should - override this method in addition to . + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + - + - Called before as a precondition. + Gets or sets the size for this parameter. + + The size for this parameter. + - This method is called by - before the call to the abstract method. + The maximum size, in bytes, of the data within the column. - This method can be overridden in a subclass to extend the checks - made before the event is passed to the method. + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. - A subclass should ensure that they delegate this call to - this base class if it is overridden. + For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. - true if the call to should proceed. + - + - Renders the to a string. + Gets or sets the to use to + render the logging event into an object for this + parameter. - The event to render. - The event rendered as a string. + + The used to render the + logging event into an object for this parameter. + - 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. + The that renders the value for this + parameter. - 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. + The can be used to adapt + any into a + for use in the property. - + - Renders the to a string. + Prepare the specified database command object. - The event to render. - The TextWriter to write the formatted event to + The command to prepare. - 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. + Prepares the database command object by adding + this parameter to its collection of parameters. - - - 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. + Renders the logging event and set the parameter value in the command. + The command containing the parameter. + The event to be rendered. - There is no level threshold filtering by default. - - - See for more information. + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. - + - It is assumed and enforced that errorHandler is never null. + The name of this parameter. - - - It is assumed and enforced that errorHandler is never null. - - - See for more information. - - - + - The first filter in the filter chain. + The database type for this parameter. - - - Set to null initially. - - - See for more information. - - - + - The last filter in the filter chain. + Flag to infer type rather than use the DbType - - See for more information. - - + - Flag indicating if this appender is closed. + The precision for this parameter. - - See for more information. - - + - The guard prevents an appender from repeatedly calling its own DoAppend method + The scale for this parameter. - + - StringWriter used to render events + The size for this parameter. - + - The fully qualified type of the AppenderSkeleton class. + The to use to render the + logging event into an object for this parameter. - - Used by the internal logger to record the Type of the - log message. - - + - Gets or sets the threshold of this appender. + Appends logging events to the terminal using ANSI color escape sequences. - - The threshold of the appender. - - All log events with lower level than the threshold level are ignored - by the appender. + 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. + - 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. + 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. - - - - - 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. - + 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. + - Returns the head Filter. The Filters are organized in a linked list - and so all Filters on this Appender are available through the result. + 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 - + - Gets or sets the for this appender. + The enum of possible display attributes - The layout of the appender. - See for more information. + The following flags can be combined together to + form the ANSI color attributes. - + - + - Gets or sets the name of this appender. + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking - The name of the appender. - - The name uniquely identifies the appender. - + Not all terminals support this attribute - + - Tests if this appender requires a to be set. + 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 - 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. + The output can be in one for the following ANSI colors. - - true if the appender requires a layout object, otherwise false. - + - + - The default buffer size. + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + Initializes a new instance of the class. - The default size of the cyclic buffer used to store events. - This is set to 512 by default. + The instance of the class is set up to write + to the standard output stream. - + - Initializes a new instance of the class. + 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". + - Protected default constructor to allow subclassing. + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". - + - Initializes a new instance of the class. + Add a mapping of level to color - the events passed through this appender must be - fixed by the time that they arrive in the derived class' SendBuffer method. + The mapping to add - 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. + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. - - - 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 + This method is called by the method. + The event to log. - Flushes any events that have been buffered. + Writes the event to the console. - If the appender is buffering in mode then the contents - of the buffer will NOT be flushed to the appender. + The format of the output will depend on the appender's layout. - + - Flush the currently buffered events + This appender requires a to be set. - set to true to flush the buffer of lossy events + true - 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. + This appender requires a to be set. - + - Initialize the appender based on the options set + Initialize the options for 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. + Initialize the level to color mappings set on this appender. - + - Close this appender instance. + The to use when writing to the Console + standard output stream. - 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. + The to use when writing to the Console + standard output stream. - + - This method is called by the method. + The to use when writing to the Console + standard error output stream. - 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. + The to use when writing to the Console + standard error output stream. - + - Sends the contents of the buffer. + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Ansi code to reset terminal + + + + + 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. - The first logging event. - The buffer containing the events that need to be send. - The subclass must override . + Defines the mapping between a level and the color it should be displayed in. - + - Sends the events. + The mapped foreground color for the specified level - The events that need to be send. - The subclass must override this method to process the buffered events. + Required property. + The mapped foreground color for the specified level - + - The size of the cyclic buffer used to hold the logging events. + The mapped background color for the specified level - Set to by default. + + Required property. + The mapped background color for the specified level + - + - The cyclic buffer used to store the logging events. + The color attributes for the specified level + + + Required property. + The color attributes for the specified level + + - + - The triggering event evaluator that causes the buffer to be sent immediately. + Initialize the options for the object - 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. + + Combine the and together + and append the attributes. + - + - 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. + The combined , and + suitable for setting the ansi terminal color. - - If this field is set to true then an must - be set. - - + - The triggering event evaluator filters discarded events. + A strongly-typed collection of objects. - - 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. - + Nicko Cadell - + - Value indicating which fields in the event should be fixed + Supports type-safe iteration over a . - - By default all fields are fixed - + - + - The events delivered to the subclass must be fixed. + Gets the current element in the collection. - + - Gets or sets a value that indicates whether the appender is lossy. + Advances the enumerator to the next element in the collection. - - 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. - + + 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. + - + - Gets or sets the size of the cyclic buffer used to hold the - logging events. + Sets the enumerator to its initial position, before the first element in the collection. - - 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. + Creates a read-only wrapper for a AppenderCollection instance. - - 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. - + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + - + - Gets or sets the value of the to use. + An empty readonly static AppenderCollection - - 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. + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. - - 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 + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. - - 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. - - - + + The number of elements that the new AppenderCollection is initially capable of storing. + - - - Initializes a new instance of the class. + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. - - Public default constructor to initialize a new instance of this class. - + The AppenderCollection whose elements are copied to the new collection. - + - Initialize the appender based on the options set + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. - - - 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 array whose elements are copied to the new list. - + - Override the parent method to close the database + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. - - - Closes the database command and database connection. - - + The collection whose elements are copied to the new list. - + - Inserts the events into the database. + Type visible only to our subclasses + Used to access protected constructor - The events to insert into the database. - - - Insert all the events specified in the - array into the database. - - + - + - Adds a parameter to the command. + A value - 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. + Allow subclasses to avoid our default constructors - 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. + Gets the number of elements actually contained in the AppenderCollection. - 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. + Copies the entire AppenderCollection to a one-dimensional + array. - - 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. + The one-dimensional array to copy to. - + - Resolves the connection string from the ConnectionString, ConnectionStringName, or AppSettingsKey - property. + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. - - 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. + The one-dimensional array to copy to. + The zero-based index in at which copying begins. - + - Retrieves the class type of the ADO.NET provider. + Gets a value indicating whether access to the collection is synchronized (thread-safe). - - - 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 + false, because the backing type is an array, which is never thread-safe. - + - Connects to the database. - + Gets an object that can be used to synchronize access to the collection. + - + - Cleanup the existing connection. + Gets or sets the at the specified index. - - Calls the IDbConnection's method. - + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + - + - The list of objects. + Adds a to the end of the AppenderCollection. - - - The list of objects. - - + The to be added to the end of the AppenderCollection. + The index at which the value has been added. - + - The security context to use for privileged calls + Removes all elements from the AppenderCollection. - + - The that will be used - to insert logging events into a database. + Creates a shallow copy of the . + A new with a shallow copy of the collection data. - + - Database connection string. + Determines whether a given is in the AppenderCollection. + The to check for. + true if is found in the AppenderCollection; otherwise, false. - + - The appSettings key from App.Config that contains the connection string. + 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. + - + - The connectionStrings key from App.Config that contains the connection string. + 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 . + - + - String type name of the type name. + Removes the first occurrence of a specific from the AppenderCollection. + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + - + - The text of the command. + 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 . + - + - The command type. + 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 - + - Indicates whether to use transactions when writing to the database. + Gets a value indicating whether the IList is read-only. + true if the collection is read-only; otherwise, false. The default is false - + - Indicates whether to reconnect when a connection is lost. + Returns an enumerator that can iterate through the AppenderCollection. + An for the entire AppenderCollection. - + - The fully qualified type of the AdoNetAppender class. + Gets or sets the number of elements the AppenderCollection can contain. - - 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. + Adds the elements of another AppenderCollection to the current AppenderCollection. - - 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 AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. - + - The appSettings key from App.Config that contains the connection string. + 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. - + - The connectionStrings key from App.Config that contains the connection string. + Adds the elements of a collection to the current AppenderCollection. - - This property requires at least .NET 2.0. - + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. - + - Gets or sets the type name of the connection - that should be created. + 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 . + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Gets the current element in the collection. + + + + + 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. + + + + + + + + Abstract base class implementation of . - - The type name of the connection. - - The type name of the ADO.NET provider to use. + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. - The default is to use the OLE DB provider. + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. - 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. - + Nicko Cadell + Gert Driesen - + - Gets or sets the command text that is used to insert logging events - into the database. + Default constructor - - 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 - . - + Empty default constructor - + - Gets or sets the command type to execute. + Finalizes this appender by calling the implementation's + method. - - 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). + If this appender has not been closed then the Finalize method + will call . - + - Should transactions be used to insert logging events in the database. + Gets or sets the threshold of this appender. - true if transactions should be used to insert logging events in - the database, otherwise false. The default value is true. + The threshold of the appender. - Gets or sets a value that indicates whether transactions should be used - to insert logging events in the database. + All log events with lower level than the threshold level are ignored + by the appender. - 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. + 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 used to call the NetSend method. + Gets or sets the for this appender. - - The used to call the NetSend method. - + The of the appender - 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. + The provides a default + implementation for the property. - + - Should this appender try to reconnect to the database on error. + The filter chain. - - 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 head of the filter chain filter chain. - 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. + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. - - 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 . + Gets or sets the for this appender. - - The underlying . - + The layout of the appender. - 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. + + See for more information. + + - + - Parameter type used by the . + Initialize the appender based on the options set - This class provides the basic database parameter properties - as defined by the interface. + 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. - This type can be subclassed to provide database specific - functionality. The two methods that are called externally are - and . + + If any of the configuration properties are modified then + must be called again. - + - Initializes a new instance of the class. + Gets or sets the name of this appender. + The name of the appender. - Default constructor for the AdoNetAppenderParameter class. + + The name uniquely identifies the appender. + - + - Prepare the specified database command object. + Closes the appender and release resources. - The command to prepare. - Prepares the database command object by adding - this parameter to its collection of parameters. + 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. - + - Renders the logging event and set the parameter value in the command. + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. - The command containing the parameter. - The event to be rendered. + The event to log. - Renders the logging event using this parameters layout - object. Sets the value of the parameter on the command object. + 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. - - - 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. + 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. + + - + - The scale for this parameter. + 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 + . + + + + + - + - The size for this parameter. + 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. + + - + - The to use to render the - logging event into an object for this parameter. + Clears the filter list for this appender. + + + Clears the filter list for this appender. + + - + - Gets or sets the name of this parameter. + Checks if the message level is below this appender's threshold. - - The name of this parameter. - + to test against. - The name of this parameter. The parameter name - must match up to a named parameter to the SQL stored procedure - or prepared statement. + If there is no threshold set, then the return value is always true. + + true if the meets the + requirements of this appender. + - + - Gets or sets the database type for this parameter. + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. - - 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 . + Releases any resources allocated within the appender such as file handles, + network connections, etc. - This property is optional. If not specified the ADO.NET provider - will attempt to infer the type from the value. + It is a programming error to append to a closed appender. - - + - Gets or sets the precision for this parameter. + Subclasses of should implement this method + to perform actual logging. - - The precision for this parameter. - + The event to append. - The maximum number of digits used to represent the Value. + 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. - This property is optional. If not specified the ADO.NET provider - will attempt to infer the precision from the value. + To restrict the logging of events in the appender + override the method. - - + - Gets or sets the scale for this parameter. + Append a bulk array of logging events. - - The scale for this parameter. - + the array of logging events - The number of decimal places to which Value is resolved. + This base class implementation calls the + method for each element in the bulk array. - This property is optional. If not specified the ADO.NET provider - will attempt to infer the scale from the value. + A sub class that can better process a bulk array of events should + override this method in addition to . - - + - Gets or sets the size for this parameter. + Called before as a precondition. - - The size for this parameter. - - The maximum size, in bytes, of the data within the column. + This method is called by + before the call to the abstract method. - This property is optional. If not specified the ADO.NET provider - will attempt to infer the size from the value. + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. - For BLOB data types like VARCHAR(max) it may be impossible to infer the value automatically, use -1 as the size in this case. + A subclass should ensure that they delegate this call to + this base class if it is overridden. - + true if the call to should proceed. - + - Gets or sets the to use to - render the logging event into an object for this - parameter. + Renders the to a string. - - The used to render the - logging event into an object for this parameter. - + The event to render. + The event rendered as a string. - The that renders the value for this - parameter. + 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. - The can be used to adapt - any into a - for use in the property. + 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. - + - Appends logging events to the terminal using ANSI color escape sequences. + Renders the to a string. + The event to render. + The TextWriter to write the formatted event to - 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. + Helper method to render a to + a string. This appender must have a + set to render the to + a string. - - 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. + 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. - 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. + 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. + + + + + Tests if this appender requires a to be set. + + - 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. + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. - 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. + This default implementation always returns false. - Patrick Wagstrom - Nicko Cadell + + true if the appender requires a layout object, otherwise false. + - + - The to use when writing to the Console - standard output stream. + Flushes any buffered log data. - - The to use when writing to the Console - standard output stream. - + This implementation doesn't flush anything and always returns true + True if all logging events were flushed successfully, else false. - + - The to use when writing to the Console - standard error output stream. + The layout of this appender. - - The to use when writing to the Console - standard error output stream. - + See for more information. - - - Ansi code to reset terminal - - - + - Initializes a new instance of the class. + The name of this appender. - The instance of the class is set up to write - to the standard output stream. + See for more information. - + - Add a mapping of level to color + The level threshold of this appender. - The mapping to add - Add a mapping to this appender. - Each mapping defines the foreground and background colours - for a level. + There is no level threshold filtering by default. + + + See for more information. - + - This method is called by the method. + It is assumed and enforced that errorHandler is never null. - The event to log. - Writes the event to the console. + It is assumed and enforced that errorHandler is never null. - The format of the output will depend on the appender's layout. + See for more information. - + - Initialize the options for this appender + The first filter in the filter chain. - Initialize the level to color mappings set on this appender. + Set to null initially. - - - - - 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". + See for more information. - + - This appender requires a to be set. + The last filter in the filter chain. - true - - This appender requires a to be set. - + See for more information. - + - The enum of possible display attributes + Flag indicating if this appender is closed. - - The following flags can be combined together to - form the ANSI color attributes. - + See for more information. - - - - - text is bright - - - - - text is dim - - + - text is underlined + The guard prevents an appender from repeatedly calling its own DoAppend method - + - text is blinking + StringWriter used to render events - - Not all terminals support this attribute - - + - text and background colors are reversed + Initial buffer size - + - text is hidden + Maximum buffer size before it is recycled - + - text is displayed with a strikethrough + The fully qualified type of the AppenderSkeleton class. + + Used by the internal logger to record the Type of the + log message. + - + - text color is light + + 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 - + - The enum of possible foreground or background color values for - use with the color mapping method + Initializes a new instance of the class. - The output can be in one for the following ANSI colors. + Default constructor. - - + - color is black + 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 + (). + + - + - color is red + This appender requires a to be set. + true + + + This appender requires a to be set. + + - + - color is green + The category parameter sent to the Trace method. + + + Defaults to %logger which will use the logger name of the current + as the category parameter. + + + + - + - color is yellow + Defaults to %logger - + - color is blue + 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 + + - color is magenta + Initializes a new instance of the class. + + + Protected default constructor to allow subclassing. + + - + - color is cyan + 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. + + - + - color is white + 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. + - + - 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. + 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. + - Defines the mapping between a level and the color it should be displayed in. + 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. - + - An entry in the + Gets or sets the that causes the + buffer to be sent immediately. + + The that causes the buffer to be + sent immediately. + - This is an abstract base class for types that are stored in the - object. + 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. - Nicko Cadell - + - Default protected constructor + Gets or sets the value of the to use. + + The value of the to use. + - Default protected constructor + 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 ). - + - Initialize any options defined on this entry + 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. + - Should be overridden by any classes that need to initialise based on their options + 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. - + - The level that is the key for this mapping + Gets or sets a the fields that will be fixed in the event - The that is the key for this mapping + The event fields that will be fixed before the event is buffered - Get or set the that is the key for this - mapping subclass. + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + - + - Initialize the options for the object + 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 - Combine the and together - and append the attributes. + 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. - + - The mapped foreground color for the specified level + Flush the currently buffered events + set to true to flush the buffer of lossy events - Required property. - The mapped foreground color for the specified level + 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. - + - The mapped background color for the specified level + Initialize the appender based on the options set - Required property. - The mapped background color for the specified level + 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 color attributes for the specified level + Close this appender instance. - Required property. - The color attributes for the specified level + 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. - + - The combined , and - suitable for setting the ansi terminal color. + 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. + + - + - A strongly-typed collection of objects. + Sends the contents of the buffer. - Nicko Cadell + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + - + - Creates a read-only wrapper for a AppenderCollection instance. + Sends the events. - list to create a readonly wrapper arround - - An AppenderCollection wrapper that is read-only. - + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + - + - An empty readonly static AppenderCollection + 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 AppenderCollection class - that is empty and has the default initial capacity. + The size of the cyclic buffer used to hold the logging events. + + Set to by default. + - + - Initializes a new instance of the AppenderCollection class - that has the specified initial capacity. + The cyclic buffer used to store the logging events. - - 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 triggering event evaluator that causes the buffer to be sent immediately. - The AppenderCollection whose elements are copied to the new collection. + + 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. + - + - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified array. + 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. - The array whose elements are copied to the new list. + + If this field is set to true then an must + be set. + - + - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified collection. + The triggering event evaluator filters discarded events. - The collection whose elements are copied to the new list. + + 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. + - + - Allow subclasses to avoid our default constructors + Value indicating which fields in the event should be fixed - - + + By default all fields are fixed + - + - Copies the entire AppenderCollection to a one-dimensional - array. + The events delivered to the subclass must be fixed. - 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. + Buffers events and then forwards them to attached appenders. - The one-dimensional array to copy to. - The zero-based index in at which copying begins. + + + 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 - + - Adds a to the end of the AppenderCollection. + Initializes a new instance of the class. - The to be added to the end of the AppenderCollection. - The index at which the value has been added. + + + Default constructor. + + - + - Removes all elements from the AppenderCollection. + 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. + + - + - Creates a shallow copy of the . + Send the events. - A new with a shallow copy of the collection data. + The events that need to be send. + + + Forwards the events to the attached appenders. + + - + - Determines whether a given is in the AppenderCollection. + Adds an to the list of appenders of this + instance. - The to check for. - true if is found in the AppenderCollection; otherwise, false. + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + - + - Returns the zero-based index of the first occurrence of a - in the AppenderCollection. + Gets the appenders contained in this appender as an + . - The to locate in the AppenderCollection. + + If no appenders can be found, then an + is returned. + - The zero-based index of the first occurrence of - in the entire AppenderCollection, if found; otherwise, -1. + A collection of the appenders in this appender. - - - 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. + Looks for the appender with the specified name. - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + - + - Returns an enumerator that can iterate through the AppenderCollection. + Removes all previously added appenders from this appender. - An for the entire AppenderCollection. + + + This is useful when re-reading configuration information. + + - + - Adds the elements of another AppenderCollection to the current AppenderCollection. + Removes the specified appender from the list of appenders. - The AppenderCollection whose elements should be added to the end of the current AppenderCollection. - The new of the AppenderCollection. + 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. + - + - Adds the elements of a array to the current AppenderCollection. + Removes the appender with the specified name from the list of appenders. - The array whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. + 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. + - + - Adds the elements of a collection to the current AppenderCollection. + Implementation of the interface - 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. + 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 - - - 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. + The enum of possible color values for use with the color mapping method + + + The following flags can be combined together to + form the colors. + + + - + - Supports type-safe iteration over a . + color is blue - - + - Advances the enumerator to the next element in the collection. + color is green - - 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. + color is red - + - Gets the current element in the collection. + color is white - + - Type visible only to our subclasses - Used to access protected constructor + color is yellow - - + - A value + color is purple - + - Supports simple iteration over a . + color is cyan - - + - Initializes a new instance of the Enumerator class. + color is intensified - - + - Advances the enumerator to the next element in the collection. + Initializes a new instance of the class. - - 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. - + + The instance of the class is set up to write + to the standard output stream. + - + - Sets the enumerator to its initial position, before the first element in the collection. + 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. + - + - Gets the current element in the collection. + 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. + - - - - + - - Appends log events to the ASP.NET system. - + 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". + - 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. + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". - Nicko Cadell - Gert Driesen - Ron Grabowski - + - Initializes a new instance of the class. + Add a mapping of level to color - done by the config file + The mapping to add - Default constructor. + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. - + - Write the logging event to the ASP.NET trace + This method is called by the method. - the event to log + The event to log. - Write the logging event to the ASP.NET trace - HttpContext.Current.Trace - (). + Writes the event to the console. + + + The format of the output will depend on the appender's layout. - - - Defaults to %logger - - - + This appender requires a to be set. @@ -2560,1616 +2718,1382 @@ - + - The category parameter sent to the Trace method. + Initialize the options for this appender - Defaults to %logger which will use the logger name of the current - as the category parameter. + Initialize the level to color mappings set on this appender. - - - + - Buffers events and then forwards them to attached appenders. + The to use when writing to the Console + standard output stream. - 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. + The to use when writing to the Console + standard output stream. - Nicko Cadell - Gert Driesen - + - Interface for attaching appenders to objects. + The to use when writing to the Console + standard error output stream. - Interface for attaching, removing and retrieving appenders. + The to use when writing to the Console + standard error output stream. - Nicko Cadell - Gert Driesen - + - Attaches an 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 - The appender to add. - Add the specified appender. The implementation may - choose to allow or deny duplicate appenders. + This writer is not thread safe. - + - Gets an attached appender with the specified name. + 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. - 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. + Defines the mapping between a level and the color it should be displayed in. - + - Removes all attached appenders. + The mapped foreground color for the specified level - Removes and closes all attached appenders + Required property. + The mapped foreground color for the specified level. - + - Removes the specified appender from the list of attached appenders. + The mapped background color for the specified level - 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. + Required property. + The mapped background color for the specified level. - + - Removes the appender with the specified name from the list of appenders. + Initialize the options for the object - 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. + Combine the and together. - + - Gets all attached appenders. + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. - - 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. + 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 - + - Initializes a new instance of the class. + Initializes a new instance of the class. - - Default constructor. - + The instance of the class is set up to write + to the standard output stream. - + - Closes the appender and releases resources. + Initializes a new instance of the class + with the specified layout. + the layout to use for this appender - - 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. - + The instance of the class is set up to write + to the standard output stream. - + - Send the events. + Initializes a new instance of the class + with the specified layout. - The events that need to be send. + 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. + + + + + 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". + - Forwards the events to the attached appenders. + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". - + - Adds an to the list of appenders of this - instance. + This method is called by the method. - The to add to this appender. + The event to log. - If the specified is already in the list of - appenders, then it won't be added again. + Writes the event to the console. + + + The format of the output will depend on the appender's layout. - + - Looks for the appender with the specified name. + This appender requires a to be set. - The name of the appender to lookup. - - The appender with the specified name, or null. - + true - Get the named appender attached to this buffering appender. + This appender requires a to be set. - + - Removes all previously added appenders from this appender. + The to use when writing to the Console + standard output stream. - This is useful when re-reading configuration information. + The to use when writing to the Console + standard output stream. - + - Removes the specified appender from the list of appenders. + The to use when writing to the Console + standard error output stream. - 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. + + The to use when writing to the Console + standard error output stream. + - + - Removes the appender with the specified name from the list of appenders. + Appends log events to the system. - 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. + + 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 - + - Implementation of the interface + Initializes a new instance of the . + + + Default constructor. + + - + - Gets the appenders contained in this appender as an - . + Initializes a new instance of the + with a specified layout. + The layout to use with this appender. - If no appenders can be found, then an - is returned. + + Obsolete constructor. + - - A collection of the appenders in this appender. - - + - Appends logging events to the console. + 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. + - 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. + 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. + + - When configuring the colored console appender, mapping should be - specified to map a logging level to a color. For example: + Defaults to a with %logger as the pattern which will use the logger name of the current + as the category parameter. - - - - - - - - - - - - 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. + 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. - The to use when writing to the Console - standard output stream. + Writes the logging event to the system. + If is true then the + is called. - + - + - The to use when writing to the Console - standard error output stream. + This appender requires a to be set. + true - The to use when writing to the Console - standard error output stream. + This appender requires a to be set. - + - Initializes a new instance of the class. + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. - The instance of the class is set up to write - to the standard output stream. + + 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. - + - Initializes a new instance of the class - with the specified layout. + Defaults to a with %logger as the pattern. - 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. + Writes events to the system event log. - 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. + + 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 - + - Add a mapping of level to color - done by the config file + Initializes a new instance of the class. - The mapping to add - Add a mapping to this appender. - Each mapping defines the foreground and background colors - for a level. + Default constructor. - + - This method is called by the method. + Initializes a new instance of the class + with the specified . - The event to log. + The to use with this appender. - Writes the event to the console. - - - The format of the output will depend on the appender's layout. + Obsolete constructor. - + - Initialize the options for this appender + The name of the log where messages will be stored. + + The string name of the log where messages will be stored. + - - Initialize the level to color mappings set on this appender. + 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. - + - Flag to write output to the error stream rather than the standard output stream + 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. + - + - Mapping from level object to color value + 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. + - + - The console output stream writer to write to + Add a mapping of level to - done by the config file + The mapping to add - This writer is not thread safe. + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. - + - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". + Gets or sets the used to write to the EventLog. - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". + The used to write to the EventLog. - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". + 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. - + - This appender requires a to be set. + Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. - true - This appender requires a to be set. + 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. - + - The enum of possible color values for use with the color mapping method + Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. - The following flags can be combined together to - form the colors. - + 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. + - - - - - 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. + Initialize the appender based on the options set - Defines the mapping between a level and the color it should be displayed in. + 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. - + - Initialize the options for the object + Create an event log source - - Combine the and together. - + Uses different API calls under NET_2_0 - + - The mapped foreground color for the specified level + 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. + - Required property. - The mapped foreground color for the specified level. + There is a limit of 32K characters for an event log message - + - The mapped background color for the specified level + This appender requires a to be set. + true - Required property. - The mapped background color for the specified level. + This appender requires a to be set. - - - The combined and suitable for - setting the console color. - - - + - Appends logging events to the console. + Get the equivalent for a + the Level to convert to an EventLogEntryType + The equivalent for a - - 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. - + 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. - Nicko Cadell - Gert Driesen - + - The to use when writing to the Console - standard output stream. + The log name is the section in the event logs where the messages + are stored. - - - The to use when writing to the Console - standard output stream. - - - + - The to use when writing to the Console - standard error output stream. + Name of the application to use when logging. This appears in the + application column of the event log named by . - - - The to use when writing to the Console - standard error output stream. - - - + - Initializes a new instance of the class. + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. - - 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. + Mapping from level object to EventLogEntryType - 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 security context to use for privileged calls - 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 ID to use unless one is explicitly specified via the LoggingEvent's properties. - 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". + The event category to use unless one is explicitly specified via the LoggingEvent's properties. - - 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. + 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. - true - This appender requires a to be set. + Defines the mapping between a level and its event log entry type. - + - Appends log events to the system. + The for this entry - 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. + Required property. + The for this entry - Nicko Cadell - + - Initializes a new instance of the . + The fully qualified type of the EventLogAppender class. - - Default constructor. - + Used by the internal logger to record the Type of the + log message. - + - Initializes a new instance of the - with a specified layout. + The maximum size supported by default. - The layout to use with this appender. - - Obsolete constructor. - + 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. - + - Flushes any buffered log data. + The maximum size supported by a windows operating system that is vista + or newer. - The maximum time to wait for logging events to be flushed. - True if all logging events were flushed successfully, else false. + + 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). + - + - Writes the logging event to the system. + The maximum size that the operating system supports for + a event log message. - The event to log. - - Writes the logging event to the system. - If is true then the - is called. - + 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. - + - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. + This method determines the maximum event log message size allowed for + the current environment. + + + + + + Appends logging events to a file. - 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. + Logging events are sent to the file specified by + the property. - The default value is true. + 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 - + - Defaults to a with %logger as the pattern. + Write only that uses the + to manage access to an underlying resource. - + - Gets or sets a value that indicates whether the appender will - flush at the end of each write. + True asynchronous writes are not supported, the implementation forces a synchronous 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. + Locking model base class - Defaults to a with %logger as the pattern which will use the logger name of the current - as the category parameter. + Base class for the locking models available to the derived loggers. - - - + - This appender requires a to be set. + Open the output file - true + The filename to use + Whether to append to the file, or overwrite + The encoding to use - This appender requires a to be set. + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . - + - Writes events to the system event log. + Close the file - 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 - + Close the file. No further writes will be made. - Aspi Havewala - Douglas de la Torre - Nicko Cadell - Gert Driesen - Thomas Voss - + + + Initializes all resources used by this locking model. + + + - Initializes a new instance of the class. + 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. - Default constructor. + 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. - + - Initializes a new instance of the class - with the specified . + Release the lock on the file - The to use with this appender. - Obsolete constructor. + Release the lock on the file. No further writes will be made to the + stream until is called again. - + - Add a mapping of level to - done by the config file + Gets or sets the for this LockingModel - The mapping to add + + The for this LockingModel + - Add a mapping to this appender. - Each mapping defines the event log entry type for a level. + 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. - + - Initialize the appender based on the options set + Helper method that creates a FileStream under CurrentAppender's SecurityContext. - 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. + Typically called during OpenFile or AcquireLock. - If any of the configuration properties are modified then - must be called again. + If the directory portion of the does not exist, it is created + via Directory.CreateDirecctory. + + + + - + - Create an event log source + Helper method to close under CurrentAppender's SecurityContext. - Uses different API calls under NET_2_0 + Does not set to null. + - + - This method is called by the - method. + Hold an exclusive lock on the output file - 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 + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. - + - Get the equivalent for a + Open the file specified and prepare for logging. - the Level to convert to an EventLogEntryType - The equivalent for a + The filename to use + Whether to append to the file, or overwrite + The encoding to use - 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. + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + - - - 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. + Close the file + + + Close the file. No further writes will be made. + + - + - Mapping from level object to EventLogEntryType + Acquire the lock on the file + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + - + - The security context to use for privileged calls + Release the lock on the file + + + Does nothing. The lock will be released when the file is closed. + + - + - The event ID to use unless one is explicitly specified via the LoggingEvent's properties. + Initializes all resources used by this locking model. - + - The event category to use unless one is explicitly specified via the LoggingEvent's properties. + Disposes all resources that were initialized by this locking model. - + - The fully qualified type of the EventLogAppender class. + Acquires the file lock for each write - Used by the internal logger to record the Type of the - log message. + + 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. + - + - The maximum size supported by default. + 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 - 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. + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + - + - The maximum size supported by a windows operating system that is vista - or newer. + Close the file - 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). + + Close the file. No further writes will be made. + - + - The maximum size that the operating system supports for - a event log message. + Acquire the lock on the file + A stream that is ready to be written to. - 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. + + 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. + - - - This method determines the maximum event log message size allowed for - the current environment. - - - - + - The name of the log where messages will be stored. + Release the lock on the file - - 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. + + Release the lock on the file. No further writes will be made to the + stream until is called again. - + - Property used to set the Application name. This appears in the - event logs when logging. + Initializes all resources used by this locking model. - - 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 "." + Disposes all resources that were initialized by this locking model. - - 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. + Provides cross-process file locking. - - The used to write to the EventLog. - + 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 - 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. + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + - and . - + - Gets or sets the EventId to use unless one is explicitly specified via the LoggingEvent's properties. + Close the file - 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. + Close the file. No further writes will be made. - + - Gets or sets the Category to use unless one is explicitly specified via the LoggingEvent's properties. + Acquire the lock on the file + A stream that is ready to be written to. - 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. + Does nothing. The lock is already taken - + - This appender requires a to be set. + 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. + + + + + Hold no lock on the output file - true - This appender requires a to be set. + Open the file once and hold it open until is called. + Maintains no lock on the file during this time. - + - 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. + Open the file specified and prepare for logging. + The filename to use + Whether to append to the file, or overwrite + The encoding to use - Defines the mapping between a level and its event log entry type. + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . - + - The for this entry + Close the file - Required property. - The for this entry + Close the file. No further writes will be made. - + - Appends logging events to a file. + Acquire the lock on the file + A stream that is ready to be written to. - 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. + Does nothing. The lock is already taken - Nicko Cadell - Gert Driesen - Rodrigo B. de Oliveira - Douglas de la Torre - Niall Daley - + - Sends logging events to a . + Release the lock on the file - 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. + Does nothing. The lock will be released when the file is closed. - Nicko Cadell - Gert Driesen - Douglas de la Torre - + + + Initializes all resources used by this locking model. + + + + + Disposes all resources that were initialized by this locking model. + + + + + Default locking model (when no locking model was configured) + + + + + Specify default locking model + + Type of LockingModel + + - Initializes a new instance of the class. + Default constructor - Default constructor. + Default constructor - + - Initializes a new instance of the class and - sets the output destination to a new initialized - with the specified . + Construct a new appender using the layout, file and append mode. - The layout to use with this appender. - The to output to. + 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. - + - Initializes a new instance of the class and sets - the output destination to the specified . + Construct a new appender using the layout and file specified. + The file will be appended to. - The layout to use with this appender - The to output to - - The must have been previously opened. - + the layout to use with this appender + the full path to the file to write to Obsolete constructor. - + - This method determines if there is a sense in attempting to append. + 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. + - This method checks if an output target has been set and if a - layout has been set. + If the path is relative it is taken as relative from + the application base directory. - false if any of the preconditions fail. - + - This method is called by the - method. + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. - The event to log. + + Indicates whether the file should be appended to or overwritten. + - 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. + 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. - + - This method is called by the - method. + Gets or sets used to write to the file. - The array of events to log. + + The used to write to the file. + - This method writes all the bulk logged events to the output writer - before flushing the stream. + The default encoding set is + which is the encoding for the system's current ANSI code page. - + - Close this appender instance. The underlying stream or writer is also closed. + Gets or sets the used to write to the file. + + The used to write to the file. + - Closed appenders cannot be reused. + + 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. + - + - Writes the footer and closes the underlying . + Gets or sets the used to handle locking of the file. + + The used to lock the file. + - Writes the footer and closes the underlying . + 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 . - + - Closes the underlying . + Activate the options on the file appender. - Closes the underlying . + 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. - + - Clears internal references to the underlying - and other variables. + Closes any previously opened file and calls the parent's . - Subclasses can override this method for an alternate closing behavior. + Resets the filename and the file stream. - + - Writes a footer as produced by the embedded layout's property. + Close this appender instance. The underlying stream or writer is also closed. + + + + + Called to initialize the file writer - Writes a footer as produced by the embedded layout's property. + Will be called for each logged message until the file is + successfully opened. - + - Writes a header produced by the embedded layout's property. + This method is called by the + method. + The event to log. - Writes a header produced by the embedded layout's property. + 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. - + - Called to allow a subclass to lazily initialize the writer + This method is called by the + method. - - - 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. + The array of events to log. Acquires the output file locks once before writing all the events to @@ -4333,642 +4257,487 @@ log message. - + - Gets or sets the path to the file that logging will be written to. + This appender forwards logging events to attached appenders. - - 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. + 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 - + - Gets or sets a flag that indicates whether the file should be - appended to or overwritten. + Initializes a new instance of the class. - - 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. + Default constructor. - 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. + Closes the appender and releases resources. - - 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. + Releases any resources allocated within the appender such as file handles, + network connections, etc. - The default locking model is the . + It is a programming error to append to a closed appender. - - - 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. + Forward the logging event to the attached appenders + The event to log. - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. + Delivers the logging event to all the attached appenders. - Nicko Cadell - Gert Driesen - + - Constructor + Forward the logging events to the attached appenders + The array of events to log. - Initializes a new instance of the class. + Delivers the logging events to all the attached appenders. - + - Constructor + Adds an to the list of appenders of this + instance. - A message to include with the exception. + The to add to this appender. - Initializes a new instance of the class with - the specified message. + If the specified is already in the list of + appenders, then it won't be added again. - + - Constructor + Gets the appenders contained in this appender as an + . - 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. - + If no appenders can be found, then an + is returned. + + A collection of the appenders in this appender. + - + - Serialization constructor + Looks for the appender with the specified name. - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. + The name of the appender to lookup. + + The appender with the specified name, or null. + - Initializes a new instance of the class - with serialized data. + Get the named appender attached to this appender. - + - Locking model base class + Removes all previously added appenders from this appender. - Base class for the locking models available to the derived loggers. + This is useful when re-reading configuration information. - + - Open the output file + Removes the specified appender from the list of appenders. - The filename to use - Whether to append to the file, or overwrite - The encoding to use + The appender to remove. + The appender removed from the list - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. - + - Close the file + 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 - - Close the file. No further writes will be made. - + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. - - - Initializes all resources used by this locking model. - - - + - Disposes all resources that were initialized by this locking model. + Implementation of the interface - + - Acquire the lock on the file + Implement this interface for your own strategies for printing log statements. - 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. + Implementors should consider extending the + class which provides a default implementation of this interface. - - - - - 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. + 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 - + - Helper method that creates a FileStream under CurrentAppender's SecurityContext. + Closes the appender and releases resources. - Typically called during OpenFile or AcquireLock. + Releases any resources allocated within the appender such as file handles, + network connections, etc. - If the directory portion of the does not exist, it is created - via Directory.CreateDirecctory. + It is a programming error to append to a closed appender. - - - - - + - Helper method to close under CurrentAppender's SecurityContext. + Log the logging event in Appender specific way. + The event to log - Does not set to null. + + This method is called to log a message into this appender. + - - + - Gets or sets the for this LockingModel + Gets or sets the name of this appender. - - The for this LockingModel - + The name of the appender. - - 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. - + The name uniquely identifies the appender. - + - Hold an exclusive lock on the output file + Interface for appenders that support bulk logging. - Open the file once for writing and hold it open until is called. - Maintains an exclusive lock on the file during this time. + 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 - + - Open the file specified and prepare for logging. + Log the array of logging events in Appender specific way. - The filename to use - Whether to append to the file, or overwrite - The encoding to use + The events to log - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . + This method is called to log an array of events into this appender. - + - Close the file + Interface that can be implemented by Appenders that buffer logging data and expose a method. - - - Close the file. No further writes will be made. - - - + - Acquire the lock on the file + Flushes any buffered log data. - A stream that is ready to be written to. - - Does nothing. The lock is already taken + 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.: + + + - - - - - Release the lock on the file - - - Does nothing. The lock will be released when the file is closed. + 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. - - - 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 + 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! + - 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. + 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 - + - Prepares to open the file when the first message is logged. + syslog severities - 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 . + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . - + - Close the file + system is unusable - - - Close the file. No further writes will be made. - - - + - Acquire the lock on the file + action must be taken immediately - 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 + critical conditions - - - 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. + error conditions - + - Disposes all resources that were initialized by this locking model. + warning conditions - + - Provides cross-process file locking. + normal but significant condition - Ron Grabowski - Steve Wranovsky - + - Open the file specified and prepare for logging. + informational - 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 + debug-level messages - - - Close the file. No further writes will be made. - - - + - Acquire the lock on the file + syslog facilities - A stream that is ready to be written to. - Does nothing. The lock is already taken + The syslog facility defines which subsystem the logging comes from. + This is set on the property. - + - Releases the lock and allows others to acquire a lock. + kernel messages - + - Initializes all resources used by this locking model. + random user-level messages - + - Disposes all resources that were initialized by this locking model. + mail system - + - This appender forwards logging events to attached appenders. + system daemons - - - 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. + security/authorization messages - - - Default constructor. - - - + - Closes the appender and releases resources. + messages generated internally by syslogd - - - 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 + line printer subsystem - The event to log. - - - Delivers the logging event to all the attached appenders. - - - + - Forward the logging events to the attached appenders + network news subsystem - 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. + UUCP subsystem - 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. + clock (cron/at) daemon - 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. + security/authorization messages (private) - - - This is useful when re-reading configuration information. - - - + - Removes the specified appender from the list of appenders. + ftp daemon - 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. + NTP subsystem - 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 + log audit - + - Gets the appenders contained in this appender as an - . + 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 + + + + + Initializes a new instance of the class. - If no appenders can be found, then an - is returned. + This instance of the class is set up to write + to a local syslog service. - - A collection of the appenders in this appender. - - + - Logs events to a local syslog service. + Message identity - - 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 @@ -4976,16 +4745,15 @@ identity is the application name (from ). - Rob Lyon - Nicko Cadell - + - Initializes a new instance of the class. + Syslog facility - This instance of the class is set up to write - to a local syslog service. + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . @@ -5041,6 +4809,17 @@ + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + Translates a log4net level to a syslog severity. @@ -5107,488 +4886,302 @@ Close descriptor used to write to system logger. - + - Message identity + 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. - 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 ). + 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. - + - Syslog facility + The mapped syslog severity for the specified level - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . + + Required property. + The mapped syslog severity for the specified level + - + - This appender requires a to be set. + Appends colorful logging events to the console, using the .NET 2 + built-in capabilities. - true - This appender requires a to be set. + 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 - + - syslog severities + Initializes a new instance of the class. - - The log4net Level maps to a syslog severity using the - method and the - class. The severity is set on . - + The instance of the class is set up to write + to the standard output stream. - + - system is unusable + 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". + + - + - action must be taken immediately + 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. + + - + - critical conditions + 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. + + - + - error conditions + This appender requires a to be set. + true + + + This appender requires a to be set. + + - + - warning conditions + Initialize the options for this appender + + + Initialize the level to color mappings set on this appender. + + - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - + - syslog facilities + The to use when writing to the Console + standard output stream. - The syslog facility defines which subsystem the logging comes from. - This is set on the property. + The to use when writing to the Console + standard output stream. - - - 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 + The to use when writing to the Console + standard error output stream. + + + The to use when writing to the Console + standard error output stream. + + - + - reserved for local use + Flag to write output to the error stream rather than the standard output stream - + - reserved for local use + Mapping from level object to color value - + 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 color it should be displayed as. - 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. + Defines the mapping between a level and the color it should be displayed in. - + - The mapped syslog severity for the specified level + The mapped foreground color for the specified level Required property. - The mapped syslog severity for the specified level + The mapped foreground color for the specified level. - + - Appends colorful logging events to the console, using the .NET 2 - built-in capabilities. + The mapped background color for the specified level - 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. + Required property. + The mapped background color for the specified level. + + + + + Stores logging events in an array. + + - 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. + The memory appender stores all the logging events + that are appended in an in-memory array. - When configuring the colored console appender, mappings should be - specified to map logging levels to colors. For example: + Use the method to get + and clear the current list of events that have been appended. - - - - - - - - - - - - - - - - - - - - The Level is the standard log4net logging level while - ForeColor and BackColor are the values of - enumeration. + 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. - Based on the ColoredConsoleAppender + 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. - Rick Hobbs + Julian Biddle Nicko Cadell - Pavlos Touboulidis + Gert Driesen - + - The to use when writing to the Console - standard output stream. + Initializes a new instance of the class. - The to use when writing to the Console - standard output stream. + Default constructor. - + - The to use when writing to the Console - standard error output stream. + Gets the events that have been logged. + The events that have been logged - The to use when writing to the Console - standard error output stream. + Gets the events that have been logged. - + - Initializes a new instance of the class. + 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. + - The instance of the class is set up to write - to the standard output stream. + + 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. + - + - Add a mapping of level to color - done by the config file + Gets or sets the fields that will be fixed in the event - 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. + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. @@ -5633,41 +5226,10 @@ 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. + native function. @@ -5746,7 +5308,7 @@ Note : security restrictions apply for sending - network messages, see + network messages, see for more information. @@ -5758,9 +5320,9 @@ - - - + + + @@ -5795,6 +5357,60 @@ The default constructor initializes all fields to their default values. + + + 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. + + + Initialize the appender based on the options set. @@ -5812,10 +5428,10 @@ must be called again. - The appender will be ignored if no was specified. + The appender will be ignored if no was specified. - The required property was not specified. + The required property was not specified. @@ -5828,6 +5444,17 @@ + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + Sends a buffer of information to a registered message alias. @@ -5884,74 +5511,9 @@ - + - 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. + Appends log events to the OutputDebugString system. @@ -5968,7 +5530,7 @@ - Initializes a new instance of the class. + Initializes a new instance of the class. @@ -5987,25 +5549,25 @@ - + - Stub for OutputDebugString native method + This appender requires a to be set. - the string to output + true - Stub for OutputDebugString native method + This appender requires a to be set. - + - This appender requires a to be set. + Stub for OutputDebugString native method - true + the string to output - This appender requires a to be set. + Stub for OutputDebugString native method @@ -6051,370 +5613,223 @@ 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. + Syslog port 514 - - The default constructor initializes all fields to their default values. - - + - Initialize the appender based on the options set. + syslog severities - 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 syslog severities. - 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. + system is unusable - 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. + action must be taken immediately - - - Disables the underlying and releases all managed - and unmanaged resources associated with the . - - - + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + - Initializes the underlying connection. + syslog facilities - The underlying is initialized and binds to the - port number from which you intend to communicate. - - - Exceptions are passed to the . + The syslog facilities - + - The IP address of the remote host or multicast group to which - the logging event will be sent. + kernel messages - + - The TCP port number of the remote host or multicast group to - which the logging event will be sent. + random user-level messages - + - The cached remote endpoint to which the logging events will be sent. + mail system - + - The TCP port number from which the will communicate. + system daemons - + - The instance that will be used for sending the - logging events. + security/authorization messages - + - The encoding to use for the packet. + messages generated internally by syslogd - + - Gets or sets the IP address of the remote host or multicast group to which - the underlying should sent the logging event. + line printer subsystem - - 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. + network news subsystem - - 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. + UUCP subsystem - - 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. + clock (cron/at) daemon - - The used to write the packets. - - - - The used to write the packets. - - - + - Gets or sets the underlying . + security/authorization messages (private) - - 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. + ftp daemon - - 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. + NTP subsystem - true - - - This appender requires a to be set. - - - + - Syslog port 514 + log audit - + - Initial buffer size + log alert - + - Maximum buffer size before it is recycled + 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 - Initializes a new instance of the class. + Initializes a new instance of the class. - This instance of the class is set up to write + This instance of the class is set up to write to a remote syslog daemon. + + + 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 . + + Add a mapping of level to severity @@ -6440,6 +5855,14 @@ + + + Appends the rendered message to the buffer + + rendered message + index of the current character in the message + buffer + Initialize the options for this appender @@ -6490,235 +5913,42 @@ Mapping from level object to syslog severity - + - Message identity + Initial buffer size - - - 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 + Maximum buffer size before it is recycled - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - + - syslog severities + 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 syslog severities. + 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. - - - system is unusable - - - + - action must be taken immediately + The mapped syslog severity for the specified level + + + Required property. + The mapped syslog severity for the specified level + + - + - 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. + Delivers logging events to a remote logging sink. @@ -6759,14 +5989,14 @@ for details on how to shutdown log4net programmatically. - + Nicko Cadell Gert Driesen Daniel Cazzulino - Initializes a new instance of the class. + Initializes a new instance of the class. @@ -6774,6 +6004,22 @@ + + + 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. + + + Initialize the appender based on the options set @@ -6885,22 +6131,6 @@ 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. @@ -7006,725 +6236,725 @@ Douglas de la Torre Edward Smit - + - Initializes a new instance of the class. + Style of rolling to use - Default constructor. + Style of rolling to use - + - Cleans up all resources used by this appender. + 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. + + - + - The fully qualified type of the RollingFileAppender class. + Roll files based only on the size of the file - - Used by the internal logger to record the Type of the - log message. - - + - Sets the quiet writer being used. + Roll files based only on the date - - This method can be overridden by sub classes. - - the writer to set - + - Write out a logging event. + Roll files based on both the size and date of the file - 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 code assumes that the following 'time' constants are in a increasing sequence. - 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. + The code assumes that the following 'time' constants are in a increasing sequence. - + - Performs any required rolling before outputting the next event + Roll the log not based on the date - - - 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. + Roll the log for each minute - 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 + Roll the log for each hour - 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) + Roll the log twice a day (midday and midnight) - + - Generates a wildcard pattern that can be used to find all files - that are similar to the base file name. + Roll the log each day (midnight) - - - + - Builds a list of filenames for all files matching the base filename plus a file - pattern. + Roll the log each week - - - + - Initiates a roll over if needed for crossing a date boundary since the last run. + Roll the log each month - + - Initializes based on existing conditions at time of . + Initializes a new instance of the class. - 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. - + Default constructor. - + - 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. + Cleans up all resources used by this appender. - - - + - 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. + 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. + - Certain date pattern extensions like yyyyMMdd will be parsed as valid backup indexes. + + 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 . + - - - - - - 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. + Gets or sets the date pattern to be used for generating file names + when rolling over on date. - the date pattern to calculate the check period for - The RollPoint that is most accurate for the date pattern supplied + + The date pattern to be used for generating file names when rolling + over on date. + - 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. + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + - + - Initialize the appender based on the options set + 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. + - 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 set to zero, then there will be no backup files and the log file + will be truncated when it reaches . - If any of the configuration properties are modified then - must be called again. + 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. - Sets initial conditions including date/time roll over information, first check, - scheduledFilename, and calls to initialize - the current number of backups. + The maximum applies to each time based group of files and + not the total. - - - - - - .1, .2, .3, etc. - - - + - Rollover the file(s) to date/time tagged file(s). + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. - set to true if the file to be rolled is currently open + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + - Rollover the file(s) to date/time tagged file(s). - Resets curSizeRollBackups. - If fileIsOpen is set then the new file is opened (through SafeOpenFile). + 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). - + - Renames file to file . + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. - Name of existing file to roll. - New name for file. + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + - Renames file to file . It - also checks for existence of target file and deletes if it does. + 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 . - + - Test if a file exists at a specified path + Gets or sets the rolling file count direction. - the path to the file - true if the file exists + + The rolling file count direction. + - Test if a file exists at a specified path + 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. - + - Deletes the specified file if it exists. + Gets or sets the rolling style. - The file to delete. + The rolling style. - 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. + The default rolling style is . - 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. + 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. - + - Implements file roll. + Gets or sets a value indicating whether to preserve the file name extension when rolling. - the base name to rename + + true if the file name extension should be preserved. + - 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. + 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. - + - Get the start time of the next window for the current rollpoint + Gets or sets a value indicating whether to always log to + the same file. - 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 + + true if always should be logged to the same file, otherwise false. + - Returns the date of the next roll point after the currentDateTime date passed to the method. + 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). - 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 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! - - - 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 fully qualified type of the RollingFileAppender class. + + Used by the internal logger to record the Type of the + log message. + - + - The actual formatted filename that is currently being written to - or will be the file transferred to on roll over - (based on staticLogFileName). + Sets the quiet writer being used. + + This method can be overridden by sub classes. + + the writer to set - + - The timestamp when we shall next recompute the filename. + 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. + + - + - Holds date of last roll over + 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. + + - + - The type of rolling done + 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. + + - + - The default maximum file size is 10MB + 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. + - + - There is zero backup files by default + 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. + - + - How many sized based backups have been made so far + Determines curSizeRollBackups (only within the current roll point) - + - The rolling file count direction. + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + - + - The rolling mode used in this appender. + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + - + - Cache flag set if we are rolling by date. + Initiates a roll over if needed for crossing a date boundary since the last run. - + - Cache flag set if we are rolling by size. + 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. + + + - + - Value indicating whether to always log to the same file. + 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. + + - + - Value indicating whether to preserve the file name extension when rolling. + 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. + + + - + - FileName provided in configuration. Used for rolling properly + 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. + + - + - A mutex that is used to lock rolling of files. + 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. + - + - The 1st of January 1970 in UTC + Initialize the appender based on the options set - - - - 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. + 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. - There are two built strategies for determining the current date and time, - - and . + If any of the configuration properties are modified then + must be called again. - The default strategy is . + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. - + - 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. - + + .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 - Takes a string in the same format as expected by - . - - - This property determines the rollover schedule when rolling over - on date. + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). - + - Gets or sets the maximum number of backup files that are kept before - the oldest is erased. + Renames file to file . - - The maximum number of backup files that are kept before the oldest is - erased. - + Name of existing file to roll. + New name for file. - 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. + Renames file to file . It + also checks for existence of target file and deletes if it does. - + - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. + Test if a file exists at a specified path - - The maximum size in bytes that the output file is allowed to reach before being - rolled over to backup files. - + the path to the file + true if the file exists - 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). + Test if a file exists at a specified path - + - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. + Deletes the specified file if it exists. - - The maximum size that the output file is allowed to reach before being - rolled over to backup files. - + The file to delete. - 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 . + 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. - + - Gets or sets the rolling file count direction. + Implements file roll base on file size. - - 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... + 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. - >= 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. + A new file is created to receive further log output. - The default file count direction is -1. - - - - - Gets or sets the rolling style. - - The rolling style. - - The default rolling style is . + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. - 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. + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. - + - Gets or sets a value indicating whether to preserve the file name extension when rolling. + Implements file roll. - - true if the file name extension should be preserved. - + the base name to rename - 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. + 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}. - - - - - 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). + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. - 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! + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. - - - - - Style of rolling to use - - - Style of rolling to use + This is called by to rename the files. - + - Roll files once per program execution + 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 - Roll files once per program execution. - Well really once each time this appender is - configured. + Returns the date of the next roll point after the currentDateTime date passed to the method. - Setting this option also sets AppendToFile to - false on the RollingFileAppender, otherwise - this appender would just be a normal file appender. + 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. - + - Roll files based only on the size of the file + 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. - + - Roll files based only on the date + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. - + - Roll files based on both the size and date of the file + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). - + - The code assumes that the following 'time' constants are in a increasing sequence. + The timestamp when we shall next recompute the filename. - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - + - Roll the log not based on the date + Holds date of last roll over - + - Roll the log for each minute + The type of rolling done - + - Roll the log for each hour + The default maximum file size is 10MB - + - Roll the log twice a day (midday and midnight) + There is zero backup files by default - + - Roll the log each day (midnight) + How many sized based backups have been made so far - + - Roll the log each week + The rolling file count direction. - + - Roll the log each month + 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 @@ -7824,23 +7054,6 @@ - - - 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). @@ -8059,6 +7272,12 @@ The default encoding is the operating system's current ANSI codepage. + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + This appender requires a to be set. @@ -8070,6 +7289,12 @@ + + + Send the email message + + the body text to include in the mail + Values for the property. @@ -8101,6 +7326,11 @@ Uses the Windows credentials from the current thread or process to authenticate. + + + trims leading and trailing commas or semicolons + + Send an email when a specific logging event occurs, typically on errors @@ -8136,55 +7366,6 @@ - - - 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. @@ -8264,6 +7445,35 @@ + + + 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. + + + This appender requires a to be set. @@ -8275,11 +7485,31 @@ + + + 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 + + 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. @@ -8313,6 +7543,22 @@ log message. + + + 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 . + Overrides the parent method to close the socket handler @@ -8323,6 +7569,17 @@ + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + Initialize the appender based on the options set. @@ -8355,68 +7612,83 @@ - + - Gets or sets the TCP port number on which this will listen for connections. + Helper class to manage connected clients - - 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 SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. - The value specified is less than - or greater than . - + - This appender requires a to be set. + Class that represents a client connected to this handler - true - This appender requires a to be set. + Class that represents a client connected to this handler - + - Helper class to manage connected clients + Create this for the specified + the client's socket - The SocketHandler class is used to accept connections from - clients. It is threaded so that clients can connect/disconnect - asynchronously. + Opens a stream writer on the socket. - + - Opens a new server port on + Write a string to the client - the local port to listen on for connections + string to send - Creates a socket handler on the specified local server port. + Write a string to the client - + - Sends a string message to each of the connected clients + Cleanup the clients connection - the text to send - Sends a string message to each of the connected clients + Close the socket connection. - + + + 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 @@ -8428,6 +7700,21 @@ client to remove + + + 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. + + + Callback used to accept a connection on the server socket @@ -8450,1347 +7737,1158 @@ - + - Test if this handler has active connections + Sends logging events to a . - - 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. + 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 - + - Class that represents a client connected to this handler + Initializes a new instance of the class. - Class that represents a client connected to this handler + Default constructor. - + - Create this for the specified + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . - the client's socket + The layout to use with this appender. + The to output to. - Opens a stream writer on the socket. + Obsolete constructor. - + - Write a string to the client + Initializes a new instance of the class and sets + the output destination to the specified . - string to send + The layout to use with this appender + The to output to + + The must have been previously opened. + - Write a string to the client + Obsolete constructor. - + - Cleanup the clients connection + Gets or set whether the appender will flush at the end + of each append operation. - + - Close the socket connection. + 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. - + - Appends log events to the system. + Sets the where the log output will go. - 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. + The specified must be open and writable. - 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. + The will be closed when the appender + instance is closed. - 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 . + Note: Logging to an unopened will fail.
    - Douglas de la Torre - Nicko Cadell - Gert Driesen - Ron Grabowski
    - + - Initializes a new instance of the . + This method determines if there is a sense in attempting to append. - Default constructor. + This method checks if an output target has been set and if a + layout has been set. + false if any of the preconditions fail. - + - Initializes a new instance of the - with a specified layout. + This method is called by the + method. - The layout to use with this appender. + The event to log. - Obsolete constructor. + 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. - + - Writes the logging event to the system. + This method is called by the + method. - The event to log. + The array of events to log. - Writes the logging event to the system. + This method writes all the bulk logged events to the output writer + before flushing the stream. - + - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. + Close this appender instance. The underlying stream or writer is also closed. - - 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. + Closed appenders cannot be reused. - + - Defaults to %logger + Gets or set the and the underlying + , if any, for this appender. + + The for this appender. + - + - Flushes any buffered log data. + This appender requires a to be set. - The maximum time to wait for logging events to be flushed. - True if all logging events were flushed successfully, else false. + true + + + This appender requires a to be set. + + - + - Gets or sets a value that indicates whether the appender will - flush at the end of each write. + Writes the footer and closes the underlying . - 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. + Writes the footer and closes the underlying . - + - The category parameter sent to the Trace method. + Closes the underlying . - Defaults to %logger which will use the logger name of the current - as the category parameter. + Closes the underlying . - - - + - This appender requires a to be set. + Clears internal references to the underlying + and other variables. - true - This appender requires a to be set. + Subclasses can override this method for an alternate closing behavior. - + - Assembly level attribute that specifies a domain to alias to this assembly's repository. + Writes a footer as produced by the embedded layout's property. - 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. + Writes a footer as produced by the embedded layout's property. + + + + + Writes a header produced by the embedded layout's property. + + - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required domains. + Writes a header produced by the embedded layout's property. - Nicko Cadell - Gert Driesen - + - Assembly level attribute that specifies a repository to alias to this assembly's repository. + Called to allow a subclass to lazily initialize the writer - 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. + 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. - + - Gets or sets the repository to alias to this assemby's repository. + Gets or sets the where logging events + will be written to. - The repository to alias to this assemby's repository. + The where logging events are written. - The name of the repository to alias to this assemby's repository. + This is the where logging events + will be written to. - + - Initializes a new instance of the class with - the specified domain to alias to this assembly's repository. + This is the where logging events + will be written to. - The domain to alias to this assemby's repository. - - - Obsolete. Use instead of . - - - + - Use this class to quickly configure a . + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. - 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. + 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. - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. + The default value is true. - Nicko Cadell - Gert Driesen - + - The fully qualified type of the BasicConfigurator class. + The fully qualified type of the TextWriterAppender class. Used by the internal logger to record the Type of the log message. - + - Initializes a new instance of the class. + Flushes any buffered log data. - - - Uses a private access modifier to prevent instantiation of this class. - - + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. - + - Initializes the log4net system with a default configuration. + Appends log events to the system. - 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. + 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. - - - - - 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. + 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. - - - - - 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. + 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 the with a default configuration. + Initializes a new instance of the . - 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. + Default constructor. - + - Initializes the using the specified appender. + Initializes a new instance of the + with a specified layout. - The repository to configure. - The appender to use to log all logging events. + The layout to use with this appender. - Initializes the using the specified appender. + Obsolete constructor. - + - Initializes the using the specified appenders. + Gets or sets a value that indicates whether the appender will + flush at the end of each write. - The repository to configure. - The appenders to use to log all logging events. + 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. + - Initializes the using the specified appender. + 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. - - - 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 category parameter sent to the Trace method. - 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. + Defaults to %logger which will use the logger name of the current + as the category parameter. + + - + - Configures the for the specified assembly. + Writes the logging event to the system. - The assembly that this attribute was defined on. - The repository to configure. + The event to log. - Abstract method implemented by a subclass. When this method is called - the subclass should configure the . + Writes the logging event to the system. - + - Compare this instance to another ConfiguratorAttribute + This appender requires a to be set. - the object to compare to - see + true - Compares the priorities of the two instances. - Sorts by priority in descending order. Objects with the same priority are - randomly ordered. + This appender requires a to be set. - + - Assembly level attribute that specifies the logging domain for the assembly. + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. - 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. + 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. - This attribute can only be specified on the assembly and may only be used - once per assembly. - + The default value is true. - Nicko Cadell - Gert Driesen - + - Assembly level attribute that specifies the logging repository for the assembly. + Defaults to %logger - - - 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. + Flushes any buffered log data. - - - Default constructor. - + The maximum time to wait for logging events to be flushed. + True if all logging events were flushed successfully, else false. + + + + 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 a new instance of the class - with the name of the repository. + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. - The name of the repository. + + The IP address of the remote host or multicast group to which the logging event + will be sent. + - Initialize the attribute with the name for the assembly's repository. + 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 name of the logging repository. + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. - The string name to use as the name of the repository associated with this - assembly. + 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. - - This value does not have to be unique. Several assemblies can share the - same repository. They will share the logging configuration of the repository. - + 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 type of repository to create for this assembly. + Gets or sets the TCP port number from which the underlying will communicate. - The type of repository to create for this assembly. + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. - The type of the repository to create for the assembly. - The type must implement the - interface. + The underlying will bind to this port for sending messages. - 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. + 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 . - + - Initializes a new instance of the class. + Gets or sets used to write the packets. + + The used to write the packets. + - Obsolete. Use RepositoryAttribute instead of DomainAttribute. + The used to write the packets. - + - Initialize a new instance of the class - with the name of the domain. + Gets or sets the underlying . - The name of the domain. + + The underlying . + - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - + 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. - + - Use this class to initialize the log4net environment using an Xml tree. + 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. + + + + + Initialize the appender based on the options set. - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + 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. - Configures a using an Xml tree. + 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. - Nicko Cadell - Gert Driesen + The required property was not specified. + The TCP port number assigned to or is less than or greater than . - + - Private constructor + This method is called by the method. + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + - + - Automatically configures the log4net system based on the - application's configuration settings. + This appender requires a to be set. + true - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + This appender requires a to be set. - 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. + Closes the UDP connection and releases all resources associated with + this instance. - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + Disables the underlying and releases all managed + and unmanaged resources associated with the . - 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 + Initializes the underlying connection. - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . - Loads the log4net configuration from the XML element - supplied as . - The element to parse. - + - Configures the using the specified XML - element. + The IP address of the remote host or multicast group to which + the logging event will be sent. - - - 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 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. + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. - The XML file to load the configuration from. - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. - 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). + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. - - 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 : + 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 - + - Configures log4net using the specified configuration file. + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. - A stream to load the XML configuration from. + The domain to alias to this assemby's repository. - 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. + Obsolete. Use instead of . - + - Configures the using the specified configuration - file. + Assembly level attribute that specifies a repository to alias to this assembly's repository. - 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. + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. - 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). + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. - - 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 : + 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 - + - Configures the using the specified configuration - file. + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. - The repository to configure. - The stream to load the XML configuration from. + The repository to alias to this assemby's repository. - 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. + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. - + - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. + Gets or sets the repository to alias to this assemby's repository. - The XML file to load the configuration from. + + The repository to alias to this assemby's repository. + - 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 . + The name of the repository to alias to this assemby's repository. - - + - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. + Use this class to quickly configure a . - 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. + Allows very simple programmatic configuration of log4net. - The configuration file will be monitored using a - and depends on the behavior of that class. + 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. - For more information on how to configure log4net using - a separate configuration file, see . + 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 - + - Assembly level attribute to configure the . + 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. - 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. + Uses a private access modifier to prevent instantiation of this class. - Nicko Cadell - Gert Driesen - + - Assembly level attribute to configure the . + Initializes the log4net system with a default configuration. - 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. + 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. - - Nicko Cadell - Gert Driesen - + - Default constructor + Initializes the log4net system using the specified appenders. + The appenders to use to log all logging events. - Default constructor + Initializes the log4net system using the specified appenders. - + - Configures the for the specified assembly. + Initializes the log4net system using the specified appender. - The assembly that this attribute was defined on. - The repository to configure. + The appender to use to log all logging events. - Configure the repository using the . - The specified must extend the - class otherwise the will not be able to - configure it. + Initializes the log4net system using the specified appender. - 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. + Initializes the with a default configuration. - - The filename of the configuration file. - + The repository to configure. - 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 . + 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. - + - Gets or sets the extension of the configuration file. + Initializes the using the specified appender. - - The extension of the configuration file. - + The repository to configure. + The appender to use to log all logging events. - 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 . + Initializes the using the specified appender. - + - Gets or sets a value indicating whether to watch the configuration file. + Initializes the using the specified appenders. - - true if the configuration should be watched, false otherwise. - + The repository to configure. + The appenders to use to log all logging events. - 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. + Initializes the using the specified appender. - - Watching configuration is not supported on the SSCLI. - - + - Class to register for the log4net section of the configuration file + Base class for all log4net configuration attributes. - 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. + 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. - - Example of registering the log4net section handler : - - - -
    - - - log4net configuration XML goes here - - - - Nicko Cadell Gert Driesen - + - Initializes a new instance of the class. + Constructor used by subclasses. + the ordering priority for this configurator - Default constructor. + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. - + - Parses the configuration section. + Configures the for the specified assembly. - 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. + The assembly that this attribute was defined on. + The repository to configure. - Returns the containing the configuration data, + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . - + - Assembly level attribute that specifies a plugin to attach to - the repository. + Compare this instance to another ConfiguratorAttribute + the object to compare to + see - Specifies the type of a plugin to create and attach to the - assembly's repository. The plugin type must implement the - interface. + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. - Nicko Cadell - Gert Driesen - + - Interface used to create plugins. + Assembly level attribute that specifies the logging domain for the assembly. - Interface used to create a plugin. + 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 - + - Creates the plugin object. + Initializes a new instance of the class. - the new plugin instance - Create and return a new plugin instance. + Obsolete. Use RepositoryAttribute instead of DomainAttribute. - + - Initializes a new instance of the class - with the specified type. + Initialize a new instance of the class + with the name of the domain. - The type name of plugin to create. + The name of the domain. - Create the attribute with the plugin type specified. - - - Where possible use the constructor that takes a . + Obsolete. Use RepositoryAttribute instead of DomainAttribute. - + - Initializes a new instance of the class - with the specified type. + Use this class to initialize the log4net environment using an Xml tree. - The type of plugin to create. - Create the attribute with the plugin type specified. + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + Nicko Cadell + Gert Driesen - - - 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. + Private constructor - - 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. + Automatically configures the log4net system based on the + application's configuration settings. - Configures a using an Xml tree. + 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. - Nicko Cadell - Gert Driesen - - - - Private constructor - - + 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. - - - 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. + Configures log4net using a log4net element - 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. + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + Loads the log4net configuration from the XML element + supplied as . - + The element to parse. - + - Configures log4net using a log4net element + 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. @@ -9800,17 +8898,6 @@ 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 : @@ -9822,42 +8909,29 @@ ... - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + 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 URI. + Configures log4net using the specified configuration file. - A URI to load the XML configuration from. + 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. - - - The must support the URI scheme specified. + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - - - 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 @@ -9868,19 +8942,7 @@ - - - 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. @@ -9889,6 +8951,9 @@ 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. @@ -9898,17 +8963,6 @@ 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 : @@ -9920,57 +8974,42 @@ ... - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + 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 - URI. + file. The repository to configure. - A URI to load the XML configuration from. + 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. - The must support the URI scheme specified. + Note that this method will NOT close the stream parameter. - - - 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. @@ -9978,6 +9017,9 @@ 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. @@ -9993,7 +9035,7 @@ - + Configures the using the file specified, monitors the file for changes and reloads the configuration if a change @@ -10003,6 +9045,9 @@ 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. @@ -10018,5368 +9063,4929 @@ - + - Configures the specified repository using a log4net element. + Assembly level attribute to configure the . - The hierarchy to configure. - The element to parse. - Loads the log4net configuration from the XML element - supplied as . + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - This method is ultimately called by one of the Configure methods - to load the configuration from an . + 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 - - - 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. + Class to register for the log4net section of the configuration file - Used by the internal logger to record the Type of the - log message. + 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 - + - Class used to watch config files. + Initializes a new instance of the class. - 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. + Default constructor. - - - 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. + 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, + + - + - The timer used to compress the notification events. + 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 - + - 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 + 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 to - watch a specified config file used to configure a repository. + Initializes a new instance of the class + with the specified type. - The repository to configure. - The configuration file to watch. + The type of plugin to create. - Initializes a new instance of the class. + Create the attribute with the plugin type specified. - + - Event handler used by . + Gets or sets the type for the plugin. - The firing the event. - The argument indicates the file that caused the event to be fired. + + The type for the plugin. + - This handler reloads the configuration from the file when the event is fired. + The type for the plugin. - + - Event handler used by . + Gets or sets the type name for the plugin. - The firing the event. - The argument indicates the file that caused the event to be fired. + + The type name for the plugin. + - This handler reloads the configuration from the file when the event is fired. + The type name for the plugin. + + + Where possible use the property instead. - + - Called by the timer when the configuration has been updated. + Creates the plugin object defined by this attribute. - null + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. - + - Release the handles held by the watcher and timer. + 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 - + - The implementation of the interface suitable - for use with the compact framework + Assembly level attribute that specifies the logging repository for the assembly. - This implementation is a simple - mapping between repository name and - object. + 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. - 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. + This attribute can only be specified on the assembly and may only be used + once per assembly. Nicko Cadell + Gert Driesen - + - Interface used by the to select the . + Initializes a new instance of the class. - The uses a - to specify the policy for selecting the correct - to return to the caller. + Default constructor. - Nicko Cadell - Gert Driesen - + - Gets the for the specified assembly. + Initialize a new instance of the class + with the name of the repository. - The assembly to use to lookup to the - The for the assembly. + The name of the repository. - 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. + Initialize the attribute with the name for the assembly's repository. - + - Gets the named . + Gets or sets the name of the logging repository. - The name to use to lookup to the . - The named + + The string name to use as the name of the repository associated with this + assembly. + - Lookup a named . This is the repository created by - calling . + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + - + - Creates a new repository for the assembly specified. + Gets or sets the type of repository to create for this assembly. - The assembly to use to create the domain to associate with the . - The type of repository to create, must implement . - The repository created. + + The type of repository to create for this assembly. + - 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. + The type of the repository to create for the assembly. + The type must implement the + interface. - How the association between and - is made is not defined. The implementation may choose any method for - this association. + 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. - + - Creates a new repository with the name specified. + Assembly level attribute to configure the . - 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. + 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 - + - Test if a named repository exists + Construct provider attribute with type specified - the named repository to check - true if the repository exists + the type of the provider to use - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. + The provider specified must subclass the + class. - + - Gets an array of all currently defined repositories. + Gets or sets the type of the provider to use. - - An array of the instances created by - this . + + the type of the provider to use. + - Gets an array of all of the repositories created by this selector. + The provider specified must subclass the + class. - + - Event to notify that a logger repository has been created. + Configures the SecurityContextProvider - - Event to notify that a logger repository has been created. - + The assembly that this attribute was defined on. + The repository to configure. - 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 . + Creates a provider instance from the specified. + Sets this as the default security context provider . - + - Create a new repository selector + The fully qualified type of the SecurityContextProviderAttribute class. - 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 . - + Used by the internal logger to record the Type of the + log message. - throw if is null - throw if does not implement - + - Get the for the specified assembly + Use this class to initialize the log4net environment using an Xml tree. - 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. + Configures a using an Xml tree. + Nicko Cadell + Gert Driesen - + - Get the named + Private constructor + + + + + Automatically configures the using settings + stored in the application's configuration file. - 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. + 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. - throw if is null - throw if the does not exist + The repository to configure. - + - Create a new repository for the assembly specified + Automatically configures the log4net system based on the + application's configuration settings. - 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. + 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. - If the is null then the - default repository type specified to the constructor is used. + 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 + + - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. + Loads the log4net configuration from the XML element + supplied as . + The element to parse. - + - Create a new repository for the repository specified + Configures log4net using the specified configuration file. - 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 XML file to load the configuration from. - 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. + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. - If the named repository already exists an exception will be thrown. + 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). - If is null then the default - repository type specified to the constructor is used. + 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 : + + + + + + + - throw if is null - throw if the already exists - + - Test if a named repository exists + Configures log4net using the specified configuration URI. - the named repository to check - true if the repository exists + A URI to load the XML configuration from. - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. + 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. - + - Gets a list of objects + Configures log4net using the specified configuration data stream. - an array of all known objects + A stream to load the XML configuration from. - Gets an array of all of the repositories created by this selector. + 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. - + - The fully qualified type of the CompactRepositorySelector class. + Configures the using the specified XML + element. - Used by the internal logger to record the Type of the - log message. + Loads the log4net configuration from the XML element + supplied as . + The repository to configure. + The element to parse. - + - Notify the registered listeners that the repository has been created + Configures the using the specified configuration + file. - The repository that has been created + The repository to configure. + The XML file to load the configuration from. - Raises the LoggerRepositoryCreatedEvent - event. + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. - - - - - 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 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 default implementation of the interface. - - - Uses attributes defined on the calling assembly to determine how to - configure the hierarchy for the repository. + 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: + + +
    + + - - Nicko Cadell - Gert Driesen - - - - Creates a new repository selector. - - The type of the repositories to create, must implement - + + 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"])); + - Create an new repository selector. - The default type for repositories must be specified, - an appropriate value would be . + In the .config file, the path to the log4net can be specified like this : + + + + + + + - is . - does not implement . - + - Gets the for the specified assembly. + Configures the using the specified configuration + URI. - The assembly use to lookup the . + The repository to configure. + A URI to load the XML configuration from. - 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 configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. - The created will be automatically configured using - any attributes defined on - the . + The must support the URI scheme specified. - The for the assembly - is . - + - Gets the for the specified repository. + Configures the using the specified configuration + file. - The repository to use to lookup the . - The for the specified repository. + The repository to configure. + The stream to load the XML configuration from. - Returns the named repository. If is null - a is thrown. If the repository - does not exist a is thrown. + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. - Use to create a repository. + Note that this method will NOT close the stream parameter. - is . - does not exist. - + - Create a new repository for the assembly specified + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The repository created. + The XML file to load the configuration from. - 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 configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. - The created will be automatically - configured using any - attributes defined on the . + The configuration file will be monitored using a + and depends on the behavior of that class. - 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 - . + For more information on how to configure log4net using + a separate configuration file, see . - is . + - + - Creates a new repository for the assembly specified. + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. - 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 repository to configure. + The XML file to load the configuration from. - 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 configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. - The created will be automatically - configured using any - attributes defined on the . + The configuration file will be monitored using a + and depends on the behavior of that class. - 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 - . + For more information on how to configure log4net using + a separate configuration file, see . - is . + - + - Creates a new repository for the specified repository. + Class used to watch config files. - 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. + 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. - is . - already exists. - + - Test if a named repository exists + Holds the FileInfo used to configure the XmlConfigurator - 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 + Holds the repository being configured. - 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 timer used to compress the notification events. - 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 default amount of time to wait after receiving notification + before reloading the config file. - The repository that has been created. - - - Raises the event. - - - + - Gets the repository name and repository type for the specified assembly. + Watches file for changes. This object should be disposed when no longer + needed to free system handles on the watched resources. - 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. + Initializes a new instance of the class to + watch a specified config file used to configure a repository. - 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. - + The configuration file to watch. - Used by the internal logger to record the Type of the - log message. + + Initializes a new instance of the class. + - + - Event to notify that a logger repository has been created. + Event handler used by . - - Event to notify that a logger repository has been created. - + The firing the event. + The argument indicates the file that caused the event to be fired. - 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 . + This handler reloads the configuration from the file when the event is fired. - + - Defined error codes that can be passed to the method. + Event handler used by . + The firing the event. + The argument indicates the file that caused the event to be fired. - Values passed to the method. + This handler reloads the configuration from the file when the event is fired. - Nicko Cadell - - - - A general error - - + - Error while writing output + Called by the timer when the configuration has been updated. + null - + - Failed to flush file + Release the handles held by the watcher and timer. - + - Failed to close file + 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 . + + - + - Unable to open output file + Maps repository names to ConfigAndWatchHandler instances to allow a particular + ConfigAndWatchHandler to dispose of its FileSystemWatcher when a repository is + reconfigured. - + - No layout specified + The fully qualified type of the XmlConfigurator class. + + Used by the internal logger to record the Type of the + log message. + - + - Failed to parse address + 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 - + - An evaluator that triggers on an Exception type + Default constructor - This evaluator will trigger if the type of the Exception - passed to - is equal to a Type in . /// + Default constructor - Drew Schaeffer - + - Test if an triggers an action + Gets or sets the filename of the configuration file. + + The filename of the configuration file. + - Implementations of this interface allow certain appenders to decide - when to perform an appender specific action. + 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 action or behavior triggered is defined by the implementation. + The takes priority over the . - Nicko Cadell - + - Test if this event triggers the action + Gets or sets the extension of the configuration file. - The event to check - true if this event triggers the action, otherwise false + + The extension of the configuration file. + - Return true if this event triggers the action + 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 . - + - The type that causes the trigger to fire. + 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. + + - + - Causes subclasses of to cause the trigger to fire. - - - - - Default ctor to allow dynamic creation through a configurator. + 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 . - + - Constructs an evaluator and initializes to trigger on + Attempt to load configuration from the local file system - the type that triggers this evaluator. - If true, this evaluator will trigger on subclasses of . + The assembly that this attribute was defined on. + The repository to configure. - + - Is this the triggering event? + Configure the specified repository using a - 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 repository to configure. + the FileInfo pointing to the config file - + - The type that triggers this evaluator. + Attempt to load configuration from a URI + The assembly that this attribute was defined on. + The repository to configure. - + - If true, this evaluator will trigger on subclasses of . + The fully qualified type of the XmlConfiguratorAttribute class. + + Used by the internal logger to record the Type of the + log message. + - + - Appenders may delegate their error handling to an . + The implementation of the interface suitable + for use with the compact framework - Error handling is a particularly tedious to get right because by - definition errors are hard to predict and to reproduce. + 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 - Gert Driesen - + - Handles the error and information about the error condition is passed as - a parameter. + Create a new repository selector - The message associated with the error. - The that was thrown when the error occurred. - The error code associated with the error. + the type of the repositories to create, must implement - Handles the error and information about the error condition is passed as - a parameter. + 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 - + - Prints the error message passed as a parameter. + Get the for the specified assembly - The message associated with the error. - The that was thrown when the error occurred. + not used + The default - See . + 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. - + - Prints the error message passed as a parameter. + Get the named - The message associated with the error. + the name of the repository to lookup + The named - See . + 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 - + - Interface for objects that require fixing. + Create a new repository for the assembly specified + not used + the type of repository to create, must implement + the repository created - Interface that indicates that the object requires fixing before it - can be taken outside the context of the appender's - method. + The argument is not used. This selector does not create a + separate repository for each assembly. - When objects that implement this interface are stored - in the context properties maps - and - are fixed - (see ) the - method will be called. + If the is null then the + default repository type specified to the constructor is used. - - 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. + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. - + - Interface that all loggers implement + 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 - This interface supports logging events and testing if a level - is enabled for logging. + 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. - 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. + 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. - Nicko Cadell - Gert Driesen + throw if is null + throw if the already exists - + - This generic form is intended to be used by wrappers. + Test if a named repository exists - 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. + the named repository to check + true if the repository exists - Generates a logging event for the specified using - the and . + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. - + - This is the most generic printing method that is intended to be used - by wrappers. + Gets a list of objects - The event being logged. + an array of all known objects - Logs the specified logging event through this logger. + Gets an array of all of the repositories created by this selector. - + - Checks if this logger is enabled for a given passed as parameter. + The fully qualified type of the CompactRepositorySelector class. - 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 . - + Used by the internal logger to record the Type of the + log message. - + - Gets the name of the logger. + Event to notify that a logger repository has been created. - The name of the logger. + Event to notify that a logger repository has been created. - The name of this logger + 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 . - + - Gets the where this - Logger instance is attached to. + Notify the registered listeners that the repository has been created - - The that this logger belongs to. - + The repository that has been created - Gets the where this - Logger instance is attached to. + Raises the LoggerRepositoryCreatedEvent + event. - + - Base interface for all wrappers + The default implementation of the interface. - Base interface for all wrappers. - - - All wrappers must implement this interface. + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. Nicko Cadell + Gert Driesen - + - Get the implementation behind this wrapper object. + Event to notify that a logger repository has been created. - The object that in implementing this object. + Event to notify that a logger repository has been created. - 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. + 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 . - + - Provides data for the event. + Creates a new repository selector. + The type of the repositories to create, must implement - A - event is raised every time a is created. + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + is . + does not implement . - - - The created - - - + - Construct instance using specified + Gets the for the specified assembly. - the that has been created + The assembly use to lookup the . - Construct instance using specified + 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 . - + - The that has been created + Gets the for the specified repository. - - The that has been created - + The repository to use to lookup the . + The for the specified repository. - The that has been created + 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. - + - Defines the default set of levels recognized by the system. + 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. - 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 . + 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. - 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. + 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. - 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. + The created will be automatically + configured using any + attributes defined on the . - Some of the predefined levels recognized by the system are: + 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 + . - - - . - - - . - - - . - - - . - - - . - - - . - - - . - - - Nicko Cadell - Gert Driesen + is . - + - Constructor + Creates a new repository for the assembly specified. - 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 + 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. - Initializes a new instance of the class with - the specified level name and value. + 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. - - - - - 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. + 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. - - - - - Returns the representation of the current - . - - - A representation of the current . - - - Returns the level . + The created will be automatically + configured using any + attributes defined on the . - - - - - 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. + 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 . - + - Returns a hash code + Creates a new repository for the specified repository. - A hash code for the current . + 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. - Returns a hash code suitable for use in hashing algorithms and data - structures like a hash table. - - - Returns the hash code of the level . + 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. - + - Compares this instance to a specified object and returns an - indication of their relative values. + Test if a named repository exists - 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 . - - - - + the named repository to check + true if the repository exists - must be an instance of - or ; otherwise, an exception is thrown. + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. - is not a . - + - Returns a value indicating whether a specified - is greater than another specified . + Gets a list of objects - A - A - - true if is greater than - ; otherwise, false. - + an array of all known objects - Compares two levels. + Gets an array of all of the repositories created by this selector. - + - Returns a value indicating whether a specified - is less than another specified . + Aliases a repository to an existing repository. - A - A - - true if is less than - ; otherwise, false. - + The repository to alias. + The repository that the repository is aliased to. - Compares two levels. + The repository specified will be aliased to the repository when created. + The repository must not already exist. - - - - - 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. + 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 . + - + - Returns a value indicating whether a specified - is less than or equal to another specified . + Notifies the registered listeners that the repository has been created. - A - A - - true if is less than or equal to - ; otherwise, false. - + The repository that has been created. - Compares two levels. + Raises the event. - + - Returns a value indicating whether two specified - objects have the same value. + Gets the repository name and repository type for the specified assembly. - 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. - - + 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 . - + - Compares two specified instances. + Configures the repository using information from the assembly. - 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 assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + - + - The level designates a higher level than all the rest. + Loads the attribute defined plugins on the assembly. + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + - + - The level designates very severe error events. - System unusable, emergencies. + Loads the attribute defined aliases on the assembly. + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + - + - The level designates very severe error events. - System unusable, emergencies. + The fully qualified type of the DefaultRepositorySelector class. + + Used by the internal logger to record the Type of the + log message. + - + - The level designates very severe error events - that will presumably lead the application to abort. + Defined error codes that can be passed to the method. + + + Values passed to the method. + + + Nicko Cadell - + - The level designates very severe error events. - Take immediate action, alerts. + A general error - + - The level designates very severe error events. - Critical condition, critical. + Error while writing output - + - The level designates very severe error events. + Failed to flush file - + - The level designates error events that might - still allow the application to continue running. + Failed to close file - + - The level designates potentially harmful - situations. + Unable to open output file - + - The level designates informational messages - that highlight the progress of the application at the highest level. + No layout specified - + - The level designates informational messages that - highlight the progress of the application at coarse-grained level. + Failed to parse address - + - The level designates fine-grained informational - events that are most useful to debug an application. + 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 - + - The level designates fine-grained informational - events that are most useful to debug an application. + The type that causes the trigger to fire. - + - The level designates fine-grained informational - events that are most useful to debug an application. + Causes subclasses of to cause the trigger to fire. - + - The level designates fine-grained informational - events that are most useful to debug an application. + Default ctor to allow dynamic creation through a configurator. - + - The level designates fine-grained informational - events that are most useful to debug an application. + Constructs an evaluator and initializes to trigger on + the type that triggers this evaluator. + If true, this evaluator will trigger on subclasses of . - + - The level designates fine-grained informational - events that are most useful to debug an application. + The type that triggers this evaluator. - + - The level designates the lowest level possible. + If true, this evaluator will trigger on subclasses of . - + - Gets the name of this level. + Is this the triggering event? - - The name of this level. - + The event to check + This method returns true, if the logging event Exception + Type is . + Otherwise it returns false - Gets the name of this level. + This evaluator will trigger if the Exception Type of the event + passed to + is . - + - Gets the value of this level. + Flags passed to the property - - The value of this level. - - Gets the value of this level. + Flags passed to the property + Nicko Cadell - + - Gets the display name of this level. + Fix the MDC - - The display name of this level. - - - - Gets the display name of this level. - - - + - A strongly-typed collection of objects. + Fix the NDC - Nicko Cadell - + - Creates a read-only wrapper for a LevelCollection instance. + Fix the rendered message - 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. + Fix the thread name - + - Initializes a new instance of the LevelCollection class - that has the specified initial capacity. + Fix the callers location information - - The number of elements that the new LevelCollection is initially capable of storing. - + + CAUTION: Very slow to generate + - + - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified LevelCollection. + Fix the callers windows user name - The LevelCollection whose elements are copied to the new collection. + + CAUTION: Slow to generate + - + - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified array. + Fix the domain friendly name - 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. + Fix the callers principal name - The collection whose elements are copied to the new list. + + CAUTION: May be slow to generate + - + - Allow subclasses to avoid our default constructors + Fix the exception text - - + - Copies the entire LevelCollection to a one-dimensional - array. + Fix the event properties. Active properties must implement in order to be eligible for fixing. - 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. + No fields fixed - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - + - Adds a to the end of the LevelCollection. + All fields fixed - 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. + Partial fields fixed + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + - + - Creates a shallow copy of the . + Interface for attaching appenders to objects. - A new with a shallow copy of the collection data. + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen - + - Determines whether a given is in the LevelCollection. + Attaches an appender. - The to check for. - true if is found in the LevelCollection; otherwise, false. + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + - + - Returns the zero-based index of the first occurrence of a - in the LevelCollection. + Gets all attached appenders. - The to locate in the LevelCollection. + + 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. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. - The zero-based index of the first occurrence of - in the entire LevelCollection, if found; otherwise, -1. + 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. + + - + - Inserts an element into the LevelCollection at the specified index. + Removes all attached appenders. - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - + + + Removes and closes all attached appenders + + - + - Removes the first occurrence of a specific from the LevelCollection. + Removes the specified appender from the list of attached appenders. - The to remove from the LevelCollection. - - The specified was not found in the LevelCollection. - + 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 element at the specified index of the LevelCollection. + Removes the appender with the specified name from the list of appenders. - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - + 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. + + - + - Returns an enumerator that can iterate through the LevelCollection. + Appenders may delegate their error handling to an . - An for the entire LevelCollection. + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen - + - Adds the elements of another LevelCollection to the current LevelCollection. + Handles the error and information about the error condition is passed as + a parameter. - The LevelCollection whose elements should be added to the end of the current LevelCollection. - The new of the LevelCollection. + 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. + + - + - Adds the elements of a array to the current LevelCollection. + Prints the error message passed as a parameter. - The array whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + - + - Adds the elements of a collection to the current LevelCollection. + Prints the error message passed as a parameter. - The collection whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. + The message associated with the error. + + + See . + + - + - Sets the capacity to the actual number of elements. + 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 - - - 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. + 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. + + - + - Gets a value indicating whether access to the collection is synchronized (thread-safe). + Interface that all loggers implement - false, because the backing type is an array, which is never thread-safe. + + + 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 - + - Gets an object that can be used to synchronize access to the collection. + Gets the name of the logger. + + The name of the logger. + + + + The name of this logger + + - + - 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 . + 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 . + + - + - Initializes a new instance of the Enumerator class. + 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. + + - + - Advances the enumerator to the next element in the collection. + Checks if this logger is enabled for a given passed as parameter. + The level to check. - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. + true if this logger is enabled for level, otherwise false. - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - + + + Test if this logger is going to log events of the specified . + + - + - Gets the current element in the collection. + Gets the where this + Logger instance is attached to. + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + - + - An evaluator that triggers at a threshold level + Base interface for all wrappers - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. + Base interface for all wrappers. + + + All wrappers must implement this interface. Nicko Cadell - - - The threshold for triggering - - - + - Create a new evaluator using the threshold. + Get the implementation behind this wrapper object. + + The object that in implementing this object. + - 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. + 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. - + - Create a new evaluator using the specified threshold. + Interface used to delay activate a configured object. - the threshold to trigger at - Create a new evaluator using the specified threshold. + 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. - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. + 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 - + - Is this the triggering event? + Activate the options that were previously set with calls to properties. - 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. + 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. - + - the threshold to trigger at + Delegate used to handle logger repository creation event notifications - - The that will cause this evaluator to trigger - + The which created the repository. + The event args + that holds the instance that has been created. - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. + Delegate used to handle logger repository creation event notifications. - + - Mapping between string name and Level object + Provides data for the event. - Mapping between string name and object. - This mapping is held separately for each . - The level name is case insensitive. + A + event is raised every time a is created. - Nicko Cadell - + - Mapping from level name to Level object. The - level name is case insensitive + The created - + - Construct the level map + Construct instance using specified + the that has been created - Construct the level map. + Construct instance using specified - + - Clear the internal maps of all levels + The that has been created + + The that has been created + - Clear the internal maps of all levels + The that has been created - + - Create a new Level and add it to the map + Interface used by the to select the . - 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 + The uses a + to specify the policy for selecting the correct + to return to the caller. - + Nicko Cadell + Gert Driesen - + - Create a new Level and add it to the map + Gets the for the specified assembly. - the string to display for the Level - the level value to give to the Level - the display name to give to the Level + The assembly to use to lookup to the + The for the assembly. - Create a new Level and add it to the map + 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. - + - Add a Level to the map + Gets the named . - the Level to add + The name to use to lookup to the . + The named - - Add a Level to the map - + Lookup a named . This is the repository created by + calling . - + - Lookup a named level from the map + Creates a new repository for the assembly specified. - 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 + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. - Lookup a named level from the map. The name of the level to lookup is taken - from the property of the - argument. + 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. - If no level with the specified name is found then the - argument is added to the level map - and returned. + How the association between and + is made is not defined. The implementation may choose any method for + this association. - + - Lookup a by name + Creates a new repository with the name specified. - The name of the Level to lookup - a Level from the map with the name specified + The name to associate with the . + The type of repository to create, must implement . + The repository created. - Returns the from the - map with the name specified. If the no level is - found then null is returned. + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. - + - Return all possible levels as a list of Level objects. + Test if a named repository exists - all possible levels as a list of Level objects + the named repository to check + true if the repository exists - Return all possible levels as a list of Level objects. + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. - + - The internal representation of caller location information. + Gets an array of all currently defined repositories. + + An array of the instances created by + this . - 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. + 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. + + - The System.Diagnostics.StackTrace class has this to say about Release builds: + 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 . + + + + + Test if an triggers an action + + - "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." + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. - 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. + The action or behavior triggered is defined by the implementation. Nicko Cadell - Gert Driesen - + - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. + 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 + + - + - Constructor + Defines the default set of levels recognized by the system. - 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. + 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 - The fully qualified class name. - The method name. - The file name. - The line number of the method within the file. + 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 data. + Initializes a new instance of the class with + the specified level name and value. - + - The fully qualified type of the LocationInfo class. + Constructor + Integer value for this level, higher values represent more severe levels. + The string name of this level. - Used by the internal logger to record the Type of the - log message. + + Initializes a new instance of the class with + the specified level name and value. + - + - Gets the fully qualified class name of the caller making the logging - request. + Gets the name of this level. - The fully qualified class name of the caller making the logging - request. + The name of this level. - Gets the fully qualified class name of the caller making the logging - request. + Gets the name of this level. - + - Gets the file name of the caller. + Gets the value of this level. - The file name of the caller. + The value of this level. - Gets the file name of the caller. + Gets the value of this level. - + - Gets the line number of the caller. + Gets the display name of this level. - The line number of the caller. + The display name of this level. - Gets the line number of the caller. + Gets the display name of this level. - + - Gets the method name of the caller. + Returns the representation of the current + . - - The method name of the caller. - + + A representation of the current . + - Gets the method name of the caller. + Returns the level . - + - Gets all available caller information + Compares levels. - - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - + The object to compare against. + true if the objects are equal. - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) + Compares the levels of instances, and + defers to base class if the target object is not a + instance. - - - Gets the stack frames from the stack trace of the caller making the log request - - - + - Static manager that controls the creation of repositories + Returns a hash code + A hash code for the current . - Static manager that controls the creation of repositories - - - This class is used by the wrapper managers (e.g. ) - to provide access to the objects. + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. - 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. + Returns the hash code of the level . - Nicko Cadell - Gert Driesen - + - Private constructor to prevent instances. Only static methods should be used. + 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 . + + + + - Private constructor to prevent instances. Only static methods should be used. + must be an instance of + or ; otherwise, an exception is thrown. + is not a . - + - Hook the shutdown event + Returns a value indicating whether a specified + is greater than another specified . + A + A + + true if is greater than + ; otherwise, false. + - 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. + Compares two levels. - + - Register for ProcessExit and DomainUnload events on the AppDomain + Returns a value indicating whether a specified + is less than another specified . + A + A + + true if is less than + ; otherwise, false. + - 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. + Compares two levels. - + - Return the default instance. + Returns a value indicating whether a specified + is greater than or equal to another specified . - the repository to lookup in - Return the default instance + A + A + + true if is greater than or equal to + ; otherwise, false. + - Gets the for the repository specified - by the argument. + Compares two levels. - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - + - Return the default instance. + Returns a value indicating whether a specified + is less than or equal to another specified . - the repository to lookup in - Return the default instance + A + A + + true if is less than or equal to + ; otherwise, false. + - Gets the for the repository specified - by the argument. + Compares two levels. - + - Returns the default instance. + Returns a value indicating whether two specified + objects have the same value. - The assembly to use to lookup the repository. - The default instance. + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + - Returns the default instance. + Compares two levels. - + - Returns the named logger if it exists. + Returns a value indicating whether two specified + objects have different values. - The repository to lookup in. - The fully qualified logger name to look for. + A or . + A or . - The logger found, or null if the named logger does not exist in the - specified repository. + true if the value of is different from + the value of ; otherwise, false. - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. + Compares two levels. - + - Returns the named logger if it exists. + Compares two specified instances. - The assembly to use to lookup the repository. - The fully qualified logger name to look for. + The first to compare. + The second to compare. - The logger found, or null if the named logger does not exist in the - specified assembly's repository. + 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 . + + - If the named logger exists (in the specified assembly's repository) then it - returns a reference to the logger, otherwise it returns - null. + Compares two levels. - + - Returns all the currently defined loggers in the specified repository. + The level designates a higher level than all the rest. - 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 level designates very severe error events. + System unusable, emergencies. - 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 level designates very severe error events. + System unusable, emergencies. - 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 level designates very severe error events + that will presumably lead the application to abort. - 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 level designates very severe error events. + Take immediate action, alerts. - 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 level designates very severe error events. + Critical condition, critical. - 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. + The level designates very severe error events. - - - 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 level designates error events that might + still allow the application to continue running. - 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 level designates potentially harmful + situations. - 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 level designates informational messages + that highlight the progress of the application at the highest level. - 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 level designates informational messages that + highlight the progress of the application at coarse-grained level. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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 level designates fine-grained informational + events that are most useful to debug an application. - 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. + The level designates the lowest level possible. - An array of all the known objects. - - - Gets an array of all currently defined repositories. - - - + - Internal method to get pertinent version info. + A strongly-typed collection of objects. - A string of version info. + Nicko Cadell - + - Called when the event fires + Supports type-safe iteration over a . - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - + - Called when the event fires + Gets the current element in the collection. - 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. + Advances the enumerator to the next element in the collection. - - Used by the internal logger to record the Type of the - log message. - + + 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. + - + - Initialize the default repository selector + Sets the enumerator to its initial position, before the first element in the collection. - + - Gets or sets the repository selector used by the . + Creates a read-only wrapper for a LevelCollection instance. - - 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. - - + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + - + - Implementation of the interface. + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. - - - This class should be used as the base for all wrapper implementations. - - - Nicko Cadell - Gert Driesen - + - Constructs a new wrapper for the specified logger. + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. - The logger to wrap. - - - Constructs a new wrapper for the specified logger. - - + + The number of elements that the new LevelCollection is initially capable of storing. + - + - The logger that this object is wrapping + 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. - + - Gets the implementation behind this wrapper object. + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. - - 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. - - + The array whose elements are copied to the new list. - + - Portable data structure used by + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. - - - Portable data structure used by - - - Nicko Cadell + The collection whose elements are copied to the new list. - + - The logger name. + Type visible only to our subclasses + Used to access protected constructor - - - The logger name. - - - + - Level of logging event. + A value - - - 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. + Allow subclasses to avoid our default constructors - - - The application supplied message of logging event. - - + - + - The name of thread + Gets the number of elements actually contained in the LevelCollection. - - - The name of thread in which this logging event was generated - - - + - Gets or sets the local time the event was logged + Copies the entire LevelCollection to a one-dimensional + array. - - - Prefer using the setter, since local time can be ambiguous. - - + The one-dimensional array to copy to. - + - Location information for the caller. + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. - - - Location information for the caller. - - + The one-dimensional array to copy to. + The zero-based index in at which copying begins. - + - String representation of the user + Gets a value indicating whether access to the collection is synchronized (thread-safe). - - - String representation of the user's windows name, - like DOMAIN\username - - + false, because the backing type is an array, which is never thread-safe. - + - String representation of the identity. + Gets an object that can be used to synchronize access to the collection. - - - String representation of the current thread's principal identity. - - - + - The string representation of the exception + Gets or sets the at the specified index. - - - The string representation of the exception - - + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + - + - String representation of the AppDomain. + Adds a to the end of the LevelCollection. - - - String representation of the AppDomain. - - + The to be added to the end of the LevelCollection. + The index at which the value has been added. - + - Additional event specific properties + Removes all elements from the LevelCollection. - - - 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 + Creates a shallow copy of the . - - - The TimeStamp is stored in the UTC time zone. - - + A new with a shallow copy of the collection data. - + - Flags passed to the property + Determines whether a given is in the LevelCollection. - - - Flags passed to the property - - - Nicko Cadell + The to check for. + true if is found in the LevelCollection; otherwise, false. - + - Fix the MDC + 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. + - + - Fix the NDC + 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 . + - + - Fix the rendered message + Removes the first occurrence of a specific from the LevelCollection. + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + - + - Fix the thread name + 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 . + - + - Fix the callers location information + Gets a value indicating whether the collection has a fixed size. - - CAUTION: Very slow to generate - + true if the collection has a fixed size; otherwise, false. The default is false - + - Fix the callers windows user name + Gets a value indicating whether the IList is read-only. - - CAUTION: Slow to generate - + true if the collection is read-only; otherwise, false. The default is false - + - Fix the domain friendly name + Returns an enumerator that can iterate through the LevelCollection. + An for the entire LevelCollection. - + - Fix the callers principal name + Gets or sets the number of elements the LevelCollection can contain. - - CAUTION: May be slow to generate - - + - Fix the exception text + 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. - + - Fix the event properties. Active properties must implement in order to be eligible for fixing. + 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. - + - No fields fixed + 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. - + - All fields fixed + 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 . + + + - Partial fields fixed + Supports simple iteration over a . - - - This set of partial fields gives good performance. The following fields are fixed: - - - - - - - - - - + - The internal representation of logging events. + Initializes a new instance of the Enumerator class. - - - 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. + Gets the current element in the collection. - + - The key into the Properties map for the thread identity value. + 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. + - + - The key into the Properties map for the user name value. + Sets the enumerator to its initial position, before the first element in the collection. - + - Initializes a new instance of the class - from the supplied parameters. + An evaluator that triggers at a threshold level - 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. + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + Nicko Cadell - + - Initializes a new instance of the class - using specific data. + The threshold for triggering + + + + + Create a new evaluator using the threshold. - 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. + Create a new evaluator using the threshold. - 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. + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. - + - Initializes a new instance of the class - using specific data. + Create a new evaluator using the specified threshold. - 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 threshold to trigger at - 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. + Create a new evaluator using the specified threshold. - 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. + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. - + - Initializes a new instance of the class - using specific data. + the threshold to trigger at - Data used to initialize the logging event. + + The that will cause this evaluator to trigger + - 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 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 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. + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. - + - Serialization constructor + Mapping between string name and Level object - 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. + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + Nicko Cadell - + - Ensure that the repository is set. + Mapping from level name to Level object. The + level name is case insensitive - the value for the repository - + - Write the rendered message to a TextWriter + Construct the level map - 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. + Construct the level map. - + - Serializes this object into the provided. + Clear the internal maps of all levels - 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. + Clear the internal maps of all levels - + - Gets the portable data for this . + Lookup a by name - The for this event. + The name of the Level to lookup + a Level from the map with the name specified - A new can be constructed using a - instance. - - - Does a fix of the data - in the logging event before returning the event data. + Returns the from the + map with the name specified. If the no level is + found then null is returned. - + - Gets the portable data for this . + Create a new Level and add it to the map - The set of data to ensure is fixed in the LoggingEventData - The for this event. + the string to display for the Level + the level value to give to the Level - A new can be constructed using a - instance. + Create a new Level and add it to the map + - + - Returns this event's exception's rendered using the - . + Create a new Level and add it to the map - - This event's exception's rendered using the . - + the string to display for the Level + the level value to give to the Level + the display name to give to the Level - Obsolete. Use instead. + Create a new Level and add it to the map - + - Returns this event's exception's rendered using the - . + Add a Level to the map - - This event's exception's rendered using the . - + the Level to add - Returns this event's exception's rendered using the - . + Add a Level to the map - + - Fix instance fields that hold volatile data. + Return all possible levels as a list of Level objects. + all possible levels as a list of Level objects - 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. + Return all possible levels as a list of Level objects. + + + + + 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 + - Calling is equivalent to - calling passing the parameter - false. + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. - See for more - information. + If no level with the specified name is found then the + argument is added to the level map + and returned. - + - Fixes instance fields that hold volatile data. + The internal representation of caller location information. - 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. + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. - 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. + 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. - Set to false to ensure that all - settings are fixed. + 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 - + - Fix the fields specified by the parameter + Constructor - the fields to fix + The declaring type of the method that is + the stack boundary into the logging system for this call. - 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. + Initializes a new instance of the + class based on the current thread. - + - Lookup a composite property in this event + Constructor - the key for the property to lookup - the value for the property + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. - 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. - - - + Initializes a new instance of the + class with the specified data. - + - Get all the composite properties in this event + Gets the fully qualified class name of the caller making the logging + request. - the containing all the properties + + The fully qualified class name of the caller making the logging + request. + - See for details of the composite properties - stored by the event. - - - This method returns a single containing all the - properties defined for this event. + Gets the fully qualified class name of the caller making the logging + request. - + - The internal logging event data. + Gets the file name of the caller. + + The file name of the caller. + + + + Gets the file name of the caller. + + - + - The internal logging event data. + Gets the line number of the caller. + + The line number of the caller. + + + + Gets the line number of the caller. + + - + - The internal logging event data. + Gets the method name of the caller. + + The method name of the caller. + + + + Gets the method name of the caller. + + - + - The fully qualified Type of the calling - logger class in the stack frame (i.e. the declaring type of the method). + 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) + + - + - The application supplied message of logging event. + Gets the stack frames from the stack trace of the caller making the log request - + - The exception that was thrown. + The fully qualified type of the LocationInfo class. - This is not serialized. The string representation - is serialized instead. + Used by the internal logger to record the Type of the + log message. - + - The repository that generated the logging event + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. - - This is not serialized. - - + - The fix state for this event + Exception base type for log4net. - These flags indicate which fields have been fixed. - Not serialized. + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + Nicko Cadell + Gert Driesen - + - Indicated that the internal cache is updateable (ie not fixed) + Constructor - This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler - changes in the caching strategy. + + Initializes a new instance of the class. + - + - Gets the time when the current process started. + Constructor - - This is the time when this process started. - + A message to include with the exception. - 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. + Initializes a new instance of the class with + the specified message. - + - Gets the UTC time when the current process started. + Constructor - - This is the UTC time when this process started. - + A message to include with the exception. + A nested exception to include. - 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. + Initializes a new instance of the class + with the specified message and inner exception. - + - Gets the of the logging event. + Serialization constructor - - The of the logging event. - + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. - Gets the of the logging event. + Initializes a new instance of the class + with serialized data. - + - Gets the time of the logging event. + Static manager that controls the creation of repositories - - The time of the logging event. - - The TimeStamp is stored in UTC and converted to the local time zone for this computer. + 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 - - - 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. + Private constructor to prevent instances. Only static methods should be used. - - The name of the logger that logged the event. - - Gets the name of the logger that logged the event. + Private constructor to prevent instances. Only static methods should be used. - + - Gets the location information for this logging event. + Hook the shutdown 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. + 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. - + - Gets the message object used to initialize this event. + Register for ProcessExit and DomainUnload events on the AppDomain - - 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. + 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. - + - Gets the exception object used to initialize this event. + Return the default instance. - - The exception object used to initialize this event. - + the repository to lookup in + Return the default instance - 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. + Gets the for the repository specified + by the argument. - + - The that this event was created in. + 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 - The that this event was created in. + Gets the for the repository specified + by the argument. - + - Gets the message, rendered through the . + Returns the default instance. - - The message rendered through the . - + The assembly to use to lookup the repository. + The default instance. - The collected information is cached for future use. + Returns the default instance. - + - Gets the name of the current thread. + Returns the named logger if it exists. - - The name of the current thread, or the thread ID when - the name is not available. - + 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. + - The collected information is cached for future use. + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. - + - Gets the name of the current user. + Returns the named logger if it exists. - - The name of the current user, or NOT AVAILABLE when the - underlying runtime has no support for retrieving the name of the - current user. - + 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. + - 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. + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. - + - Gets the identity of the current thread principal. + Returns all the currently defined loggers in the specified repository. - - The string name of the identity of the current thread principal. - + The repository to lookup in. + All the defined loggers. - Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get - the name of the current thread principal. + The root logger is not included in the returned array. - + - Gets the AppDomain friendly name. + Returns all the currently defined loggers in the specified assembly's repository. - - The AppDomain friendly name. - + The assembly to use to lookup the repository. + All the defined loggers. - Gets the AppDomain friendly name. + The root logger is not included in the returned array. - + - Additional event specific properties. + Retrieves or creates a named logger. - - Additional event specific properties. - + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. - 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 . + 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. - 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. + 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 fixed fields in this event + Retrieves or creates a named logger. - - The set of fields that are fixed in this event - + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. + 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. - + - Implementation of wrapper interface. + 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. - 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: + Gets the logger for the fully qualified name of the type specified. - - - 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. - - - + + + + + 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. + - The values for these levels and their semantic meanings can be changed by - configuring the for the repository. + Gets the logger for the fully qualified name of the type specified. - Nicko Cadell - Gert Driesen - + - The ILog interface is use by application to log messages into - the log4net framework. + Shuts down the log4net system. - Use the to obtain logger instances - that implement this interface. The - static method is used to get logger instances. + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. - 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. + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. - 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. + 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. - 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. + Shuts down the repository for the repository specified. - The message object to log. + The repository to shutdown. - 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. + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. - 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. + + 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. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Shuts down the repository for the repository specified. - The message object to log. - The exception to log, including its stack trace. + The assembly to use to lookup the repository. - See the form for more detailed information. + 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. - - - - Log a formatted string with the level. + - Logs a formatted message string with the level. + Resets all values contained in this repository instance to their defaults. - A String containing zero or more format items - An Object array containing zero or more objects to format + The repository to reset. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - + 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. + - - - + - Logs a formatted message string with the level. + Resets all values contained in this repository instance to their defaults. - A String containing zero or more format items - An Object to format + The assembly to use to lookup the repository to reset. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - + 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. + - - - + - Logs a formatted message string with the level. + Creates a repository with the specified name. - A String containing zero or more format items - An Object to format - An Object to format + The name of the repository, this must be unique amongst repositories. + The created for the repository. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - + - Logs a formatted message string with the level. + Creates a repository with the specified name. - A String containing zero or more format items - An Object to format - An Object to format - An Object to format + The name of the repository, this must be unique amongst repositories. + The created for the repository. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + Creates the default type of which is a + object. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. - - + The specified repository already exists. - + - Logs a formatted message string with the level. + Creates a repository with the specified name and repository type. - 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 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 message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. - - + The specified repository already exists. - - Log a message object with the level. + - Logs a message object with the level. + 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. - 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 name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. - The message object to log. - - + The specified repository already exists. - + - Logs a message object with the INFO level including - the stack trace of the passed - as a parameter. + Creates a repository for the specified assembly and repository type. - The message object to log. - The exception to log, including its stack trace. + 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. - See the form for more detailed information. + 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. - - - - Log a formatted message string with the level. + - Logs a formatted message string with the level. + Creates a repository for the specified assembly and repository type. - A String containing zero or more format items - An Object array containing zero or more objects to format + 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 message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Gets an array of all currently defined repositories. - A String containing zero or more format items - An Object to format + An array of all the known objects. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Gets an array of all currently defined repositories. - - - + - Logs a formatted message string with the level. + Gets or sets the repository selector used by the . - A String containing zero or more format items - An Object to format - An Object to format + + The repository selector used by the . + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + The repository selector () is used by + the to create and select repositories + (). - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Internal method to get pertinent version info. - A String containing zero or more format items - An Object to format - An Object to format - An Object to format + A string of version info. + + + + Called when the event fires + + the that is exiting + null - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + Called when the event fires. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + When the event is triggered the log4net system is . - - - + - Logs a formatted message string with the level. + Called when the event fires - 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 that is exiting + null - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + Called when the event fires. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + When the event is triggered the log4net system is . - - - - Log a message object with the level. + - Log a message object with the level. + The fully qualified type of the LoggerManager class. - - 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. - + Used by the internal logger to record the Type of the + log message. - The message object to log. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Initialize the default repository selector + + + + + Implementation of the interface. - The message object to log. - The exception to log, including its stack trace. - See the form for more detailed information. + This class should be used as the base for all wrapper implementations. - - + Nicko Cadell + Gert Driesen - - Log a formatted message string with the level. + - Logs a formatted message string with the level. + Constructs a new wrapper for the specified logger. - A String containing zero or more format items - An Object array containing zero or more objects to format + The logger to wrap. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Constructs a new wrapper for the specified logger. - - - + - Logs a formatted message string with the level. + Gets the implementation behind this wrapper object. - A String containing zero or more format items - An Object to format + + The object that this object is implementing. + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + The Logger object may not be the same object as this object + because of logger decorators. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + This gets the actual underlying objects that is used to process + the log events. - - - + - Logs a formatted message string with the level. + The logger that this object is wrapping + + + + + Portable data structure used by - 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. + Portable data structure used by - - + Nicko Cadell - + - Logs a formatted message string with the level. + The logger name. - 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. + The logger name. - - - + - Logs a formatted message string with the level. + Level of logging event. - 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. + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. - - - - Log a message object with the level. + - Logs a message object with the level. + The application supplied message. - 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. + The application supplied message of logging event. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + The name of thread - The message object to log. - The exception to log, including its stack trace. - See the form for more detailed information. + The name of thread in which this logging event was generated - - - - Log a formatted message string with the level. + - Logs a formatted message string with the level. + Gets or sets the local time the event was 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. + Prefer using the setter, since local time can be ambiguous. - - - + - Logs a formatted message string with the level. + Gets or sets the UTC time the event was 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. + The TimeStamp is stored in the UTC time zone. + + + + + Location information for the caller. + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Location information for the caller. - - - + - Logs a formatted message string with the level. + String representation of the user - 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. + String representation of the user's windows name, + like DOMAIN\username + + + + + String representation of the identity. + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + String representation of the current thread's principal identity. - - - + - Logs a formatted message string with the level. + The string representation of the exception - 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. + The string representation of the exception - - - + - Logs a formatted message string with the level. + String representation of the AppDomain. - 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. + String representation of the AppDomain. + + + + + Additional event specific properties + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. - - - - Log a message object with the level. + - Log a message object with the level. + The internal representation of logging events. - 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. + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. - 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. + + 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. - The message object to log. - - + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Initializes a new instance of the class + from the supplied parameters. - The message object to log. - The exception to log, including its stack trace. + 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. - See the form for more detailed information. + 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. - - - - Log a formatted message string with the level. + - Logs a formatted message string with the level. + Initializes a new instance of the class + using specific data. - A String containing zero or more format items - An Object array containing zero or more objects to format + 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. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + 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. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Initializes a new instance of the class + using specific data. - A String containing zero or more format items - An Object to format + 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 message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + 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. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Initializes a new instance of the class + using specific data. - A String containing zero or more format items - An Object to format - An Object to format + Data used to initialize the logging event. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + 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. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Serialization constructor - A String containing zero or more format items - An Object to format - An Object to format - An Object to format + The that holds the serialized object data. + The that contains contextual information about the source or destination. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Initializes a new instance of the class + with serialized data. - - - + - Logs a formatted message string with the level. + Gets the time when the current process started. - 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 + + This is the time when this process started. + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + The TimeStamp is stored internally in UTC and converted to the local time zone for this computer. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Checks if this logger is enabled for the level. + Gets the UTC time when the current process started. - true if this logger is enabled for events, false otherwise. + This is the UTC time when this process started. - 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. + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. - 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. + 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. - - - + - Checks if this logger is enabled for the level. + Gets the of the logging event. - true if this logger is enabled for events, false otherwise. + The of the logging event. - For more information see . + + Gets the of the logging event. + - - - - + - Checks if this logger is enabled for the level. + Gets the time of the logging event. - true if this logger is enabled for events, false otherwise. + The time of the logging event. - For more information see . + + The TimeStamp is stored in UTC and converted to the local time zone for this computer. + - - - - + - Checks if this logger is enabled for the level. + Gets UTC the time of the logging event. - true if this logger is enabled for events, false otherwise. + The UTC time of the logging event. - - For more information see . - - - - - + - Checks if this logger is enabled for the level. + Gets the name of the logger that logged the event. - true if this logger is enabled for events, false otherwise. + The name of the logger that logged the event. - For more information see . + + Gets the name of the logger that logged the event. + - - - - + - Construct a new wrapper for the specified logger. + Gets the location information for this logging event. - The logger to wrap. + + The location information for this logging event. + - Construct a new wrapper for the specified logger. + 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. - + - Virtual method called when the configuration of the repository changes + Gets the message object used to initialize this event. - the repository holding the levels + + The message object used to initialize this event. + - Virtual method called when the configuration of the repository changes + 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. - + - Logs a message object with the DEBUG level. + Gets the exception object used to initialize this event. - The message object to log. + + The exception object used to initialize this event. + - 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. + 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. - 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. + If there is no defined exception object for this event then + null will be returned. - + - Logs a message object with the DEBUG level + The that this event was created in. - 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. + The that this event was created in. - - + - Logs a formatted message string with the DEBUG level. + Ensure that the repository is set. - A String containing zero or more format items - An Object array containing zero or more objects to format + the value for the repository + + + + Gets the message, rendered through the . + + + The message rendered through the . + - 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. + The collected information is cached for future use. - + - Logs a formatted message string with the DEBUG level. + Write the rendered message to a TextWriter - A String containing zero or more format items - An Object to format + the writer to write the message to - 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. + 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. + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + The collected information is cached for future use. - + - Logs a formatted message string with the DEBUG level. + Gets the name of the current user. - A String containing zero or more format items - An Object to format - An Object to format + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + - 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. + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. - The string is formatted using the - format provider. To specify a localized provider use the - method. + 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. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - + - Logs a formatted message string with the DEBUG level. + Gets the identity of the current thread principal. - A String containing zero or more format items - An Object to format - An Object to format - An Object to format + + The string name of the identity of the current thread principal. + - 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. + 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. + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Gets the AppDomain friendly name. - + - Logs a formatted message string with the DEBUG level. + Additional event specific properties. - 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 + + Additional event specific properties. + - 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. + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - + - Logs a message object with the INFO level. + The fixed fields in this event - The message object to log. + + The set of fields that are fixed in this event + - 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. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. - + - Logs a message object with the INFO level. + Serializes this object into the provided. - The message object to log. - The exception to log, including its stack trace. + The to populate with data. + The destination for this serialization. - Logs a message object with the INFO level including - the stack trace of the - passed as a parameter. + The data in this event must be fixed before it can be serialized. - See the form for more detailed information. + The method must be called during the + method call if this event + is to be used outside that method. - - + - Logs a formatted message string with the INFO level. + Gets the portable data for this . - A String containing zero or more format items - An Object array containing zero or more objects to format + The for this event. - 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. + A new can be constructed using a + instance. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Does a fix of the data + in the logging event before returning the event data. - + - Logs a formatted message string with the INFO level. + Gets the portable data for this . - A String containing zero or more format items - An Object to format + The set of data to ensure is fixed in the LoggingEventData + The for this event. - 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. + 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 . + + - The string is formatted using the - format provider. To specify a localized provider use the - method. + Obsolete. Use instead. + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Returns this event's exception's rendered using the + . - + - Logs a formatted message string with the INFO level. + Fix instance fields that hold volatile data. - 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. + 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. - The string is formatted using the - format provider. To specify a localized provider use the - method. + Calling is equivalent to + calling passing the parameter + false. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + See for more + information. - + - Logs a formatted message string with the INFO level. + Fixes instance fields that hold volatile data. - A String containing zero or more format items - An Object to format - An Object to format - An Object to format + Set to true to not fix data that takes a long time to fix. - 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. + 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 string is formatted using the - format provider. To specify a localized provider use the - method. + 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. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Set to false to ensure that all + settings are fixed. - + - Logs a formatted message string with the INFO level. + Fix the fields specified by the parameter - 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 fields to fix - 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. + 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. - + - Logs a message object with the WARN level. + Lookup a composite property in this event - the message object to log + the key for the property to lookup + the value for the property - 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. + 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. + + + - + - Logs a message object with the WARN level + Get all the composite properties in this event - The message object to log. - The exception to log, including its stack trace. + the containing all the properties - Logs a message object with the WARN level including - the stack trace of the - passed as a parameter. + See for details of the composite properties + stored by the event. - See the form for more detailed information. + This method returns a single containing all the + properties defined for this event. - - + - Logs a formatted message string with the WARN level. + The internal logging event data. - 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. + The internal logging event data. - 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. + The internal logging event data. - 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. + 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. - 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. - + This is not serialized. The string representation + is serialized instead. - + - Logs a formatted message string with the WARN level. + The repository that generated the logging event - 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. - + This is not serialized. - + - Logs a message object with the ERROR level. + The fix state for this event - 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. - + These flags indicate which fields have been fixed. + Not serialized. - + - Logs a message object with the ERROR level + Indicated that the internal cache is updateable (ie not fixed) - 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. - + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. - - + - Logs a formatted message string with the ERROR level. + 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. + + + + + Implementation of wrapper interface. - 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 implementation of the interface + forwards to the held by the base class. - The string is formatted using the + 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 + + + + 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. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the ERROR level. + Logs a formatted message string with the DEBUG level. A String containing zero or more format items An Object to format @@ -15392,18 +13998,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the ERROR level. + Logs a formatted message string with the DEBUG level. A String containing zero or more format items An Object to format @@ -15417,18 +14023,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the ERROR level. + Logs a formatted message string with the DEBUG level. A String containing zero or more format items An Object to format @@ -15443,18 +14049,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the ERROR level. + Logs a formatted message string with the DEBUG level. An that supplies culture-specific formatting information A String containing zero or more format items @@ -15467,57 +14073,57 @@ This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a message object with the FATAL level. + Logs a message object with the INFO level. The message object to log. - This method first checks if this logger is FATAL + This method first checks if this logger is INFO enabled by comparing the level of this logger with the - FATAL level. If this logger is - FATAL enabled, then it converts the message object + 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. + 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. + 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 + 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 FATAL level including + 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. + See the form for more detailed information. - + - + - Logs a formatted message string with the FATAL level. + 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 @@ -15530,18 +14136,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the FATAL level. + Logs a formatted message string with the INFO level. A String containing zero or more format items An Object to format @@ -15554,18 +14160,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the FATAL level. + Logs a formatted message string with the INFO level. A String containing zero or more format items An Object to format @@ -15579,18 +14185,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the FATAL level. + Logs a formatted message string with the INFO level. A String containing zero or more format items An Object to format @@ -15605,18 +14211,18 @@ The string is formatted using the format provider. To specify a localized provider use the - method. + method. This method does not take an object to include in the - log event. To pass an use one of the + log event. To pass an use one of the methods instead. - + - Logs a formatted message string with the FATAL level. + Logs a formatted message string with the INFO level. An that supplies culture-specific formatting information A String containing zero or more format items @@ -15629,728 +14235,1169 @@ This method does not take an object to include in the - log event. To pass an use one of 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. + 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. + + - + - Checks if this logger is enabled for the DEBUG - level. + Logs a message object with the WARN level - - true if this logger is enabled for DEBUG events, - false otherwise. - + The message object to log. + The exception to log, including its stack trace. - This function is intended to lessen the computational cost of - disabled log debug statements. + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. - For some log Logger object, when you write: + See the form for more detailed information. - - log.Debug("This is entry number: " + i ); - + + + + + + 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 + - You incur the cost constructing the message, concatenation in - this case, regardless of whether the message is logged or not. + 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. - If you are worried about speed, then you should write: + The string is formatted using the + format provider. To specify a localized provider use the + method. - - 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. + 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 INFO level. + Logs a formatted message string with the WARN level. - - true if this logger is enabled for INFO events, - false otherwise. - + A String containing zero or more format items + An Object to format - See for more information and examples - of using this method. + 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. - - + - Checks if this logger is enabled for the WARN level. + Logs a formatted message string with the WARN level. - - true if this logger is enabled for WARN events, - false otherwise. - + A String containing zero or more format items + An Object to format + An Object to format - See for more information and examples - of using this method. + 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. - - + - Checks if this logger is enabled for the ERROR level. + Logs a formatted message string with the WARN level. - - true if this logger is enabled for ERROR events, - false otherwise. - + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - See for more information and examples of using this method. + 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. - - + - Checks if this logger is enabled for the FATAL level. + Logs a formatted message string with the WARN level. - - true if this logger is enabled for FATAL events, - false otherwise. - + 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 - See for more information and examples of using this method. + 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. - - + - provides method information without actually referencing a System.Reflection.MethodBase - as that would require that the containing assembly is loaded. + 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. + + - + - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. + 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. + + + - + - constructs a method item for an unknown method. + 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. + + - + - 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. + Logs a formatted message string with the ERROR level. + A String containing zero or more format items + An Object to format - Used by the internal logger to record the Type of the - log message. + + 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. + - + - Gets the method name of the caller making the logging - request. + Logs a formatted message string with the ERROR level. - - The method name of the caller making the logging - request. - + A String containing zero or more format items + An Object to format + An Object to format - Gets the method name of the caller making the logging - request. + 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. - + - Gets the method parameters of the caller making - the logging request. + Logs a formatted message string with the ERROR level. - - The method parameters of the caller making - the logging request - + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - Gets the method parameters of the caller making - the logging request. + 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. - + - A SecurityContext used by log4net when interacting with protected resources + 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 - 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. + 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. - Nicko Cadell - + - Impersonate this SecurityContext + Logs a message object with the FATAL level. - State supplied by the caller - An instance that will - revoke the impersonation of this SecurityContext, or null + The message object to log. - 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. + 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. - + - The providers default instances. + Logs a message object with the FATAL level + The message object to log. + The exception to log, including its stack trace. - 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. + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. - 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. + See the form for more detailed information. - Nicko Cadell - - - - The default provider - + - + - Protected default constructor to allow subclassing + 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 - Protected default constructor to allow subclassing + 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. - + - Create a SecurityContext for a consumer + Logs a formatted message string with the FATAL level. - The consumer requesting the SecurityContext - An impersonation context + A String containing zero or more format items + An Object to format - The default implementation is to return a . + 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. - Subclasses should override this method to provide their own - behavior. + 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. - + - Gets or sets the default SecurityContextProvider + Logs a formatted message string with the FATAL level. - - The default SecurityContextProvider - + A String containing zero or more format items + An Object to format + An Object to format - The default provider is used by configured components that - require a and have not had one - given to them. + 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. - By default this is an instance of - that returns objects. + The string is formatted using the + format provider. To specify a localized provider use the + method. - The default provider can be set programmatically by setting - the value of this property to a sub class of - that has the desired behavior. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - + - provides stack frame information without actually referencing a System.Diagnostics.StackFrame - as that would require that the containing assembly is loaded. + Logs a formatted message string with the FATAL level. - - - - - 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 - - - + 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. + + - + - The fully qualified type of the StackFrameItem class. + 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 - Used by the internal logger to record the Type of the - log message. + + 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. + - + - Gets the fully qualified class name of the caller making the logging - request. + Checks if this logger is enabled for the DEBUG + level. - The fully qualified class name of the caller making the logging - request. + true if this logger is enabled for DEBUG events, + false otherwise. - Gets the fully qualified class name of the caller making the logging - request. + 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. - + - Gets the file name of the caller. + Checks if this logger is enabled for the INFO level. - The file name of the caller. + true if this logger is enabled for INFO events, + false otherwise. - Gets the file name of the caller. + See for more information and examples + of using this method. + - + - Gets the line number of the caller. + Checks if this logger is enabled for the WARN level. - The line number of the caller. + true if this logger is enabled for WARN events, + false otherwise. - Gets the line number of the caller. + See for more information and examples + of using this method. + - + - Gets the method name of the caller. + Checks if this logger is enabled for the ERROR level. - The method name of the caller. + true if this logger is enabled for ERROR events, + false otherwise. - Gets the method name of the caller. + See for more information and examples of using this method. + - + - Gets all available caller information + Checks if this logger is enabled for the FATAL level. - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) + true if this logger is enabled for FATAL events, + false otherwise. - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) + See for more information and examples of using this method. + - + - An evaluator that triggers after specified number of seconds. + Event handler for the event - - - This evaluator will trigger if the specified time period - has passed since last check. - - - Robert Sevcik + the repository + Empty - + - The default time threshold for triggering in seconds. Zero means it won't trigger at all. + The fully qualified name of this declaring type not the type of any subclass. - + - The time threshold for triggering in seconds. Zero means it won't trigger at all. + provides method information without actually referencing a System.Reflection.MethodBase + as that would require that the containing assembly is loaded. + - + - The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. + constructs a method item for an unknown method. - + - Create a new evaluator using the time threshold in seconds. + constructs a method item from the name of the method. - - - 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. + constructs a method item from the name of the method and its parameters. - - 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? + constructs a method item from a method base by determining the method name and its parameters. - The event to check - This method returns true, if the specified time period - has passed since last check.. - Otherwise it returns false + + + + + Gets the method name of the caller making the logging + request. + + + The method name of the caller making the logging + request. + - This evaluator will trigger if the specified time period - has passed since last check. + Gets the method name of the caller making the logging + request. - + - The time threshold in seconds to trigger after + Gets the method parameters of the caller making + the logging request. - The time threshold in seconds to trigger after. - Zero means it won't trigger at all. + The method parameters of the caller making + the logging request - This evaluator will trigger if the specified time period - has passed since last check. + Gets the method parameters of the caller making + the logging request. - + - Delegate used to handle creation of new wrappers. + The fully qualified type of the StackFrameItem class. - 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. - + Used by the internal logger to record the Type of the + log message. - + - Maps between logger objects and wrapper objects. + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. - - - This class maintains a mapping between objects and - objects. Use the method to - lookup the for the specified . - + + + + A SecurityContext used by log4net when interacting with protected resources + + - 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. + 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 - Gert Driesen - + - Initializes a new instance of the + Impersonate this SecurityContext - The handler to use to create the wrapper objects. + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null - Initializes a new instance of the class with - the specified handler to create the wrapper objects. + 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. - + - Gets the wrapper object for the specified logger. + The providers default instances. - The wrapper object for the specified logger - If the logger is null then the corresponding wrapper is null. + 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 . - 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. + 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 - + - Creates the wrapper object for the specified logger. + The default provider - The logger to wrap in a wrapper. - The wrapper object for the logger. + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + - This implementation uses the - passed to the constructor to create the wrapper. This method - can be overridden in a subclass. + 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. - + - Called when a monitored repository shutdown event is received. + Protected default constructor to allow subclassing - 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. + Protected default constructor to allow subclassing - + - Event handler for repository shutdown event. + Create a SecurityContext for a consumer - The sender of the event. - The event args. + 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. + + - + - Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + provides stack frame information without actually referencing a System.Diagnostics.StackFrame + as that would require that the containing assembly is loaded. + - + - The handler to use to create the extension wrapper objects. + returns a stack frame item from a stack frame. This + + - + - Internal reference to the delegate used to register for repository shutdown events. + 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 map of logger repositories. + Gets the file name of the caller. - Map of logger repositories. + The file name of the caller. - Gets the hashtable that is keyed on . The - values are hashtables keyed on with the - value being the corresponding . + Gets the file name of the caller. - + - Formats a as "HH:mm:ss,fff". + Gets the line number of the caller. + + The line number of the caller. + - Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + Gets the line number of the caller. - Nicko Cadell - Gert Driesen - + - Render a as a string. + Gets the method name of the caller. + + The method name of the caller. + - Interface to abstract the rendering of a - instance into a string. + 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) + + - The method is used to render the - date to a text writer. + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) - Nicko Cadell - Gert Driesen - + - Formats the specified date as a string. + The fully qualified type of the StackFrameItem class. + + + Used by the internal logger to record the Type of the + log message. + + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + An evaluator that triggers after specified number of seconds. - The date to format. - The writer to write to. - Format the as a string and write it - to the provided. + This evaluator will trigger if the specified time period + has passed since last check. + Robert Sevcik - + - String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + The time threshold for triggering in seconds. Zero means it won't trigger at all. - + - String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. - + - String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + The default time threshold for triggering in seconds. Zero means it won't trigger at all. - + - Renders the date into a string. Format is "HH:mm:ss". + Create a new evaluator using the time threshold in seconds. - 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. + Create a new evaluator using the time threshold in seconds. + + + This evaluator will trigger if the specified time period + has passed since last check. - + - Renders the date into a string. Format is "HH:mm:ss,fff". + Create a new evaluator using the specified time threshold in seconds. - The date to render into a string. + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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 . + + + + + + 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. + + + + + 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 + + + + 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. @@ -16366,6 +15413,21 @@ + + + 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. + + Last stored time with precision up to the second. @@ -16404,7 +15466,7 @@ - Initializes a new instance of the class. + Initializes a new instance of the class. @@ -16430,6 +15492,36 @@ The format info for the invariant culture.
    + + + 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. + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". @@ -16448,7 +15540,7 @@ - Initializes a new instance of the class. + Initializes a new instance of the class. @@ -16487,7 +15579,7 @@ The format string. - Initializes a new instance of the class + Initializes a new instance of the class with the specified format string. @@ -16511,7 +15603,7 @@
    - The format string used to format the . + The format string used to format the . @@ -16535,59 +15627,62 @@ Nicko Cadell Gert Driesen - + - Subclass this type to implement customized logging event filtering + Default constructor + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns - 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. + 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 philosophy of log4net filters is largely inspired from the - Linux ipchains. + The return result from - Nicko Cadell - Gert Driesen - + - Implement this interface to provide customized logging event filtering + 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. + + + + + Subclass this type to implement customized logging event filtering - Users should implement this interface to implement customized logging + 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 @@ -16596,12 +15691,12 @@ This abstract class assumes and also imposes that filters be - organized in a linear chain. The + 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 + The method must return one of the integer constants , or . @@ -16627,36 +15722,6 @@ 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. @@ -16723,54 +15788,81 @@ - - - Default constructor - - - + - Always returns the integer constant + Implement this interface to provide customized logging event filtering - 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! + 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 - + - The return result from + Decide if the logging event should be logged through an appender. + The LoggingEvent to decide upon + The decision of the filter - The return result from + 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. - - - 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. + 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. + + @@ -16806,23 +15898,6 @@ 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 @@ -16851,6 +15926,23 @@ + + + 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 . + + + This is a simple filter based on matching. @@ -16889,23 +15981,6 @@ 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 @@ -16946,7 +16021,24 @@ - + + + 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. + + + + Simple filter to match a string in the event's logger name. @@ -16978,26 +16070,6 @@ 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 @@ -17028,6 +16100,26 @@ + + + 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. + + + Simple filter to match a keyed string in the @@ -17044,6 +16136,33 @@ Nicko Cadell Gert Driesen + + + 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". + + + Simple filter to match a string an event property @@ -17056,6 +16175,48 @@ Nicko Cadell + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + 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. + + + + + + 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. + + + Simple filter to match a string in the rendered message @@ -17111,25 +16272,6 @@ - - - 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 @@ -17180,17 +16322,7 @@ - - - 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 @@ -17198,10 +16330,9 @@ see remarks - The event property for the is matched against - the . + The rendered message is matched against the . If the occurs as a substring within - the property value then a match will have occurred. If no match occurs + 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 @@ -17210,1199 +16341,1457 @@ - + - The key to lookup in the event properties and then match against. + The log4net Global Context. - 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. + The GlobalContext provides a location for global debugging + information to be stored. - - - - - Simple filter to match a string in the - - - Simple filter to match a string in the + 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. - As the MDC has been replaced with named stacks stored in the - properties collections the should - be used instead. + By default the log4net:HostName property is set to the name of + the current machine. + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + Nicko Cadell - Gert Driesen - + - Default constructor + Private Constructor. - - Sets the to "NDC". - + Uses a private access modifier to prevent instantiation of this class. - + - Write the event appdomain name to the output + The global properties map. + + The global properties map. + - Writes the to the output writer. + The global properties map. - Daniel Cazzulino - Nicko Cadell - + - Abstract class that provides the formatting functionality that - derived classes need. + The global context properties instance - - 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. + The ILog interface is use by application to log messages into + the log4net framework. - 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. + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. - - Nicko Cadell - Gert Driesen - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Protected constructor - - - Initializes a new instance of the class. - + 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. - Evaluate this pattern converter and write the output to a writer. + Log a message object with the level. - that will receive the formatted result. - The state object on which the pattern converter should be executed. + The message object to log. - Derived pattern converters must override this method in order to - convert conversion specifiers in the appropriate way. + 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. + + - + - Set the next pattern converter in the chains + Log a message object with the level including + the stack trace of the passed + as a parameter. - the pattern converter that should follow this converter in the chain - the next converter + The message object to log. + The exception to log, including its stack trace. - 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. + See the form for more detailed information. + + - + + Log a formatted string with the level. - Write the pattern converter to the writer with appropriate formatting + Logs a formatted message string with the level. - that will receive the formatted result. - The state object on which the pattern converter should be executed. + A String containing zero or more format items + An Object array containing zero or more objects to format - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Fast space padding method. + Logs a formatted message string with the level. - to which the spaces will be appended. - The number of spaces to be padded. + A String containing zero or more format items + An Object to format - Fast space padding method. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - - - The option string to the converter - - - + - Write an dictionary to a + Logs a formatted message string with the level. - the writer to write to - a to use for object conversion - the value to write to the writer + A String containing zero or more format items + An Object to format + An Object to format - Writes the to a writer in the form: + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - {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. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Write an dictionary to a + Logs a formatted message string with the level. - the writer to write to - a to use for object conversion - the value to write to the writer + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - Writes the to a writer in the form: + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - {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. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Write an object to a + Logs a formatted message string with the level. - the writer to write to - a to use for object conversion - the value to write to the writer + 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 - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of 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. - Get the next pattern converter in the chain + Logs a message object with the level. - - the next pattern converter in the chain - - Get the next pattern converter in the chain + 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. + + - + - Gets or sets the formatting info for this converter + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. - - The formatting info for this converter - + The message object to log. + The exception to log, including its stack trace. - Gets or sets the formatting info for this converter + See the form for more detailed information. + + - - - Gets or sets the option value for this converter - + + Log a formatted message string with the level. - The option for this converter + 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 - Gets or sets the option value for this converter + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - - - - - - + - Initializes a new instance of the class. + Logs a formatted message string with the level. - - - - 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 + A String containing zero or more format items + An Object to format - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - Set this value to override a this default setting. The default - value is true, this converter does not handle the exception. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Write the event appdomain name to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object to format + An Object to format - Writes the to the output . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - - - - Converter for items in the ASP.Net Cache. - - - Outputs an item from the . + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - 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 + Logs a formatted message string with the level. - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - - - - Converter for items in the . - - - Outputs an item from the . + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Ron Grabowski + + - + - Write the ASP.Net HttpContext item to the output + Logs a formatted message string with the level. - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. + 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 - Writes out the value of a named property. The property name - should be set in the - property. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of 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. - Converter for items in the ASP.Net Cache. + Log a message object with the level. - Outputs an item from the . + 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. - Ron Grabowski + The message object to log. + + - + - Write the ASP.Net Cache item to the output + Log a message object with the level including + the stack trace of the passed + as a parameter. - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. + The message object to log. + The exception to log, including its stack trace. - Writes out the value of a named property. The property name - should be set in the - property. + See the form for more detailed information. + + - + + Log a formatted message string with the level. - Converter for items in the ASP.Net Cache. + 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 - Outputs an item from the . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Ron Grabowski + + - + - Write the ASP.Net Cache item to the output + Logs a formatted message string with the level. - that will receive the formatted result. - The on which the pattern converter should be executed. - The under which the ASP.Net request is running. + A String containing zero or more format items + An Object to format - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Date pattern converter, uses a to format - the date of a . + Logs a formatted message string with the level. + A String containing zero or more format items + An Object to format + An Object to format - 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 message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - The is in the local time zone and is rendered in that zone. - To output the time in Universal time see . + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - The used to render the date to a string + 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 used to render the date to a string + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Initialize the converter pattern based on the property. + 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 - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - If any of the configuration properties are modified then - must be called again. + 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. - Convert the pattern into the rendered message + Logs a message object with the level. - that will receive the formatted result. - the event being logged + The message object to log. - Pass the to the - for it to render it to the writer. + 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. - - The passed is in the local time zone. + 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 fully qualified type of the DatePatternConverter class. + 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. - Used by the internal logger to record the Type of the - log message. + + See the form for more detailed information. + + + - + + Log a formatted message string with the level. - Write the exception text to the output + 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 - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - 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. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell - - - - Default constructor - + + - + - Write the exception text to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object to format - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - Recognized values for the Option parameter are: + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - - - Message - - - Source - - - StackTrace - - - TargetSite - - - HelpLink - - + + - + - Writes the caller location file name to the output + Logs a formatted message string with the level. + A String containing zero or more format items + An Object to format + An Object to format - Writes the value of the for - the event to the output writer. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - Write the caller location file name to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - Writes the value of the for - the to the output . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Write the caller location info to the output + 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 - Writes the to the output writer. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + + Log a message object with the level. - Write the caller location info to the output + Log a message object with the level. - that will receive the formatted result. - the event being logged - Writes the to the output writer. + 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. + + - + - Writes the event identity to the output + 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. - Writes the value of the to - the output writer. + See the form for more detailed information. - Daniel Cazzulino - Nicko Cadell + + - + + Log a formatted message string with the level. - Writes the event identity to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object array containing zero or more objects to format - Writes the value of the - to - the output . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Write the event level to the output + Logs a formatted message string with the level. + A String containing zero or more format items + An Object to format - Writes the display name of the event - to the writer. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - Write the event level to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object to format + An Object to format - Writes the of the - to the . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - - - - Write the caller location line number to the output - - - Writes the value of the for - the event to the output writer. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - Write the caller location line number to the output + Logs a formatted message string with the level. - that will receive the formatted result. - the event being logged + A String containing zero or more format items + An Object to format + An Object to format + An Object to format - Writes the value of the for - the to the output . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - - - - - Converter for logger name - - - Outputs the of the event. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - Converter to output and truncate '.' separated strings + 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 - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. - Subclasses should override the method to - return the fully qualified string. + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - Nicko Cadell + + - + - Initialize the converter + Checks if this logger is enabled for the level. + + true if this logger is enabled for events, false otherwise. + - 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. + 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 ); + - If any of the configuration properties are modified then - must be called again. + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. - - - - - 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. + If you are worried about speed (who isn't), then you should write: + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + - Return the fully qualified '.' (dot/period) separated string. + 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. + + - + - Convert the pattern to the rendered message + Checks if this logger is enabled for the level. - that will receive the formatted result. - the event being logged + + true if this logger is enabled for events, false otherwise. + - Render the to the precision - specified by the property. + For more information see . + + + - + - The fully qualified type of the NamedPatternConverter class. + Checks if this logger is enabled for the level. + + true if this logger is enabled for events, false otherwise. + - Used by the internal logger to record the Type of the - log message. + For more information see . + + + - + - Gets the fully qualified name of the logger + Checks if this logger is enabled for the level. - the event being logged - The fully qualified logger name + + true if this logger is enabled for events, false otherwise. + - - Returns the of the . - + For more information see . + + + - + - Writes the event message to the output + Checks if this logger is enabled for the level. + + true if this logger is enabled for events, false otherwise. + - - Uses the method - to write out the event message. - + For more information see . - Nicko Cadell + + + - + - Writes the event message to the output + A flexible layout configurable with pattern string that re-evaluates on each call. - that will receive the formatted result. - the event being logged - - Uses the method - to write out the event message. - + 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> + - + - Write the method name to the output + The header PatternString + + + + + The footer PatternString + + + + + Constructs a DynamicPatternLayout using the DefaultConversionPattern - Writes the caller location to - the output. + The default pattern just produces the application supplied message. - Nicko Cadell - + - Write the method name to the output + Constructs a DynamicPatternLayout using the supplied conversion pattern - that will receive the formatted result. - the event being logged + the pattern to use - - Writes the caller location to - the output. - - + - Converter to include event NDC + The header for the layout format. + the layout header - Outputs the value of the event property named NDC. - - - The should be used instead. + The Header text will be appended before any logging events + are formatted and appended. + The pattern will be formatted on each get operation. - Nicko Cadell - + - Write the event NDC to the output + The footer for the layout format. - that will receive the formatted result. - the event being logged + the layout footer - 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. + 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. - + - Property pattern converter + A Layout that renders only the Exception text from the logging event - Writes out the value of a named property. The property name - should be set in the - property. + A Layout that renders only the Exception text from the logging event. - If the is set to null - then all the properties are written as key value pairs. + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). Nicko Cadell + Gert Driesen - + - Write the property value to the output + Default constructor - 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. + Constructs a ExceptionLayout - + - Converter to output the relative time of the event + Activate component options - Converter to output the time of the event relative to the start of the program. + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. - Nicko Cadell - + - Write the relative time to the output + Gets the exception text from the logging event - that will receive the formatted result. + The TextWriter to write the formatted event to 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 . + Write the exception string to the . + The exception string is retrieved from . - - - 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 + Interface implemented by layout objects - Writes the to the output writer, using format: - type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + 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. - Adam Davies + Nicko Cadell + Gert Driesen - + - Write the caller stack frames to the output + Implement this method to create your own layout format. + The TextWriter to write the formatted event to + The event to format - Writes the to the output writer, using format: - type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + 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(); + - Michael Cromwell - + - Initialize the converter + The content type output by this layout. + The content type - 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. + The content type output by this layout. - If any of the configuration properties are modified then - must be called again. + This is a MIME type e.g. "text/plain". - + - Write the strack frames to the output + The header for the layout format. - that will receive the formatted result. - the event being logged + the layout header - Writes the to the output writer. + The Header text will be appended before any logging events + are formatted and appended. - - - 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. + The footer for the layout format. + the layout footer - Used by the internal logger to record the Type of the - log message. + + The Footer text will be appended after all the logging events + have been formatted and appended. + - + - The fully qualified type of the StackTraceDetailPatternConverter class. + Flag indicating if this layout handle exceptions + false if this layout handles exceptions - Used by the internal logger to record the Type of the - log message. + + 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. + - + - Converter to include event thread name + Interface for raw layout objects - Writes the to the output. + 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 - + - Write the ThreadName to the output + Implement this method to create your own layout format. - that will receive the formatted result. - the event being logged + The event to format + returns the formatted event - Writes the to the . + Implement this method to create your own layout format. - + - Pattern converter for the class name + Adapts any to a - Outputs the of the event. + Where an is required this adapter + allows a to be specified. Nicko Cadell + Gert Driesen - + - Gets the fully qualified name of the class + The layout to adapt - the event being logged - The fully qualified type name for the caller location + + + + Construct a new adapter + + the layout to adapt - Returns the of the . + Create the adapter for the specified . - - - 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 + Format the logging event as an object. + The event to format + returns the formatted event - Date pattern converter, uses a to format - the date of a . - - - Uses a to format the - in Universal time. + Format the logging event as an object. - See the for details on the date pattern syntax. + Uses the object supplied to + the constructor to perform the formatting. - - Nicko Cadell - + - Write the TimeStamp to the output + Extend this abstract class to create your own log layout format. - that will receive the formatted result. - the event being logged - Pass the to the - for it to render it to the writer. + This is the base implementation of the + interface. Most layout objects should extend this class. + + + - The passed is in the local time zone, this is converted - to Universal time before it is rendered. + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + - + Nicko Cadell + Gert Driesen - + - The fully qualified type of the UtcDatePatternConverter class. + The header text - Used by the internal logger to record the Type of the - log message. + + See for more information. + - + - A flexible layout configurable with pattern string that re-evaluates on each call. + The footer text - 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> - + + 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. + @@ -18471,8 +17860,8 @@ appdomain - Used to output the friendly name of the AppDomain where the - logging event was generated. + Used to output the friendly name of the AppDomain where the + logging event was generated. @@ -18536,89 +17925,89 @@ 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. - - - + 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. - - - + + 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 @@ -18627,72 +18016,72 @@ 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. - - - + + 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. + 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". - + + 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". + @@ -18703,69 +18092,69 @@ 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. - - - + + 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. - - - + + 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 @@ -18778,192 +18167,192 @@ 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. - - - - - - + + 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 - + + 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,...) - + + + + 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. - - - + + 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. - - + 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. - - - + + 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 . - - - + 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 @@ -18976,14 +18365,14 @@ X Equivalent to mdc - - % - - - The sequence %% outputs a single percent sign. - - - + + % + + + The sequence %% outputs a single percent sign. + + + The single letter patterns are deprecated in favor of the @@ -19027,82 +18416,82 @@ 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    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.
    @@ -19152,2175 +18541,3153 @@ Douglas de la Torre Daniel Cazzulino
    - + - Extend this abstract class to create your own log layout format. + Default pattern string for log output. - This is the base implementation of the - interface. Most layout objects should extend this class. + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + A detailed conversion pattern + - - - Subclasses must implement the - method. - - Subclasses should set the in their default - constructor. + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. - - Nicko Cadell - Gert Driesen - + - Interface implemented by layout objects + Internal map of converter identifiers to converter types. - An object is used to format a - as text. The method is called by an - appender to transform the into a string. + 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 + + - The layout can also supply and - text that is appender before any events and after all the events respectively. + Defines the builtin global rules. - Nicko Cadell - Gert Driesen - + - Implement this method to create your own layout format. + Constructs a PatternLayout using the DefaultConversionPattern - 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. + The default pattern just produces the application supplied message. - 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 . + 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. - - StringWriter writer = new StringWriter(); - Layout.Format(writer, loggingEvent); - string formattedEvent = writer.ToString(); - - + - The content type output by this layout. + Constructs a PatternLayout using the supplied conversion pattern - The content type + the pattern to use - The content type output by this layout. + 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. - This is a MIME type e.g. "text/plain". + When using this constructor the method + need not be called. This may not be the case when using a subclass. - + - The header for the layout format. + The pattern formatting string - the layout header - The Header text will be appended before any logging events - are formatted and appended. + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. - + - The footer for the layout format. + Create the pattern parser instance - the layout footer + the pattern to parse + The that will format the event - The Footer text will be appended after all the logging events - have been formatted and appended. + Creates the used to parse the conversion string. Sets the + global and instance rules on the . - + - Flag indicating if this layout handle exceptions + Initialize layout options - 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. + 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 header text + Produces a formatted string as specified by the conversion pattern. + the event being logged + The TextWriter to write the formatted event to - See for more information. + Parse the using the patter format + specified in the property. - + - The footer text + Add a converter to this PatternLayout + the converter info - See for more information. + This version of the method is used by the configurator. + Programmatic users should use the alternative method. - + - Flag indicating if this layout handles exceptions + Add a converter to this PatternLayout + the name of the conversion pattern for this converter + the type of the converter - false if this layout handles exceptions + 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. - + - Empty default constructor + Write the event appdomain name to the output - Empty default constructor + Writes the to the output writer. + Daniel Cazzulino + Nicko Cadell - + - Activate component options + Write the event appdomain name to the output + that will receive the formatted result. + the event being logged - 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. + Writes the to the output . - + - Implement this method to create your own layout format. + Converter for items in the ASP.Net Cache. - The TextWriter to write the formatted event to - The event to format - This method is called by an appender to format - the as text. + Outputs an item from the . + Ron Grabowski - + - Convenience method for easily formatting the logging event into a string variable. + 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. - Creates a new StringWriter instance to store the formatted logging event. + + 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. + - + - The content type output by this layout. + Converter for items in the . - 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. + Outputs an item from the . + Ron Grabowski - + - The header for the layout format. + Write the ASP.Net HttpContext item to the output - the layout header + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. - The Header text will be appended before any logging events - are formatted and appended. + Writes out the value of a named property. The property name + should be set in the + property. - + - The footer for the layout format. + Abstract class that provides access to the current HttpContext () that + derived classes need. - the layout footer - - The Footer text will be appended after all the logging events - have been formatted and appended. - + This class handles the case when HttpContext.Current is null by writing + to the writer. + Ron Grabowski - + - Flag indicating if this layout handles exceptions + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. - 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. - - + that will receive the formatted result. + The on which the pattern converter should be executed. + The under which the ASP.Net request is running. - + - Default pattern string for log output. + Converter for items in the ASP.Net Cache. - Default pattern string for log output. - Currently set to the string "%message%newline" - which just prints the application supplied message. + Outputs an item from the . + Ron Grabowski - + - A detailed conversion pattern + 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. - A conversion pattern which includes Time, Thread, Logger, and Nested Context. - Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + Writes out the value of a named property. The property name + should be set in the + property. - + - Internal map of converter identifiers to converter types. + Converter for items in the ASP.Net Cache. - This static map is overridden by the m_converterRegistry instance map + Outputs an item from the . + Ron Grabowski - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternLayout only - - - + - Initialize the global registry + 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. - Defines the builtin global rules. + 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. - + - Constructs a PatternLayout using the DefaultConversionPattern + Date pattern converter, uses a to format + the date of a . - 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. + Render the to the writer as a string. - 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. + 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. + + + - When using this constructor the method - need not be called. This may not be the case when using a subclass. + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + Nicko Cadell - + - Create the pattern parser instance + The used to render the date to a string - 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 . + The used to render the date to a string - + - Initialize layout options + Initialize the converter pattern based on the property. This is part of the delayed object - activation scheme. The method must + activation scheme. The method must be called on this object after the configuration properties have - been set. Until is called this + 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. + must be called again. - + - Produces a formatted string as specified by the conversion pattern. + Convert the pattern into the rendered message + that will receive the formatted result. the event being logged - The TextWriter to write the formatted event to - Parse the using the patter format - specified in the property. + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. - + - Add a converter to this PatternLayout + The fully qualified type of the DatePatternConverter class. - the converter info - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - + Used by the internal logger to record the Type of the + log message. - + - Add a converter to this PatternLayout + Write the exception text to the output - 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 . + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. - The specified must extend the - type. + 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 - + - The pattern formatting string + Default constructor + + + + + Write the exception text to the output + that will receive the formatted result. + the event being logged - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. + 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 + + - - - The header PatternString - - - - - The footer PatternString - - - + - Constructs a DynamicPatternLayout using the DefaultConversionPattern + Writes the caller location file name to the output - The default pattern just produces the application supplied message. + Writes the value of the for + the event to the output writer. + Nicko Cadell - + - Constructs a DynamicPatternLayout using the supplied conversion pattern + Write the caller location file name to the output - the pattern to use + that will receive the formatted result. + the event being logged + + Writes the value of the for + the to the output . + - + - The header for the layout format. + Write the caller location info to the output - the layout header - The Header text will be appended before any logging events - are formatted and appended. + Writes the to the output writer. - The pattern will be formatted on each get operation. + Nicko Cadell - + - The footer for the layout format. + Write the caller location info to the output - the layout footer + that will receive the formatted result. + the event being logged - The Footer text will be appended after all the logging events - have been formatted and appended. + Writes the to the output writer. - The pattern will be formatted on each get operation. - + - A Layout that renders only the Exception text from the logging event + Writes the event identity to the output - 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. ). + Writes the value of the to + the output writer. + Daniel Cazzulino Nicko Cadell - Gert Driesen - + - Default constructor + Writes the event identity to the output + that will receive the formatted result. + the event being logged - Constructs a ExceptionLayout + Writes the value of the + to + the output . - + - Activate component options + Write the event level to the output - Part of the component activation - framework. - - - This method does nothing as options become effective immediately. + Writes the display name of the event + to the writer. + Nicko Cadell - + - Gets the exception text from the logging event + Write the event level to the output - The TextWriter to write the formatted event to + that will receive the formatted result. the event being logged - Write the exception string to the . - The exception string is retrieved from . + Writes the of the + to the . - + - Interface for raw layout objects + Write the caller location line number to the output - 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. + Writes the value of the for + the event to the output writer. Nicko Cadell - Gert Driesen - + - Implement this method to create your own layout format. + Write the caller location line number to the output - The event to format - returns the formatted event + that will receive the formatted result. + the event being logged - Implement this method to create your own layout format. + Writes the value of the for + the to the output . - + - Adapts any to a + Converter for logger name - Where an is required this adapter - allows a to be specified. + Outputs the of the event. Nicko Cadell - Gert Driesen - + - The layout to adapt + Gets the fully qualified name of the logger - - - - Construct a new adapter - - the layout to adapt + the event being logged + The fully qualified logger name - Create the adapter for the specified . + Returns the of the . - + - Format the logging event as an object. + Writes the event message to the output - 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. + Uses the method + to write out the event message. + Nicko Cadell - + - Type converter for the interface + Writes the event message to the output + that will receive the formatted result. + the event being logged - Used to convert objects to the interface. - Supports converting from the interface to - the interface using the . + Uses the method + to write out the event message. - Nicko Cadell - Gert Driesen - + - Interface supported by type converters + Write the method name to the output - This interface supports conversion from arbitrary types - to a single target type. See . + Writes the caller location to + the output. Nicko Cadell - Gert Driesen - + - Can the source type be converted to the type supported by this object + Write the method name to the output - the type to convert - true if the conversion is possible + that will receive the formatted result. + the event being logged - Test if the can be converted to the - type supported by this converter. + Writes the caller location to + the output. - + - Convert the source object to the type supported by this object + Converter to output and truncate '.' separated strings - the object to convert - the converted object - Converts the to the type supported - by this converter. + 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 - + - Can the sourceType be converted to an + Initialize the converter - 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 . + 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 value to a object + Get the fully qualified string data - the value to convert - the object + the event being logged + the fully qualified name - 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. + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. - + - Extract the value of a property from the + Convert the pattern to the rendered message + that will receive the formatted result. + the event being logged - - Extract the value of a property from the - + Render the to the precision + specified by the property. - Nicko Cadell - + - Constructs a RawPropertyLayout + The fully qualified type of the NamedPatternConverter class. + + Used by the internal logger to record the Type of the + log message. + - + - Lookup the property for + Converter to include event NDC - 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. + Outputs the value of the event property named NDC. + + + The should be used instead. + Nicko Cadell - + - The name of the value to lookup in the LoggingEvent Properties collection. + Write the event NDC to the output - - Value to lookup in the LoggingEvent Properties collection - + that will receive the formatted result. + the event being logged - String name of the property to lookup in the . + 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. - + - Extract the date from the + Abstract class that provides the formatting functionality that + derived classes need. - - Extract the date from the - + 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 - + - Constructs a RawTimeStampLayout + Initializes a new instance of the class. - + - Gets the as a . + Flag indicating if this converter handles the logging event exception - The event to format - returns the time stamp + false if this converter handles the logging event exception - Gets the as a . + 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. - The time stamp is in local time. To format the time stamp - in universal time use . + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. - + - Extract the date from the + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. - - - Extract the date from the - - - Nicko Cadell - Gert Driesen + that will receive the formatted result. + The on which the pattern converter should be executed. - + - Constructs a RawUtcTimeStampLayout + 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. - + - Gets the as a . + Flag indicating if this converter handles exceptions - 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 . - + false if this converter handles exceptions - + - A very simple layout + Property pattern converter - SimpleLayout consists of the level of the log statement, - followed by " - " and then the log message itself. For example, - - DEBUG - Hello world - + 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 - Gert Driesen - - - - Constructs a SimpleLayout - - + - Initialize layout options + Write the property value to the output + that will receive the formatted result. + the event being logged - 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. + Writes out the value of a named property. The property name + should be set in the + property. - If any of the configuration properties are modified then - must be called again. + If the is set to null + then all the properties are written as key value pairs. - + - Produces a simple formatted output. + Converter to output the relative time of the event - 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. + Converter to output the time of the event relative to the start of the program. + Nicko Cadell - - - 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. + Write the relative time to the output + that will receive the formatted result. + the event being logged - This is an abstract class that must be subclassed by an implementation - to conform to a specific schema. - - - Deriving classes must implement the method. + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . - Nicko Cadell - Gert Driesen - + - Protected constructor to support subclasses + 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 - Initializes a new instance of the class - with no location info. + Writes the to the output writer, using format: + type3.MethodCall3(type param,...) > type2.MethodCall2(type param,...) > type1.MethodCall1(type param,...) + Adam Davies - + - Protected constructor to support subclasses + The fully qualified type of the StackTraceDetailPatternConverter class. - - 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. - + Used by the internal logger to record the Type of the + log message. - + - Initialize layout options + Write the caller stack frames to the output - 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. + Writes the to the output writer, using format: + type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1 + Michael Cromwell - + - Produces a formatted string. + Initialize the converter - The event being logged. - The TextWriter to write the formatted event to - Format the and write it to the . + 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. - This method creates an that writes to the - . The is passed - to the method. Subclasses should override the - method rather than this method. + If any of the configuration properties are modified then + must be called again. - + - Does the actual writing of the XML. + Write the strack frames to the output - The writer to use to output the event to. - The event to write. + that will receive the formatted result. + the event being logged - Subclasses should override this method to format - the as XML. + Writes the to the output writer. - + - Flag to indicate if location information should be included in - the XML events. + Returns the Name of the method + + This method was created, so this class could be used as a base class for StackTraceDetailPatternConverter + string - + - The string to replace invalid chars with + The fully qualified type of the StackTracePatternConverter class. + + Used by the internal logger to record the Type of the + log message. + - + - Gets a value indicating whether to include location information in - the XML events. + Converter to include event thread name - - 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. + Writes the to the output. + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. + Writes the to the . - + - The string to replace characters that can not be expressed in XML with. + Pattern converter for the class name + - 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. + Outputs the of the event. -
    + Nicko Cadell
    - + - Gets the content type output by this layout. + Gets the fully qualified name of the class - - As this is the XML layout, the value is always "text/xml". - + the event being logged + The fully qualified type name for the caller location - As this is the XML layout, the value is always "text/xml". + Returns the of the . - + - Constructs an XmlLayout + Converter to include event user name + Douglas de la Torre + Nicko Cadell - + - Constructs an XmlLayout. + Convert the pattern to the rendered message - - - 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. - - + that will receive the formatted result. + the event being logged - + - Initialize layout options + Write the TimeStamp to the output - 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. + Date pattern converter, uses a to format + the date of a . - If any of the configuration properties are modified then - must be called again. + Uses a to format the + in Universal time. - Builds a cache of the element names + See the for details on the date pattern syntax. + + Nicko Cadell - + - Does the actual writing of the XML. + Write the TimeStamp to the output - The writer to use to output the event to. - The event to write. + that will receive the formatted result. + the event being logged - Override the base class method - to write the to the . + 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 prefix to use for all generated element names + The fully qualified type of the UtcDatePatternConverter class. + + Used by the internal logger to record the Type of the + log message. + - + - The prefix to use for all element names + Type converter for the interface - 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. + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + Nicko Cadell + Gert Driesen - + - Set whether or not to base64 encode the message. + Can the sourceType be converted to an + the source to be to be converted + true if the source type can be converted to - 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. + Test if the can be converted to a + . Only is supported + as the . - + - Set whether or not to base64 encode the property values. + Convert the value to a object + the value to convert + the object - 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. + 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. - + - Layout that formats the log events as XML elements compatible with the log4j schema + Extract the value of a property from the - Formats the log events according to the http://logging.apache.org/log4j schema. + Extract the value of a property from the Nicko Cadell - - - The 1st of January 1970 in UTC - - - - - Constructs an XMLLayoutSchemaLog4j - - - + - Constructs an XMLLayoutSchemaLog4j. + Constructs a RawPropertyLayout - - - 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 name of the value to lookup in the LoggingEvent Properties collection. - the writer to use - the event to write + + Value to lookup in the LoggingEvent Properties collection + - Generate XML that is compatible with the log4j schema. + String name of the property to lookup in the . - + - The version of the log4j schema to use. + Lookup the property for + The event to format + returns property value - Only version 1.2 of the log4j schema is supported. + 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 default object Renderer. + Extract the date from the - The default renderer supports rendering objects and collections to strings. - - - See the method for details of the output. + Extract the date from the Nicko Cadell Gert Driesen - + - Implement this interface in order to render objects as strings + Constructs a RawTimeStampLayout - - - 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 + Gets the as a . - The map used to lookup renderers - The object to render - The writer to render to + The event to format + returns the time stamp - Render the object to a - string. + Gets the as a . - 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 time stamp is in local time. To format the time stamp + in universal time use . - + - Default constructor + Extract the date from the - Default constructor + Extract the date from the + Nicko Cadell + Gert Driesen - + - Render the object to a string + Constructs a RawUtcTimeStampLayout - 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 + Gets the as a . - The map used to lookup renderers - the array to render - The writer to render to + The event to format + returns the time stamp - 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}. + Gets the as a . - If the array is not one dimensional the - Array.ToString() is returned. + The time stamp is in universal time. To format the time stamp + in local time use . - + - Render the enumerator argument into a string + A very simple layout - 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}. + 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 - + - Render the DictionaryEntry argument into a string + Constructs a SimpleLayout - 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 . + Initialize layout options - Maintains a mapping between types that require special - rendering and the that - is used to render them. + 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. - The method is used to render an - object using the appropriate renderers defined in this map. + If any of the configuration properties are modified then + must be called again. - Nicko Cadell - Gert Driesen - + - Default Constructor + Produces a simple formatted output. + the event being logged + The TextWriter to write the formatted event to - Default constructor. - - + 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 + + - Render using the appropriate renderer. + Constructs an XmlLayout + + + + + Constructs an XmlLayout. - 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 . + 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. - + - Render using the appropriate renderer. + The prefix to use for all element names - 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 . + 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. - + - Gets the renderer for the specified object type + Set whether or not to base64 encode the message. - 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. - + + 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. + - + - Gets the renderer for the specified type + Set whether or not to base64 encode the property values. - 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. + 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. - + - Internal function to recursively search interfaces + Initialize layout options - the type to lookup the renderer for - the renderer for the specified type + + + 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 + + - + - Clear the map of renderers + Does the actual writing of the XML. + The writer to use to output the event to. + The event to write. - Clear the custom renderers defined by using - . The - cannot be removed. + Override the base class method + to write the to the . - + - Register an for . + The prefix to use for all generated element names + + + + + Layout that formats the log events as XML elements. - 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. + 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 - + - Get the default renderer instance + Protected constructor to support subclasses - the default renderer - Get the default renderer + Initializes a new instance of the class + with no location info. - + - Interface implemented by logger repository plugins. + Protected constructor to support subclasses - 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 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. - The log4net.Config.PluginAttribute can be used to - attach plugins to repositories created using configuration - attributes. + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. - Nicko Cadell - Gert Driesen - + - Attaches the plugin to the specified . + Gets a value indicating whether to include location information in + the XML events. - The that this plugin should be attached to. + + true if location information should be included in the XML + events; otherwise, false. + - A plugin may only be attached to a single repository. + 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. - This method is called when the plugin is attached to the repository. + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. - + - Is called when the plugin is to shutdown. - + The string to replace characters that can not be expressed in XML with. - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. + 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 name of the plugin. + Initialize layout options - - 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. + 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. - + - A strongly-typed collection of objects. + Gets the content type output by this layout. - 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. - + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + - + - Initializes a new instance of the PluginCollection class - that is empty and has the default initial capacity. + 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. + + - + - Initializes a new instance of the PluginCollection class - that has the specified initial capacity. + Does the actual writing of the XML. - - The number of elements that the new PluginCollection is initially capable of storing. - + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + - + - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified PluginCollection. + Flag to indicate if location information should be included in + the XML events. - 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 string to replace invalid chars with - 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. + Layout that formats the log events as XML elements compatible with the log4j schema - The collection whose elements are copied to the new list. + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell - + - Allow subclasses to avoid our default constructors + The 1st of January 1970 in UTC - - - + - Copies the entire PluginCollection to a one-dimensional - array. + Constructs an XMLLayoutSchemaLog4j - 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. + Constructs an XMLLayoutSchemaLog4j. - The one-dimensional array to copy to. - The zero-based index in at which copying begins. + + + 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. + + - + - Adds a to the end of the PluginCollection. + The version of the log4j schema to use. - The to be added to the end of the PluginCollection. - The index at which the value has been added. + + + Only version 1.2 of the log4j schema is supported. + + - + - Removes all elements from the PluginCollection. + Actually do the writing of the xml + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + - + - Creates a shallow copy of the . + The log4net Logical Thread Context. - A new with a shallow copy of the collection data. + + + 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 - + - Determines whether a given is in the PluginCollection. + Private Constructor. - The to check for. - true if is found in the PluginCollection; otherwise, false. + + + Uses a private access modifier to prevent instantiation of this class. + + - + - Returns the zero-based index of the first occurrence of a - in the PluginCollection. + The thread properties map - The to locate in the PluginCollection. - - The zero-based index of the first occurrence of - in the entire PluginCollection, if found; otherwise, -1. - + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + - + - Inserts an element into the PluginCollection at the specified index. + The thread stacks - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - + + stack map + + + + The logical thread stacks. + + - + - Removes the first occurrence of a specific from the PluginCollection. + The thread context properties instance - 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 thread context stacks instance - 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. + This class is used by client applications to request logger instances. - 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. + + + 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 - + - Adds the elements of a collection to the current PluginCollection. + Initializes a new instance of the class. - The collection whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. + + Uses a private access modifier to prevent instantiation of this class. + - + + Returns the named logger if it exists. - Sets the capacity to the actual number of elements. + 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. - - - is less than zero. - -or- - is equal to or greater than . - - - - - is less than zero. - -or- - is equal to or greater than . - - - + + Get the currently defined loggers. - Gets the number of elements actually contained in the PluginCollection. + 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. - Gets a value indicating whether access to the collection is synchronized (thread-safe). + Retrieves or creates a named logger. - false, because the backing type is an array, which is never thread-safe. + + + 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. - + - Gets an object that can be used to synchronize access to the collection. + Returns the named logger if it exists. - - An object that can be used to synchronize access to the collection. - + + + 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. + - + - Gets or sets the at the specified index. + Returns the named logger if it exists. - - 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 . - + + + 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. + - + - Gets a value indicating whether the collection has a fixed size. + Returns all the currently defined loggers in the specified repository. - true if the collection has a fixed size; otherwise, false. The default is false. + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. - + - Gets a value indicating whether the IList is read-only. + Returns all the currently defined loggers in the specified assembly's repository. - true if the collection is read-only; otherwise, false. The default is false. + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. - + - Gets or sets the number of elements the PluginCollection can contain. + Retrieves or creates a named logger. - - The number of elements the PluginCollection can contain. - + + + 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. - + - Supports type-safe iteration over a . + 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. - + - Advances the enumerator to the next element in the collection. + Shorthand for . - - 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. - + + 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. - + - Sets the enumerator to its initial position, before the first element in the collection. + 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. - + - Gets the current element in the collection. + 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. - + - Type visible only to our subclasses - Used to access protected constructor + Shuts down the log4net system. - - - - - A value + + + 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. + - + - Supports simple iteration over a . + 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. + + - + - Initializes a new instance of the Enumerator class. + 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. + + + + + 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. + + + + + + + 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"); + } + + - + - Advances the enumerator to the next element in the collection. + Pushes a new context message. + The new context message string format. + Arguments to be passed into messageFormat. - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. + An that can be used to clean up + the context stack. - - The collection was modified after the enumerator was created. - + + + + 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"); + } + + - + - Sets the enumerator to its initial position, before the first element in the collection. + 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. + + - + - Gets the current element in the collection. + Forces the stack depth to be at most . - - The current element in the collection. - - - - + 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. + + - + - Map of repository plugins. + The default object Renderer. - This class is a name keyed map of the plugins that are - attached to a repository. + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. Nicko Cadell Gert Driesen - + - Constructor + Default 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. + Default constructor - + - Adds a to the map. + Render the object to a string - The to add to the map. + The map used to lookup renderers + The object to render + The writer to render to - The will be attached to the repository when added. + Render the object to a string. - 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. + 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() + + + - + - Removes a from the map. + Render the array argument into a string - The to remove from the map. + The map used to lookup renderers + the array to render + The writer to render to - Remove a specific plugin from this map. - + 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. + - + - Gets a by name. + Render the enumerator argument into a string - The name of the to lookup. - - The from the map with the name specified, or - null if no plugin is found. - + The map used to lookup renderers + the enumerator to render + The writer to render to - Lookup a plugin by name. If the plugin is not found null - will be 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}. + - + - Gets all possible plugins as a list of objects. + Render the DictionaryEntry argument into a string - All possible plugins as a list of objects. + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to - Get a collection of all the plugins defined in this map. - + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + - + - Base implementation of + Implement this interface in order to render objects as strings - Default abstract implementation of the - interface. This base class can be used by implementors - of the interface. + 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 - + - Constructor + Render the object to a string - the name of the plugin + The map used to lookup renderers + The object to render + The writer to render to - Initializes a new Plugin with the specified name. + + 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. + - + - Attaches this plugin to a . + Map class objects to an . - The that this plugin should be attached to. - A plugin may only be attached to a single repository. + Maintains a mapping between types that require special + rendering and the that + is used to render them. - This method is called when the plugin is attached to the repository. + The method is used to render an + object using the appropriate renderers defined in this map. + Nicko Cadell + Gert Driesen - + - Is called when the plugin is to shutdown. + Render using the appropriate renderer. + the object to render to a string + the object rendered as a string - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . - + - The name of this plugin. + 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 . + + - + - The repository this plugin is attached to. + 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 - + - Gets or sets the name of the plugin. + Get the default renderer instance - - The name of the plugin. - + the default renderer - 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. + Get the default renderer - + - The repository for this plugin + Clear the map of renderers - - The that this plugin is attached to. - - Gets or sets the that this plugin is - attached to. + Clear the custom renderers defined by using + . The + cannot be removed. - + - Plugin that listens for events from the + Register an for . + the type that will be rendered by + the renderer for - 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. + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. - Nicko Cadell - Gert Driesen - + - Default constructor + Interface implemented by logger repository plugins. - Initializes a new instance of the class. + 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 property must be set. + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + Nicko Cadell + Gert Driesen - + - Construct with sink Uri. + Gets the name of the plugin. - The name to publish the sink under in the remoting infrastructure. - See for more details. + + The name of the plugin. + - Initializes a new instance of the class - with specified name. + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. - + - Attaches this plugin to a . + Attaches the plugin to the specified . The that this plugin should be attached to. @@ -21332,1896 +21699,1803 @@ - + Is called when the plugin is to shutdown. - When the plugin is shutdown the remote logging - sink is disconnected. + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. - + - The fully qualified type of the RemoteLoggingServerPlugin class. + Interface used to create plugins. - Used by the internal logger to record the Type of the - log message. + + Interface used to create a plugin. + + Nicko Cadell + Gert Driesen - + - Gets or sets the URI of this sink. + Creates the plugin object. - - The URI of this sink. - + the new plugin instance - This is the name under which the object is marshaled. - + Create and return a new plugin instance. - + - Delivers objects to a remote sink. + A strongly-typed collection of objects. - - - Internal class used to listen for logging events - and deliver them to the local repository. - - + Nicko Cadell - + - Constructor + Supports type-safe iteration over a . - The repository to log to. - - - Initializes a new instance of the for the - specified . - - + - + - Logs the events to the repository. + Gets the current element in the collection. - The events to log. - - - The events passed are logged to the - - - + - Obtains a lifetime service object to control the lifetime - policy for this instance. + Advances the enumerator to the next element in the collection. - 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. - - + + 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. + - + - The underlying that events should - be logged to. + Sets the enumerator to its initial position, before the first element in the collection. - + - Default implementation of + Creates a read-only wrapper for a PluginCollection instance. - - - This default implementation of the - interface is used to create the default subclass - of the object. - - - Nicko Cadell - Gert Driesen + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + - + - Interface abstracts creation of instances + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. - - - 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 - + + + 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. + + + - Create a new instance + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. - 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. - - + The PluginCollection whose elements are copied to the new collection. - + - Default constructor + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. - - - Initializes a new instance of the class. - - + The array whose elements are copied to the new list. - + - Create a new instance + 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. + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value - 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 + Allow subclasses to avoid our default constructors - - - This subclass has no additional behavior over the - class but does allow instances - to be created. - - + + - + - Implementation of used by + Gets the number of elements actually contained in the PluginCollection. - - - 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. + Copies the entire PluginCollection to a one-dimensional + array. - 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. - - + The one-dimensional array to copy to. - + - Add to the list of appenders of this - Logger instance. + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. - 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. - - + The one-dimensional array to copy to. + The zero-based index in at which copying begins. - + - Look for the appender named as name + Gets a value indicating whether access to the collection is synchronized (thread-safe). - 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. - - + false, because the backing type is an array, which is never thread-safe. - + - Remove all previously added appenders from this Logger instance. + Gets an object that can be used to synchronize access to the collection. - - - Remove all previously added appenders from this Logger instance. - - - This is useful when re-reading configuration information. - - + + An object that can be used to synchronize access to the collection. + - + - Remove the appender passed as parameter form the list of appenders. + Gets or sets the at the specified index. - 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. - - + + 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 . + - + - Remove the appender passed as parameter form the list of appenders. + Adds a to the end of the PluginCollection. - 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. - - + The to be added to the end of the PluginCollection. + The index at which the value has been added. - + - This generic form is intended to be used by wrappers. + Removes all elements from the PluginCollection. - 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. + Creates a shallow copy of the . - The event being logged. - - - Logs the specified logging event through this logger. - - - This method must not throw any exception to the caller. - - + A new with a shallow copy of the collection data. - + - Checks if this logger is enabled for a given passed as parameter. + Determines whether a given is in the PluginCollection. - The level to check. + 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. - true if this logger is enabled for level, otherwise false. + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. - - - 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. + Inserts an element into the PluginCollection at the specified index. - 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. - - + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + - + - Closes all attached appenders implementing the interface. + Removes the first occurrence of a specific from the PluginCollection. - - - Used to ensure that the appenders are correctly shutdown. - - + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + - + - This is the most generic printing method. This generic form is intended to be used by wrappers + Removes the element at the specified index of the PluginCollection. - 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 . - - + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + - + - Creates a new logging event and logs the event without further checks. + Gets a value indicating whether the collection has a fixed size. - 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. - - + true if the collection has a fixed size; otherwise, false. The default is false. - + - Creates a new logging event and logs the event without further checks. + Gets a value indicating whether the IList is read-only. - The event being logged. - - - Delivers the logging event to the attached appenders. - - + true if the collection is read-only; otherwise, false. The default is false. - + - The fully qualified type of the Logger class. + Returns an enumerator that can iterate through the PluginCollection. + An for the entire PluginCollection. - + - The name of this logger. + Gets or sets the number of elements the PluginCollection can contain. + + The number of elements the PluginCollection can contain. + - + - The assigned level of this logger. + Adds the elements of another PluginCollection to the current PluginCollection. - - - The level variable need not be - assigned a value in which case it is inherited - form the hierarchy. - - + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. - + - The parent of this logger. + Adds the elements of a array to the current PluginCollection. - - - The parent of this logger. - All loggers have at least one ancestor which is the root logger. - - + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. - + - Loggers need to know what Hierarchy they are in. + Adds the elements of a collection to the current PluginCollection. - - - Loggers need to know what Hierarchy they are in. - The hierarchy that this logger is a member of is stored - here. - - + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. - + - Helper implementation of the interface + 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 . + + + - Flag indicating if child loggers inherit their parents appenders + Supports simple iteration over a . - - - 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 + Initializes a new instance of the Enumerator class. + - + - Gets or sets the parent logger in the hierarchy. + Gets the current element in the collection. - The parent logger in the hierarchy. + The current element in the collection. - - - 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. + 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. + + + + + + + + Map of repository plugins. - - 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. + This class is a name keyed map of the plugins that are + attached to a repository. + Nicko Cadell + Gert Driesen - + - Gets the effective level for this logger. + Constructor - The nearest level in the logger hierarchy. + The repository that the plugins should be attached to. - Starting from this logger, searches the logger hierarchy for a - non-null level and returns it. Otherwise, returns the level of the - root logger. + Initialize a new instance of the class with a + repository that the plugins should be attached to. - 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. + Gets a by name. - The hierarchy that this logger belongs to. + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + - This logger must be attached to a single . + Lookup a plugin by name. If the plugin is not found null + will be returned. - + - Gets or sets the assigned , if any, for this Logger. + Gets all possible plugins as a list of objects. - - The of this logger. - + All possible plugins as a list of objects. - The assigned can be null. + Get a collection of all the plugins defined in this map. - + - Get the appenders contained in this logger as an - . + Adds a to the map. - A collection of the appenders in this logger + The to add to the map. - Get the appenders contained in this logger as an - . If no appenders - can be found, then a is returned. + 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. - + - Gets the logger name. + Removes a from the map. - - The name of the logger. - + The to remove from the map. - The name of this logger + Remove a specific plugin from this map. - + - Gets the where this - Logger instance is attached to. + Base implementation of - - The that this logger belongs to. - - Gets the where this - Logger instance is attached to. + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + Nicko Cadell + Gert Driesen - + - Construct a new Logger + Constructor - the name of the logger + the name of the plugin - - Initializes a new instance of the class - with the specified name. - + Initializes a new Plugin with the specified name. - + - Delegate used to handle logger creation event notifications. + Gets or sets the name of the plugin. - The in which the has been created. - The event args that hold the instance that has been created. + + The name of the plugin. + - Delegate used to handle logger creation event notifications. + 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. - + - Provides data for the event. + Attaches this plugin to a . + The that this plugin should be attached to. - A event is raised every time a - is created. + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. - - - The created - - - + - Constructor + Is called when the plugin is to shutdown. - The that has been created. - Initializes a new instance of the event argument - class,with the specified . + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. - + - Gets the that has been created. + The repository for this plugin - The that has been created. + The that this plugin is attached to. - The that has been created. + Gets or sets the that this plugin is + attached to. - + - Hierarchical organization of loggers + The name of this plugin. - - - 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 + The repository this plugin is attached to. + + + + + Plugin that listens for events from the - Default abstract implementation of the interface. + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . - Skeleton implementation of the interface. - All types can extend this type. + When an event is received it is relogged within the attached repository + as if it had been raised locally. Nicko Cadell Gert Driesen - + - Interface implemented by logger repositories. + Default constructor - This interface is implemented by logger repositories. e.g. - . + Initializes a new instance of the class. - This interface is used by the - to obtain interfaces. + The property must be set. - Nicko Cadell - Gert Driesen - + - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. + Construct with sink Uri. - The name of the logger to lookup - The Logger object with the name specified + The name to publish the sink under in the remoting infrastructure. + See for more details. - If the names logger exists it is returned, otherwise - null is returned. + Initializes a new instance of the class + with specified name. - + - Returns all the currently defined loggers as an Array. + Gets or sets the URI of this sink. - All the defined loggers + + The URI of this sink. + - Returns all the currently defined loggers as an Array. + This is the name under which the object is marshaled. + - + - Returns a named logger instance + Attaches this plugin to a . - The name of the logger to retrieve - The logger object with the name specified + The that this plugin should be attached to. - Returns a named logger instance. + A plugin may only be attached to a single repository. - 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. + This method is called when the plugin is attached to the repository. - - Shutdown the repository + + + Is called when the plugin is to shutdown. + - 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. + When the plugin is shutdown the remote logging + sink is disconnected. - + - Reset the repositories configuration to a default state + The fully qualified type of the RemoteLoggingServerPlugin class. - - 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. - + Used by the internal logger to record the Type of the + log message. - + - Log the through this repository. + Delivers objects to a remote sink. - 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. + Internal class used to listen for logging events + and deliver them to the local repository. - + - Returns all the Appenders that are configured as an Array. + Constructor - All the Appenders + The repository to log to. - Returns all the Appenders that are configured as an Array. + Initializes a new instance of the for the + specified . - + - The name of the repository + Logs the events to the repository. - - The name of the repository - + The events to log. - The name of the repository. + The events passed are logged to the - + - RendererMap accesses the object renderer map for this repository. + Obtains a lifetime service object to control the lifetime + policy for this instance. - - RendererMap accesses the object renderer map for this repository. - + null to indicate that this instance should live forever. - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. - + - The plugin map for this repository. + The underlying that events should + be logged to. - - 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 + Default implementation of - - The threshold for all events in this repository - - The threshold for all events in this repository. + This default implementation of the + interface is used to create the default subclass + of the object. + Nicko Cadell + Gert Driesen - + - Flag indicates if this repository has been configured. + Default constructor - - Flag indicates if this repository has been configured. - - Flag indicates if this repository has been configured. + Initializes a new instance of the class. - - - Collection of internal messages captured during the most - recent configuration process. - - - + - Event to notify that the repository has been shutdown. + Create a new instance - - Event to notify that the repository has been shutdown. - + The that will own the . + The name of the . + The instance for the specified name. - Event raised when the repository has been shutdown. + 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. - + - Event to notify that the repository has had its configuration reset. + Default internal subclass of - - Event to notify that the repository has had its configuration reset. - - Event raised when the repository's configuration has been - reset to default. + This subclass has no additional behavior over the + class but does allow instances + to be created. - + - Event to notify that the repository has had its configuration changed. + Construct a new Logger - - Event to notify that the repository has had its configuration changed. - + the name of the logger - Event raised when the repository's configuration has been changed. + Initializes a new instance of the class + with the specified name. - + - Repository specific properties + Delegate used to handle logger creation event notifications. - - Repository specific properties - + The in which the has been created. + The event args that hold the instance that has been created. - These properties can be specified on a repository specific basis. + Delegate used to handle logger creation event notifications. - + - Default Constructor + Provides data for the event. - Initializes the repository with default (empty) properties. + A event is raised every time a + is created. - + - Construct the repository using specific properties + The created - the properties to set for this repository - - - Initializes the repository with specified properties. - - - + - Test if logger exists + Constructor - The name of the logger to lookup - The Logger object with the name specified + The that has been created. - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. + Initializes a new instance of the event argument + class,with the specified . - + - Returns all the currently defined loggers in the repository + Gets the that has been created. - All the defined loggers + + The that has been created. + - Returns all the currently defined loggers in the repository as an Array. + The that has been created. - + - Return a new logger instance + Hierarchical organization of loggers - The name of the logger to retrieve - The logger object with the name specified - Return a new logger instance. + The casual user should not have to deal with this class + directly. - 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. + 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 - + - Shutdown the repository + Event used to notify that a logger has been created. - Shutdown the repository. Can be overridden in a subclass. - This base class implementation notifies the - listeners and all attached plugins of the shutdown event. + Event raised when a logger is created. - + - Reset the repositories configuration to a default state + Default constructor - 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. + Initializes a new instance of the class. - + - Log the logEvent through this repository. + Construct with properties - the event to log + The properties to pass to this repository. - 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. + Initializes a new instance of the class. - + - Returns all the Appenders that are configured as an Array. + Construct with a logger factory - All the Appenders + The factory to use to create new logger instances. - Returns all the Appenders that are configured as an Array. + Initializes a new instance of the class with + the specified . - + - The fully qualified type of the LoggerRepositorySkeleton class. + Construct with properties and a logger factory + The properties to pass to this repository. + The factory to use to create new logger instances. - Used by the internal logger to record the Type of the - log message. + + Initializes a new instance of the class with + the specified . + - + - Adds an object renderer for a specific class. + Has no appender warning been emitted - 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. + Flag to indicate if we have already issued a warning + about not having an appender warning. - + - Notify the registered listeners that the repository is shutting down + Get the root of this hierarchy - Empty EventArgs - Notify any listeners that this repository is shutting down. + Get the root of this hierarchy. - + - Notify the registered listeners that the repository has had its configuration reset + Gets or sets the default instance. - Empty EventArgs + The default - Notify any listeners that this repository's configuration has been reset. + The logger factory is used to create logger instances. - + - Notify the registered listeners that the repository has had its configuration changed + Test if a logger exists - Empty EventArgs + The name of the logger to lookup + The Logger object with the name specified - Notify any listeners that this repository's configuration has changed. + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. - + - Raise a configuration changed event on this repository + Returns all the currently defined loggers in the hierarchy as an Array - EventArgs.Empty + All the defined loggers - Applications that programmatically change the configuration of the repository should - raise this event notification to notify listeners. + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. - - - 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 + Return a new logger instance named as the first parameter using + the default factory. - - The string name of the repository - - The name of this repository. The name is - used to store and lookup the repositories - stored by the . + 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 - + - The threshold for all events in this repository + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. - - The threshold for all events in this repository - - The threshold for all events in this repository + 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. - + - RendererMap accesses the object renderer map for this repository. + Reset all values contained in this hierarchy instance to their default. - - RendererMap accesses the object renderer map for this repository. - - RendererMap accesses the object renderer map for this repository. + 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. - The RendererMap holds a mapping between types and - objects. + 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. - + - The plugin map for this repository. + Log the logEvent through this hierarchy. - - The plugin map for this repository. - + the event to log - The plugin map holds the instances - that have been attached to this repository. + 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. - + - Get the level map for the Repository. + Returns all the Appenders that are currently configured + An array containing all the currently configured appenders - Get the level map for the Repository. + 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 level map defines the mappings between - level names and objects in - this repository. + The list returned is unordered but does not contain duplicates. - + - Flag indicates if this repository has been configured. + Collect the appenders from an . + The appender may also be a container. - - Flag indicates if this repository has been configured. - + + + + + + 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 - Flag indicates if this repository has been configured. + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. - + - Contains a list of internal messages captures during the - last configuration. + Initialize the log4net system using the specified config + the element containing the root of the config - + - Event to notify that the repository has been shutdown. + Initialize the log4net system using the specified config - - Event to notify that the repository has been shutdown. - + the element containing the root of the config - Event raised when the repository has been shutdown. + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. - + - Event to notify that the repository has had its configuration reset. + Test if this hierarchy is disabled for the specified . - - Event to notify that the repository has had its configuration reset. - + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + - Event raised when the repository's configuration has been - reset to default. + 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. - + - Event to notify that the repository has had its configuration changed. + Clear all logger definitions from the internal hashtable - - Event to notify that the repository has had its configuration changed. - - Event raised when the repository's configuration has been changed. + 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. - + - Repository specific properties + Return a new logger instance named as the first parameter using + . - - Repository specific properties - + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified - These properties can be specified on a repository specific basis + + 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. + - + - Basic Configurator interface for repositories + Sends a logger creation event to all registered listeners + The newly created logger - - Interface used by basic configurator to configure a - with a default . - - - A should implement this interface to support - configuration by the . - + Raises the logger creation event. - Nicko Cadell - Gert Driesen - + - Initialize the repository using the specified appender + Updates all the parents of the specified logger - the appender to use to log all logging events + The logger to update the parents for - Configure the repository to route all logging events to the - specified appender. + 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. + + + - + - Initialize the repository using the specified appenders + Replace a with a in the hierarchy. - the appenders to use to log all logging events + + - Configure the repository to route all logging events to the - specified appenders. + 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. - + - Configure repository using XML + Define or redefine a Level using the values in the argument + the level values - Interface used by Xml configurator to configure a . + Define or redefine a Level using the values in the argument - A should implement this interface to support - configuration by the . + Supports setting levels via the configuration file. - Nicko Cadell - Gert Driesen - + - Initialize the repository using the specified config + A class to hold the value, name and display name for a level - the element containing the root of the config - The schema for the XML configuration data is defined by - the implementation. + A class to hold the value, name and display name for a level - + - Default constructor + Value of the level - Initializes a new instance of the class. + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. - + - Construct with properties + Name of the level - The properties to pass to this repository. + + The name of the level + - Initializes a new instance of the class. + The name of the level. - + - Construct with a logger factory + Display name for the level - The factory to use to create new logger instances. + + The display name of the level + - Initializes a new instance of the class with - the specified . + The display name of the level. - + - Construct with properties and a logger factory + Override Object.ToString to return sensible debug info - 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 . - - + string info about this object - + - Test if a logger exists + Set a Property using the values in the argument - The name of the logger to lookup - The Logger object with the name specified + the property value - Check if the named logger exists in the hierarchy. If so return - its reference, otherwise returns null. + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. - + - Returns all the currently defined loggers in the hierarchy as an Array + The fully qualified type of the Hierarchy class. - 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. - + Used by the internal logger to record the Type of the + log message. - + - Return a new logger instance named as the first parameter using - the default factory. + Interface abstracts creation of instances - Return a new logger instance named as the first parameter using - the default factory. + This interface is used by the to + create new objects. - 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 method is called + to create a named . + + + Implement this interface to create new subclasses of . - The name of the logger to retrieve - The logger object with the name specified + Nicko Cadell + Gert Driesen - + - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. + Create a new instance + The that will own the . + The name of the . + The instance for the specified name. - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. + Create a new instance with the + specified name. - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. + Called by the to create + new named instances. - 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. + If the is null then the root logger + must be returned. - + - Reset all values contained in this hierarchy instance to their default. + Implementation of used by - 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. + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. - Existing loggers are not removed. They are just reset. + 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. - This method should be used sparingly and with care as it will - block all logging until it is completed. + 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 - + - Log the logEvent through this hierarchy. + This constructor created a new instance and + sets its name. - the event to log + The name of the . - 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. + This constructor is protected and designed to be used by + a subclass that is not abstract. - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. + Loggers are constructed by + objects. See for the default + logger creator. - + - Returns all the Appenders that are currently configured + Gets or sets the parent logger in the hierarchy. - An array containing all the currently configured appenders + + The parent logger in the hierarchy. + - 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. + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. - - - Collect the appenders from an . - The appender may also be a container. - - - - - + - Collect the appenders from an container + 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. + + - + - Initialize the log4net system using the specified appender + Gets the effective level for this logger. - the appender to use to log all logging events + 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. + - + - Initialize the log4net system using the specified appenders + Gets or sets the where this + Logger instance is attached to. - the appenders to use to log all logging events + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + - + - Initialize the log4net system using the specified appenders + Gets or sets the assigned , if any, for this Logger. - the appenders to use to log all logging events + + The of this logger. + - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. + The assigned can be null. - + - Initialize the log4net system using the specified config + Add to the list of appenders of this + Logger instance. - the element containing the root of the config + 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. + + - + - Initialize the log4net system using the specified config + Get the appenders contained in this logger as an + . - the element containing the root of the config + A collection of the appenders in this logger - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. - + - Test if this hierarchy is disabled for the specified . + Look for the appender named as name - The level to check against. - - true if the repository is disabled for the level argument, false otherwise. - + The name of the appender to lookup + The appender with the name specified, or null. - 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. + Returns the named appender, or null if the appender is not found. - + - Clear all logger definitions from the internal hashtable + Remove all previously added appenders from this Logger instance. - This call will clear all logger definitions from the internal - hashtable. Invoking this method will irrevocably mess up the - logger hierarchy. + Remove all previously added appenders from this Logger instance. - You should really know what you are doing before - invoking this method. + This is useful when re-reading configuration information. - + - Return a new logger instance named as the first parameter using - . + Remove the appender passed as parameter form the list of appenders. - The name of the logger to retrieve - The factory that will make the new logger instance - The logger object with the name specified + The appender to remove + The appender removed from the list - 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. + 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. - + - Sends a logger creation event to all registered listeners + Remove the appender passed as parameter form the list of appenders. - The newly created logger + The name of the appender to remove + The appender removed from the list - Raises the logger creation event. + + 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. + - + - Updates all the parents of the specified logger + Gets the logger name. - The logger to update the parents for + + The name of the logger. + - This method loops through all the potential parents of - . There 3 possible cases: + The name of this logger - - - 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. + 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. - 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'. + Generate a logging event for the specified using + the and . - Otherwise, we set log's parent field to c's parent and set - c's parent field to log. + This method must not throw any exception to the caller. - + - Define or redefine a Level using the values in the argument + This is the most generic printing method that is intended to be used + by wrappers. - the level values + The event being logged. - Define or redefine a Level using the values in the argument + Logs the specified logging event through this logger. - Supports setting levels via the configuration file. + This method must not throw any exception to the caller. - + - Set a Property using the values in the argument + Checks if this logger is enabled for a given passed as parameter. - the property value + The level to check. + + true if this logger is enabled for level, otherwise false. + - Set a Property using the values in the argument. + Test if this logger is going to log events of the specified . - Supports setting property values via the configuration file. + This method must not throw any exception to the caller. - + - The fully qualified type of the Hierarchy class. + Gets the where this + Logger instance is attached to. + + The that this logger belongs to. + - Used by the internal logger to record the Type of the - log message. + + Gets the where this + Logger instance is attached to. + - + - Event used to notify that a logger has been created. + Deliver the to the attached appenders. + The event to log. - Event raised when a logger is created. + 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. - + - Has no appender warning been emitted + Closes all attached appenders implementing the interface. - Flag to indicate if we have already issued a warning - about not having an appender warning. + Used to ensure that the appenders are correctly shutdown. - + - Get the root of this hierarchy + 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. - Get the root of this hierarchy. + Generate a logging event for the specified using + the . - + - Gets or sets the default instance. + Creates a new logging event and logs the event without further checks. - The default + 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. - The logger factory is used to create logger instances. + Generates a logging event and delivers it to the attached + appenders. - + - A class to hold the value, name and display name for a level + Creates a new logging event and logs the event without further checks. + The event being logged. - A class to hold the value, name and display name for a level + Delivers the logging event to the attached appenders. - + - Override Object.ToString to return sensible debug info + The fully qualified type of the Logger class. - string info about this object - + - Value of the level + The name of this logger. + + + + + The assigned level of this logger. - If the value is not set (defaults to -1) the value will be looked - up for the current level with the same name. + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. - + - Name of the level + The parent of this logger. - - The name of the level - - The name of the level. + The parent of this logger. + All loggers have at least one ancestor which is the root logger. - + - Display name for the level + Loggers need to know what Hierarchy they are in. - - The display name of the level - - The display name of the level. + 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 + + Used internally to accelerate hash table searches. @@ -23247,7 +23521,7 @@ - Initializes a new instance of the class + Initializes a new instance of the class with the specified name. @@ -23276,12 +23550,12 @@ - Determines whether two instances + Determines whether two instances are equal. - The to compare with the current . + The to compare with the current . - true if the specified is equal to the current ; otherwise, false. + true if the specified is equal to the current ; otherwise, false. @@ -23296,8 +23570,8 @@ instances are used in the - when there is no specified - for that node. + when there is no specified + for that node. A provision node holds a list of child loggers on behalf of @@ -23314,18 +23588,18 @@ A child logger to add to this node. - Initializes a new instance of the class + Initializes a new instance of the class with the specified child logger. - The sits at the root of the logger hierarchy tree. + The sits at the root of the logger hierarchy tree. - The is a regular except + The is a regular except that it provides several guarantees. @@ -23345,7 +23619,7 @@ The level to assign to the root logger. - Initializes a new instance of the class with + Initializes a new instance of the class with the specified logging level. @@ -23354,15 +23628,6 @@ - - - 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. @@ -23390,6 +23655,15 @@ + + + The fully qualified type of the RootLogger class. + + + Used by the internal logger to record the Type of the + log message. + + Initializes the log4net environment using an XML DOM. @@ -23409,8 +23683,8 @@ The hierarchy to build. - Initializes a new instance of the class - with the specified . + Initializes a new instance of the class + with the specified . @@ -23610,21 +23884,46 @@ log message. - + - + 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. + + @@ -23662,2506 +23961,2945 @@ - + - Write the name of the current AppDomain to the output + Interface implemented by logger repositories. - Write the name of the current AppDomain to the output writer + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. Nicko Cadell + Gert Driesen - + - Write the name of the current AppDomain to the output + The name of the repository - the writer to write to - null, state is not set + + The name of the repository + - Writes name of the current AppDomain to the output . + The name of the repository. - + - AppSetting pattern converter + RendererMap accesses the object renderer map for this repository. + + RendererMap accesses the object renderer map for this repository. + - This pattern converter reads appSettings from the application configuration file. + RendererMap accesses the object renderer map for this repository. - 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. + The RendererMap holds a mapping between types and + objects. + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + - A typical use is to specify a base directory for log files, e.g. - - - - - ... - - - ]]> - + The plugin map holds the instances + that have been attached to this repository. - + - Write the property value to the output + Get the level map for the Repository. - 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. + Get the level map for the Repository. - If the is set to null - then all the properties are written as key value pairs. + The level map defines the mappings between + level names and objects in + this repository. - + - Write the current date to the output + The threshold for all events in this repository + + The threshold for all events in this repository + - Date pattern converter, uses a to format - the current date and time to the writer as a string. + The threshold for all events in this repository. + + + + + 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 + - 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. - - - + 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 + - The date and time is in the local time zone and is rendered in that zone. - To output the time in Universal time see . + Returns all the currently defined loggers as an Array. - Nicko Cadell - + - The used to render the date to a string + Returns a named logger instance + The name of the logger to retrieve + The logger object with the name specified - The used to render the date to a string + 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. + + + + - Initialize the converter options + Reset the repositories configuration to a default state - 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. + Reset all values contained in this instance to their + default state. - If any of the configuration properties are modified then - must be called again. + 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. - + - Write the current date to the output + Log the through this repository. - that will receive the formatted result. - null, state is not set + 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. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + - 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. + Flag indicates if this repository has been configured. - + - The fully qualified type of the DatePatternConverter class. + Collection of internal messages captured during the most + recent configuration process. - - Used by the internal logger to record the Type of the - log message. - - + - Write an folder path to the output + Event to notify that the repository has been shutdown. + + Event to notify that the repository has been shutdown. + - 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. + Event raised when the repository has been shutdown. - Ron Grabowski - + - Write an special path environment folder path to the output + Event to notify that the repository has had its configuration reset. - the writer to write to - null, state is not set + + Event to notify that the repository has had its configuration reset. + - 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. + Event raised when the repository's configuration has been + reset to default. - + - The fully qualified type of the EnvironmentFolderPathPatternConverter class. + Event to notify that the repository has had its configuration changed. + + Event to notify that the repository has had its configuration changed. + - Used by the internal logger to record the Type of the - log message. + + Event raised when the repository's configuration has been changed. + - + - Write an environment variable to the output + Repository specific properties + + Repository specific properties + - Write an environment variable to the output writer. - The value of the determines - the name of the variable to output. + These properties can be specified on a repository specific basis. - Nicko Cadell - + - Write an environment variable to the output + Returns all the Appenders that are configured as an Array. - the writer to write to - null, state is not set + All the Appenders - Writes the environment variable to the output . - The name of the environment variable to output must be set - using the - property. + Returns all the Appenders that are configured as an Array. - + - The fully qualified type of the EnvironmentPatternConverter class. + Configure repository using XML - Used by the internal logger to record the Type of the - log message. + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + Nicko Cadell + Gert Driesen - + - Write the current thread identity to the output + Initialize the repository using the specified config + the element containing the root of the config - Write the current thread identity to the output writer + The schema for the XML configuration data is defined by + the implementation. - Nicko Cadell - + - Write the current thread identity to the output + Base implementation of - the writer to write to - null, state is not set - Writes the current thread identity to the output . + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + Nicko Cadell + Gert Driesen - + - The fully qualified type of the IdentityPatternConverter class. + Default Constructor - Used by the internal logger to record the Type of the - log message. + + Initializes the repository with default (empty) properties. + - + - Pattern converter for literal string instances in the pattern + Construct the repository using specific properties + the properties to set for this repository - Writes the literal string value specified in the - property to - the output. + Initializes the repository with specified properties. - Nicko Cadell - + - Set the next converter in the chain + The name of the repository - The next pattern converter in the chain - The next pattern converter + + The string name of the repository + - 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. + The name of this repository. The name is + used to store and lookup the repositories + stored by the . - + - Write the literal to the output + The threshold for all events in this repository - the writer to write to - null, not set + + The threshold for all events in this repository + - Override the formatting behavior to ignore the FormattingInfo - because we have a literal instead. - - - Writes the value of - to the output . + The threshold for all events in this repository - + - Convert this pattern into the rendered message + RendererMap accesses the object renderer map for this repository. - that will receive the formatted result. - null, not set + + RendererMap accesses the object renderer map for this repository. + - This method is not used. + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. - + - Writes a newline to the output + The plugin map for this repository. + + The plugin map for this repository. + - Writes the system dependent line terminator to the output. - This behavior can be overridden by setting the : + The plugin map holds the instances + that have been attached to this repository. - - - Option Value - Output - - - DOS - DOS or Windows line terminator "\r\n" - - - UNIX - UNIX line terminator "\n" - - - Nicko Cadell - + - Initialize the converter + Get the level map for the Repository. - 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. + Get the level map for the Repository. - If any of the configuration properties are modified then - must be called again. + The level map defines the mappings between + level names and objects in + this repository. - + - Write the current process ID to the output + Test if logger exists + The name of the logger to lookup + The Logger object with the name specified - Write the current process ID to the output writer + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. - Nicko Cadell - + - Write the current process ID to the output + Returns all the currently defined loggers in the repository - the writer to write to - null, state is not set + All the defined loggers - Write the current process ID to the output . + Returns all the currently defined loggers in the repository as an Array. - + - The fully qualified type of the ProcessIdPatternConverter class. + Return a new logger instance + The name of the logger to retrieve + The logger object with the name specified - Used by the internal logger to record the Type of the - log message. + + 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. + - + - Property pattern converter + Shutdown the repository - 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. + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. - Nicko Cadell - + - Write the property value to the output + Reset the repositories configuration to a default state - 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. + Reset all values contained in this instance to their + default state. - If the is set to null - then all the properties are written as key value pairs. + 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. - + - A Pattern converter that generates a string of random characters + Log the logEvent through this repository. + the event to log - 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. + 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 random number generator used by this class is not cryptographically secure. + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. - Nicko Cadell - + - Shared random number generator + Flag indicates if this repository has been configured. + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + - + - Length of random string to generate. Default length 4. + Contains a list of internal messages captures during the + last configuration. - + - Initialize the converter options + Event to notify that the repository has been shutdown. + + Event to notify that the repository has been shutdown. + - 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. + Event raised when the repository has been shutdown. - + - Write a randoim string to the output + Event to notify that the repository has had its configuration reset. - the writer to write to - null, state is not set + + Event to notify that the repository has had its configuration reset. + - Write a randoim string to the output . + Event raised when the repository's configuration has been + reset to default. - + - The fully qualified type of the RandomStringPatternConverter class. + Event to notify that the repository has had its configuration changed. + + Event to notify that the repository has had its configuration changed. + - Used by the internal logger to record the Type of the - log message. + + Event raised when the repository's configuration has been changed. + - + - Write the current threads username to the output + Repository specific properties + + Repository specific properties + - - Write the current threads username to the output writer - + These properties can be specified on a repository specific basis - Nicko Cadell - + - Write the current threads username to the output + Returns all the Appenders that are configured as an Array. - the writer to write to - null, state is not set + All the Appenders - Write the current threads username to the output . + Returns all the Appenders that are configured as an Array. - + - The fully qualified type of the UserNamePatternConverter class. + The fully qualified type of the LoggerRepositorySkeleton class. Used by the internal logger to record the Type of the log message. - + - Write the UTC date time to the output + 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. - Date pattern converter, uses a to format - the current date and time in Universal time. - - - See the for details on the date pattern syntax. + Adds an object renderer for a specific class. - - Nicko Cadell - + - Write the current date and time to the output + Notify the registered listeners that the repository is shutting down - that will receive the formatted result. - null, state is not set + Empty EventArgs - 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. + Notify any listeners that this repository is shutting down. - - + - The fully qualified type of the UtcDatePatternConverter class. + Notify the registered listeners that the repository has had its configuration reset + Empty EventArgs - Used by the internal logger to record the Type of the - log message. + + Notify any listeners that this repository's configuration has been reset. + - + - Type converter for Boolean. + Notify the registered listeners that the repository has had its configuration changed + Empty EventArgs - Supports conversion from string to bool type. + Notify any listeners that this repository's configuration has changed. - - - - Nicko Cadell - Gert Driesen - + - Can the source type be converted to the type supported by this object + Raise a configuration changed event on this repository - the type to convert - true if the conversion is possible + EventArgs.Empty - Returns true if the is - the type. + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. - + - Convert the source object to the type supported by this object + 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 log4net Thread Context. - the object to convert - the converted object - Uses the method to convert the - argument to a . + 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. - - The object cannot be converted to the - target type. To check for this condition use the - method. - + 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 - + - Exception base type for conversion errors. + Private Constructor. - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. + Uses a private access modifier to prevent instantiation of this class. - Nicko Cadell - Gert Driesen - + - Constructor + The thread properties map + + The thread properties map + - Initializes a new instance of the class. + The ThreadContext properties override any + properties with the same name. - + - Constructor + The thread stacks - A message to include with the exception. + + stack map + - Initializes a new instance of the class - with the specified message. + The thread local stacks. - + - Constructor + The thread context properties instance + + + + + The thread context stacks instance + + + + + A straightforward implementation of the interface. - 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. + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + Nicko Cadell + Gert Driesen - + - Serialization constructor + 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. + Initializes a new instance of the class. - + - Creates a new instance of the class. + Append on on all attached appenders. - The conversion destination type. - The value to convert. - An instance of the . + The event being logged. + The number of appenders called. - Creates a new instance of the class. + Calls the method on all + attached appenders. - + - Creates a new instance of the class. + Append on on all attached appenders. - The conversion destination type. - The value to convert. - A nested exception to include. - An instance of the . + The array of events being logged. + The number of appenders called. - Creates a new instance of the class. + Calls the method on all + attached appenders. - + - Register of type converters for specific types. + Calls the DoAppende method on the with + the objects supplied. + The appender + The events - 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. + 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. - - - Nicko Cadell - Gert Driesen - + - Private constructor + Attaches an appender. + The appender to add. - Initializes a new instance of the class. + + If the appender is already in the list it won't be added again. + - + - Static constructor. + Gets all attached appenders. + + A collection of attached appenders, or null if there + are no attached appenders. + - This constructor defines the intrinsic type converters. + The read only collection of all currently attached appenders. - + - Adds a converter for a specific type. + Gets an attached appender with the specified name. - The type being converted to. - The type converter to use to convert to the destination type. + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + - Adds a converter instance for a specific type. + Lookup an attached appender by name. - + - Adds a converter for a specific type. + Removes all attached appenders. - 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. + Removes and closes all attached appenders - + - Gets the type converter to use to convert values to the destination type. + Removes the specified appender from the list of attached appenders. - 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. - + The appender to remove. + The appender removed from the list - Gets the type converter to use to convert values to the destination type. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. - + - Gets the type converter to use to convert values to the destination type. + Removes the appender with the specified name from the list of appenders. - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - + The name of the appender to remove. + The appender removed from the list - Gets the type converter to use to convert values to the destination type. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. - + - Lookups the type converter to use as specified by the attributes on the - destination type. + List of appenders - 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. + Array of appenders, used to cache the m_appenderList - 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. + The fully qualified type of the AppenderAttachedImpl class. Used by the internal logger to record the Type of the log message. - + - Mapping from to type converter. + This class aggregates several PropertiesDictionary collections together. + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell - + - Supports conversion from string to type. + Constructor - Supports conversion from string to type. + Initializes a new instance of the class. - - - - Nicko Cadell - Gert Driesen - + - Can the source type be converted to the type supported by this object + Gets the value of a property - the type to convert - true if the conversion is possible + + The value for the property with the specified key + - Returns true if the is - the type. + 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. - + - Overrides the ConvertFrom method of IConvertFrom. + Add a Properties Dictionary to this composite collection - the object to convert to an encoding - the encoding + the properties to add - Uses the method to - convert the argument to an . + Properties dictionaries added first take precedence over dictionaries added + later. - - The object cannot be converted to the - target type. To check for this condition use the - method. - - + - Interface supported by type converters + Flatten this composite collection into a single properties dictionary + the flattened dictionary - This interface supports conversion from a single type to arbitrary types. - See . + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. - Nicko Cadell - + - Returns whether this converter can convert the object to the specified type + Base class for Context Properties implementations - 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 - . + This class defines a basic property get set accessor + Nicko Cadell - + - Converts the given value object to the specified type, using the arguments + Gets or sets the value of a property - the object to convert - The Type to convert the value parameter to - the converted object + + The value for the property with the specified key + - Converts the (which must be of the type supported - by this converter) to the specified.. + Gets or sets the value of a property - + - Supports conversion from string to type. + Wrapper class used to map converter names to converter types - Supports conversion from string to type. + Pattern converter info class used during configuration by custom + PatternString and PatternLayer converters. - - - Nicko Cadell - + - Can the source type be converted to the type supported by this object + default constructor + + + + + Gets or sets the name of the conversion pattern - the type to convert - true if the conversion is possible - Returns true if the is - the type. + The name of the pattern in the format string - + - Overrides the ConvertFrom method of IConvertFrom. + Gets or sets the type of the converter - 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 value specified must extend the + type. - - 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. + + + + + + Subclass of that maintains a count of + the number of bytes written. - Supports conversion from string to type. - - - The string is used as the - of the . + This writer counts the number of bytes written. - - - Nicko Cadell + Gert Driesen - + - Can the source type be converted to the type supported by this object + Constructor - the type to convert - true if the conversion is possible + The to actually write to. + The to report errors to. - Returns true if the is - the type. + Creates a new instance of the class + with the specified and . - + - Overrides the ConvertFrom method of IConvertFrom. + Writes a character to the underlying writer and counts the number of bytes written. - the object to convert to a PatternLayout - the PatternLayout + the char to write - Creates and returns a new using - the as the - . + Overrides implementation of . Counts + the number of bytes written. - - The object cannot be converted to the - target type. To check for this condition use the - method. - - + - Convert between string and + 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 - Supports conversion from string to type, - and from a type to a string. - - - The string is used as the - of the . + Overrides implementation of . Counts + the number of bytes written. - - - - Nicko Cadell - + - Can the target type be converted to the type supported by this object + Writes a string to the output and counts the number of bytes written. - A that represents the type you want to convert to - true if the conversion is possible + The string data to write to the output. - Returns true if the is - assignable from a type. + Overrides implementation of . Counts + the number of bytes written. - + - Converts the given value object to the specified type, using the arguments + Gets or sets the total number of bytes written. - the object to convert - The Type to convert the value parameter to - the converted object + + The total number of bytes written. + - Uses the method to convert the - argument to a . + Gets or sets the total number of bytes written. - - 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 + Total number of bytes written. + + + + + A fixed size rolling buffer of logging events. - the type to convert - true if the conversion is possible - Returns true if the is - the type. + An array backed fixed size leaky bucket. + Nicko Cadell + Gert Driesen - + - Overrides the ConvertFrom method of IConvertFrom. + Constructor - the object to convert to a PatternString - the PatternString + The maximum number of logging events in the buffer. - Creates and returns a new using - the as the - . + Initializes a new instance of the class with + the specified maximum number of buffered logging events. - - The object cannot be converted to the - target type. To check for this condition use the - method. - + The argument is not a positive integer. - + - Supports conversion from string to type. + 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. - Supports conversion from string to type. + 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. - - - - Nicko Cadell - + - Can the source type be converted to the type supported by this object + Get and remove the oldest event in the buffer. - the type to convert - true if the conversion is possible + The oldest logging event in the buffer - Returns true if the is - the type. + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. - + - Overrides the ConvertFrom method of IConvertFrom. + Pops all the logging events from the buffer into an array. - the object to convert to a Type - the Type + An array of all the logging events in the buffer. - Uses the method to convert the - argument to a . - Additional effort is made to locate partially specified types - by searching the loaded assemblies. + Get all the events in the buffer and clear the buffer. - - The object cannot be converted to the - target type. To check for this condition use the - method. - - + - Attribute used to associate a type converter + Clear the buffer - 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. + Clear the buffer of all events. The events in the buffer are lost. - Nicko Cadell - Gert Driesen - - - - The string type name of the type converter - - + - Default constructor + Gets the th oldest event currently in the buffer. + The th oldest event currently in the buffer. - Default constructor + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. - + - Create a new type converter attribute for the specified type name + Gets the maximum size of the buffer. - The string type name of the type converter + The maximum size of the buffer. - The type specified must implement the - or the interfaces. + Gets the maximum size of the buffer - + - Create a new type converter attribute for the specified type + Gets the number of logging events in the buffer. - The type of the type converter + The number of logging events in the buffer. - The type specified must implement the - or the interfaces. + This number is guaranteed to be in the range 0 to + (inclusive). - + - The string type name of the type converter + An always empty . - - The string type name of the type converter - - The type specified must implement the - or the interfaces. + A singleton implementation of the + interface that always represents an empty collection. + Nicko Cadell + Gert Driesen - + - A straightforward implementation of the interface. + Initializes a new instance of the class. - This is the default implementation of the - interface. Implementors of the interface - should aggregate an instance of this type. + Uses a private access modifier to enforce the singleton pattern. - Nicko Cadell - Gert Driesen - + - Constructor + Gets the singleton instance of the empty collection. + The singleton instance of the empty collection. - Initializes a new instance of the class. + Gets the singleton instance of the empty collection. - + - Append on on all attached appenders. + Copies the elements of the to an + , starting at a particular Array index. - The event being logged. - The number of appenders called. + 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. - Calls the method on all - attached appenders. + As the collection is empty no values are copied into the array. - + - Append on on all attached appenders. + Gets a value indicating if access to the is synchronized (thread-safe). - The array of events being logged. - The number of appenders called. + + true if access to the is synchronized (thread-safe); otherwise, false. + - Calls the method on all - attached appenders. + For the this property is always true. - + - Calls the DoAppende method on the with - the objects supplied. + Gets the number of elements contained in the . - The appender - The events + + The number of elements contained in the . + - 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. + As the collection is empty the is always 0. - + - Attaches an appender. + Gets an object that can be used to synchronize access to the . - The appender to add. + + An object that can be used to synchronize access to the . + - If the appender is already in the list it won't be added again. + As the collection is empty and thread safe and synchronized this instance is also + the object. - + - Gets an attached appender with the specified name. + Returns an enumerator that can iterate through a collection. - The name of the appender to get. - The appender with the name specified, or null if no appender with the - specified name is found. + An that can be used to + iterate through the collection. - Lookup an attached appender by name. + As the collection is empty a is returned. - + - Removes all attached appenders. + The singleton instance of the empty collection. + + + + + An always empty . - Removes and closes all attached appenders + A singleton implementation of the + interface that always represents an empty collection. + Nicko Cadell + Gert Driesen - + - Removes the specified appender from the list of attached appenders. + Initializes a new instance of the class. - 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. + Uses a private access modifier to enforce the singleton pattern. - + - Removes the appender with the specified name from the list of appenders. + Gets the singleton instance of the . - The name of the appender to remove. - The appender removed from the list + The singleton instance of the . - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. + Gets the singleton instance of the . - + - List of appenders + 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. + + - + - Array of appenders, used to cache the m_appenderList + 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. + + - + - The fully qualified type of the AppenderAttachedImpl class. + Gets the number of elements contained in the + + The number of elements contained in the . + - Used by the internal logger to record the Type of the - log message. + + As the collection is empty the is always 0. + - + - Gets all attached appenders. + Gets an object that can be used to synchronize access to the . - - A collection of attached appenders, or null if there - are no attached appenders. - + + An object that can be used to synchronize access to the . + - The read only collection of all currently attached appenders. + As the collection is empty and thread safe and synchronized this instance is also + the object. - + - This class aggregates several PropertiesDictionary collections together. + Returns an enumerator that can iterate through a collection. + + An that can be used to + iterate through the collection. + - Provides a dictionary style lookup over an ordered list of - collections. + As the collection is empty a is returned. - Nicko Cadell - + - Constructor + 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. - Initializes a new instance of the class. + 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. - + - Add a Properties Dictionary to this composite collection + Removes all elements from the . - the properties to add - Properties dictionaries added first take precedence over dictionaries added - later. + 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. - + - Flatten this composite collection into a single properties dictionary + Determines whether the contains an element + with the specified key. - the flattened dictionary + The key to locate in the . + false - Reduces the collection of ordered dictionaries to a single dictionary - containing the resultant values for the keys. + As the collection is empty the method always returns false. - + - Gets the value of a property + Returns an enumerator that can iterate through a collection. - - The value for the property with the specified key - + + An that can be used to + iterate through the collection. + - 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. + As the collection is empty a is returned. - + - Base class for Context Properties implementations + Removes the element with the specified key from the . + The key of the element to remove. - This class defines a basic property get set accessor + As the collection is empty no values can be removed. A + is thrown if this method is called. - Nicko Cadell + This dictionary is always empty and cannot be modified. - + - Gets or sets the value of a property + Gets a value indicating whether the has a fixed size. - - The value for the property with the specified key - + true - Gets or sets the value of a property + As the collection is empty always returns true. - + - Wrapper class used to map converter names to converter types + Gets a value indicating whether the is read-only. + true - Pattern converter info class used during configuration by custom - PatternString and PatternLayer converters. + As the collection is empty always returns true. - - - default constructor - - - + - + Gets an containing the keys of the . - + An containing the keys of the . + + + As the collection is empty a is returned. + + - + - Gets or sets the name of the conversion pattern + Gets an containing the values of the . + An containing the values of the . - The name of the pattern in the format string + As the collection is empty a is returned. - + - Gets or sets the type of the converter + Gets or sets the element with the specified key. + The key of the element to get or set. + null - The value specified must extend the - type. + 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. - + - + The singleton instance of the empty dictionary. - + - Subclass of that maintains a count of - the number of bytes written. + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. - This writer counts the number of bytes written. + 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 - + - that does not leak exceptions + Defaut Constructor - does not throw exceptions when things go wrong. - Instead, it delegates error handling to its . + Initializes a new instance of the class. - Nicko Cadell - Gert Driesen - + - Adapter that extends and forwards all - messages to an instance of . + Constructor - Adapter that extends and forwards all - messages to an instance of . + Initializes a new instance of the class + with the specified parameters. - Nicko Cadell - - - - The writer to forward messages to - - + - Create an instance of that forwards all - messages to a . + Gets or sets the minimum value. - The to forward to + + The minimum value. + - Create an instance of that forwards all - messages to a . + Gets or sets the minimum value. - + - Closes the writer and releases any system resources associated with the writer + Gets or sets the maximum value. + + The maximum value. + + Gets or sets the maximum value. - + - Dispose this writer + Gets or sets a flag indicating whether left align is enabled + or not. - flag indicating if we are being disposed + + A flag indicating whether left align is enabled or not. + - Dispose this writer + Gets or sets a flag indicating whether left align is enabled or not. - + - Flushes any buffered output + Implementation of Properties collection for the - Clears all buffers for the writer and causes any buffered data to be written - to the underlying device + 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 - + - Writes a character to the wrapped TextWriter + The read only copy of the properties. - the value to write to the TextWriter - Writes a character to the wrapped TextWriter + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. - + - Writes a character buffer to the wrapped TextWriter + Lock object used to synchronize updates within this instance - 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 + Constructor - the value to write to the TextWriter - Writes a string to the wrapped TextWriter + Initializes a new instance of the class. - + - Gets or sets the underlying . + Gets or sets the value of a property - The underlying . + The value for the property with the specified key - Gets or sets the underlying . + 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 Encoding in which the output is written + Remove a property from the global context - - The - + the key for the entry to remove - The Encoding in which the output is written + Removing an entry from the global context properties is relatively expensive compared + with reading a value. - + - Gets an object that controls formatting + Clear the global context properties - - The format provider - - - - Gets an object that controls formatting - - - + - Gets or sets the line terminator string used by the TextWriter + Get a readonly immutable copy of the properties - - The line terminator to use - + the current global context properties - Gets or sets the line terminator string used by the TextWriter + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. - + - Constructor + The static class ILogExtensions contains a set of widely used + methods that ease the interaction with the ILog interface implementations. - the writer to actually write to - the error handler to report error to - Create a new QuietTextWriter using a writer and error handler + 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"); + + - + - Writes a character to the underlying writer + The fully qualified type of the Logger class. - the char to write - - - Writes a character to the underlying writer - - - + - Writes a buffer to the underlying writer + Log a message object with the level. - the buffer to write - the start index to write from - the number of characters to write + The logger on which the message is logged. + The lambda expression that gets the object to log. - Writes a buffer to the underlying writer + 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. + + - + - Writes a string to the output. + Log a message object with the level including + the stack trace of the passed + as a parameter. - The string data to write to the output. + 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. - Writes a string to the output. + See the form for more detailed information. + + - + + Log a message object with the level. //TODO - Closes the underlying output writer. + Log a message object with the level. + The logger on which the message is logged. + The message object to log. - Closes the underlying output writer. + 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. + + - - - 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. + Log a message object with the level including + the stack trace of the passed + as a parameter. - - The error handler that all errors are passed to. - + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. - Gets or sets the error handler that all errors are passed to. + See the form for more detailed information. + + - + - Gets a value indicating whether this writer is closed. + Logs a formatted message string with the level. - - true if this writer is closed, otherwise false. - + The logger on which the message is logged. + A String containing zero or more format items + An Object to format - Gets a value indicating whether this writer is closed. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Constructor + Logs a formatted message string with the level. - The to actually write to. - The to report errors to. + 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 - Creates a new instance of the class - with the specified and . + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Writes a character to the underlying writer and counts the number of bytes written. + Logs a formatted message string with the level. - the char to write + 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 - Overrides implementation of . Counts - the number of bytes written. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Writes a buffer to the underlying writer and counts the number of bytes written. + Logs a formatted message string with the level. - the buffer to write - the start index to write from - the number of characters to write + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format - Overrides implementation of . Counts - the number of bytes written. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Writes a string to the output and counts the number of bytes written. + Logs a formatted message string with the level. - The string data to write to the output. + 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 - Overrides implementation of . Counts - the number of bytes written. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - - - Total number of bytes written. - - - + - Gets or sets the total number of bytes written. + Log a message object with the level. - - The total number of bytes written. - + The logger on which the message is logged. + The lambda expression that gets the object to log. - Gets or sets the total number of bytes written. + 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. + + - + - A fixed size rolling buffer of logging events. + 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. - An array backed fixed size leaky bucket. + See the form for more detailed information. - Nicko Cadell - Gert Driesen + + - + + Log a message object with the level. //TODO - Constructor + Log a message object with the level. - The maximum number of logging events in the buffer. + The logger on which the message is logged. + The message object to log. - Initializes a new instance of the class with - the specified maximum number of buffered logging events. + 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. - The argument is not a positive integer. + + - + - Appends a to the buffer. + Log a message object with the level including + the stack trace of the passed + as a parameter. - The event to append to the buffer. - The event discarded from the buffer, if the buffer is full, otherwise null. + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. - 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. + See the form for more detailed information. + + - + - Get and remove the oldest event in the buffer. + Logs a formatted message string with the level. - The oldest logging event in the buffer + The logger on which the message is logged. + A String containing zero or more format items + An Object to format - Gets the oldest (first) logging event in the buffer and removes it - from the buffer. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Pops all the logging events from the buffer into an array. + Logs a formatted message string with the level. - An array of all the logging events in the buffer. + 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 - Get all the events in the buffer and clear the buffer. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Clear the buffer + 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 - Clear the buffer of all events. The events in the buffer are lost. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets the th oldest event currently in the buffer. + Logs a formatted message string with the level. - The th oldest event currently in the buffer. + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format - If is outside the range 0 to the number of events - currently in the buffer, then null is returned. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets the maximum size of the buffer. + Logs a formatted message string with the level. - The maximum size of the buffer. + 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 - Gets the maximum size of the buffer + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets the number of logging events in the buffer. + Log a message object with the level. - The number of logging events in the buffer. + The logger on which the message is logged. + The lambda expression that gets the object to log. - This number is guaranteed to be in the range 0 to - (inclusive). + 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. + + - + - An always empty . + 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. - A singleton implementation of the - interface that always represents an empty collection. + See the form for more detailed information. - Nicko Cadell - Gert Driesen + + - + + Log a message object with the level. //TODO - Initializes a new instance of the class. + Log a message object with the level. + The logger on which the message is logged. + The message object to log. - Uses a private access modifier to enforce the singleton pattern. + 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. + + - + - Copies the elements of the to an - , starting at a particular Array index. + Log a message object with the level including + the stack trace of the passed + as a parameter. - 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. + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. - As the collection is empty no values are copied into the array. + See the form for more detailed information. + + - + - Returns an enumerator that can iterate through a collection. + Logs a formatted message string with the level. - - An that can be used to - iterate through the collection. - + The logger on which the message is logged. + A String containing zero or more format items + An Object to format - As the collection is empty a is returned. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - - - The singleton instance of the empty collection. - - - + - Gets the singleton instance of the empty collection. + Logs a formatted message string with the level. - The singleton instance of the empty collection. + 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 - Gets the singleton instance of the empty collection. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets a value indicating if access to the is synchronized (thread-safe). + Logs a formatted message string with the level. - - true if access to the is synchronized (thread-safe); otherwise, false. - + 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 - For the this property is always true. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets the number of elements contained in the . + Logs a formatted message string with the level. - - The number of elements contained in the . - + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format - As the collection is empty the is always 0. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets an object that can be used to synchronize access to the . + Logs a formatted message string with the level. - - An object that can be used to synchronize access to the . - + 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 - As the collection is empty and thread safe and synchronized this instance is also - the object. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - An always empty . + Log a message object with the level. + The logger on which the message is logged. + The lambda expression that gets the object to log. - A singleton implementation of the - interface that always represents an empty collection. + 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. - Nicko Cadell - Gert Driesen + + - + - Initializes a new instance of the class. + 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. - Uses a private access modifier to enforce the singleton pattern. + See the form for more detailed information. + + - + + Log a message object with the level. //TODO - Copies the elements of the to an - , starting at a particular Array index. + Log a message object with the level. - 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. + The logger on which the message is logged. + The message object to log. - As the collection is empty no values are copied into the array. + 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. + + - + - Returns an enumerator that can iterate through a collection. + Log a message object with the level including + the stack trace of the passed + as a parameter. - - An that can be used to - iterate through the collection. - + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. - As the collection is empty a is returned. + See the form for more detailed information. + + - + - Adds an element with the provided key and value to the - . + Logs a formatted message string with the level. - The to use as the key of the element to add. - The to use as the value of the element to add. + The logger on which the message is logged. + A String containing zero or more format items + An Object to format - As the collection is empty no new values can be added. A - is thrown if this method is called. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - This dictionary is always empty and cannot be modified. + + - + - Removes all elements from the . + 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 - As the collection is empty no values can be removed. A - is thrown if this method is called. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - This dictionary is always empty and cannot be modified. + + - + - Determines whether the contains an element - with the specified key. + Logs a formatted message string with the level. - The key to locate in the . - false + 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 - As the collection is empty the method always returns false. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Returns an enumerator that can iterate through a collection. + Logs a formatted message string with the level. - - An that can be used to - iterate through the collection. - + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format - As the collection is empty a is returned. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Removes the element with the specified key from the . + Logs a formatted message string with the level. - The key of the element to remove. + 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 - As the collection is empty no values can be removed. A - is thrown if this method is called. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - This dictionary is always empty and cannot be modified. - - - - The singleton instance of the empty dictionary. - + + - + - Gets the singleton instance of the . + Log a message object with the level. - The singleton instance of the . + The logger on which the message is logged. + The lambda expression that gets the object to log. - Gets the singleton instance of the . + 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. + + - + - Gets a value indicating if access to the is synchronized (thread-safe). + Log a message object with the level including + the stack trace of the passed + as a parameter. - - true if access to the is synchronized (thread-safe); otherwise, false. - + 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. - For the this property is always true. + See the form for more detailed information. + + - + + Log a message object with the level. //TODO - Gets the number of elements contained in the + Log a message object with the level. - - The number of elements contained in the . - + The logger on which the message is logged. + The message object to log. - As the collection is empty the is always 0. + 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. + + - + - Gets an object that can be used to synchronize access to the . + Log a message object with the level including + the stack trace of the passed + as a parameter. - - An object that can be used to synchronize access to the . - + The logger on which the message is logged. + The message object to log. + The exception to log, including its stack trace. - As the collection is empty and thread safe and synchronized this instance is also - the object. + See the form for more detailed information. + + - + - Gets a value indicating whether the has a fixed size. + Logs a formatted message string with the level. - true + The logger on which the message is logged. + A String containing zero or more format items + An Object to format - As the collection is empty always returns true. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets a value indicating whether the is read-only. + Logs a formatted message string with the level. - true + 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 - As the collection is empty always returns true. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets an containing the keys of the . + Logs a formatted message string with the level. - An containing the keys of the . + 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 - As the collection is empty a is returned. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets an containing the values of the . + Logs a formatted message string with the level. - An containing the values of the . + The logger on which the message is logged. + A String containing zero or more format items + An Object to format + An Object to format - As the collection is empty a is returned. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + - + - Gets or sets the element with the specified key. + Logs a formatted message string with the level. - The key of the element to get or set. - null + 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 - 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. + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. - This dictionary is always empty and cannot be modified. + + - + - Contain the information obtained when parsing formatting modifiers - in conversion modifiers. + Manages a mapping from levels to - Holds the formatting information extracted from the format string by - the . This is used by the - objects when rendering the output. + Manages an ordered mapping from instances + to subclasses. Nicko Cadell - Gert Driesen - + - Defaut Constructor + Default constructor - Initializes a new instance of the class. + Initialise a new instance of . - + - Constructor + Add a to this mapping + the entry to add - Initializes a new instance of the class - with the specified parameters. + If a has previously been added + for the same then that entry will be + overwritten. - + - Gets or sets the minimum value. + Lookup the mapping for the specified level - - The minimum value. - + the level to lookup + the for the level or null if no mapping found - Gets or sets the minimum value. + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. - - - - - Gets or sets the maximum value. - - - The maximum value. - - - Gets or sets the maximum value. + If no mapping could be found then null is returned. - + - Gets or sets a flag indicating whether left align is enabled - or not. + Initialize options - - A flag indicating whether left align is enabled or not. - - Gets or sets a flag indicating whether left align is enabled or not. + Caches the sorted list of in an array - + - Implementation of Properties collection for the + An entry in 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. + This is an abstract base class for types that are stored in the + object. Nicko Cadell - + - The read only copy of the properties. + Default protected constructor - This variable is declared volatile to prevent the compiler and JIT from - reordering reads and writes of this thread performed on different threads. + Default protected constructor - + - Lock object used to synchronize updates within this instance + 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. + + - + - Constructor + Initialize any options defined on this entry - Initializes a new instance of the class. + Should be overridden by any classes that need to initialise based on their options - + - Remove a property from the global context + Implementation of Properties collection for the - the key for the entry to remove - Removing an entry from the global context properties is relatively expensive compared - with reading a value. + 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 - + - Clear the global context properties + Flag used to disable this context if we don't have permission to access the CallContext. - + - Get a readonly immutable copy of the properties + Constructor - the current global context properties - This implementation is fast because the GlobalContextProperties class - stores a readonly copy of the properties. + Initializes a new instance of the class. - + Gets or sets the value of a property @@ -26170,3527 +26908,3375 @@ - 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. + Get or set the property value for the specified. - + - The static class ILogExtensions contains a set of widely used - methods that ease the interaction with the ILog interface implementations. + Remove a property + the key for the entry to remove - 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. + Remove the value for the specified from the context. - 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. + Clear all the context properties - 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. + Clear all the context properties - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. - 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. + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread - See the form for more detailed information. + 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. - - - - Log a message object with the level. //TODO + - Log a message object with the level. + Gets the call context get data. - The logger on which the message is logged. - The message object to log. + The peroperties dictionary stored in the call context - - 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. - + 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. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Sets the call context data. - The logger on which the message is logged. - The message object to log. - The exception to log, including its stack trace. + The properties. - - See the form for more detailed information. - + 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. - - - + - Logs a formatted message string with the level. + The fully qualified type of the LogicalThreadContextProperties class. - 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. - + Used by the internal logger to record the Type of the + log message. - - - + - Logs a formatted message string with the level. + Delegate type used for LogicalThreadContextStack's callbacks. - 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. + Implementation of Stack for the - 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. + Implementation of Stack for the - - + Nicko Cadell - + - Logs a formatted message string with the level. + The stack store. + + + + + The name of this within the + . + + + + + The callback used to let the register a + new instance of a . - 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. + Internal constructor - 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. + Initializes a new instance of the class. - - - + - Log a message object with the level. + The number of messages in the stack - The logger on which the message is logged. - The lambda expression that gets the object to log. + + The current number of messages in the stack + - 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. + 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. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Clears all the contextual information held in this stack. - 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. + 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. - - - - Log a message object with the level. //TODO + - Log a message object with the level. + Removes the top context from this stack. - The logger on which the message is logged. - The message object to log. + The message in the context that was removed from the top of this stack. - 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. + 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. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Pushes a new context message into this stack. - The logger on which the message is logged. - The message object to log. - The exception to log, including its stack trace. + The new context message. + + An that can be used to clean up the context stack. + - See the form for more detailed information. + 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"); + } + + - + - Logs a formatted message string with the level. + Returns the top context from this stack. - The logger on which the message is logged. - A String containing zero or more format items - An Object to format + The message in the context from the top of this stack. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Returns the top context from this stack. If this stack is empty then an + empty string (not ) is returned. - - - + - Logs a formatted message string with the level. + Gets the current context information for this stack. - 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 current context information. + + + + Gets and sets the internal stack used by this + + The internal storage stack - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. - - - + - Logs a formatted message string with the level. + Gets the current context information for this stack. - 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 + Gets the current context information - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Gets the current context information for this stack. - - - + - Logs a formatted message string with the level. + Get a portable version of this object - 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 portable instance of this object - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Get a cross thread portable version of this object - - - + - Logs a formatted message string with the level. + Inner class used to represent a single context frame in the stack. - 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. + Inner class used to represent a single context frame in the stack. - - - + - Log a message object with the level. + Constructor - The logger on which the message is logged. - The lambda expression that gets the object to log. + The message for this context. + The parent context in the chain. - 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. + Initializes a new instance of the class + with the specified message and parent context. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Get the message. - 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. + The message. - See the form for more detailed information. + Get the message. - - - - Log a message object with the level. //TODO + - Log a message object with the level. + Gets the full text of the context down to the root level. - The logger on which the message is logged. - The message object to log. + + The full text of the context down to the root level. + - 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. + Gets the full text of the context down to the root level. - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Struct returned from the method. - 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. + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. - - - + - Logs a formatted message string with the level. + The depth to trim the stack to when this instance is disposed - The logger on which the message is logged. - A String containing zero or more format items - An Object to format + + + + The outer LogicalThreadContextStack. + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Initializes a new instance of the class with + the specified stack and return depth. - - - + - Logs a formatted message string with the level. + Returns the stack to the correct depth. - 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. + Returns the stack to the correct depth. - - - + - Logs a formatted message string with the level. + Implementation of Stacks collection for the - 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. + Implementation of Stacks collection for the - - + Nicko Cadell - + - Logs a formatted message string with the level. + Internal constructor - 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. + Initializes a new instance of the class. + + + + + Gets the named thread context stack + + + The named stack + + - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Gets the named thread context stack - - - + - Logs a formatted message string with the level. + The fully qualified type of the ThreadContextStacks class. + + + Used by the internal logger to record the Type of the + log message. + + + + + + + + + + + + Outputs log statements from within the log4net assembly. - 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. + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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 - + - Log a message object with the level. + 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. - 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. - + "log4net: ", + "log4net:ERROR ", + "log4net:WARN " - - - + + + The internal log message. + + + + + The Exception related to the message. + + + Optional. Will be null if no Exception was passed. + + + + + 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. + + + + + + + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Static constructor that initializes logging by reading + settings from the application configuration file. - 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. + 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. - - - - Log a message object with the level. //TODO + - Log a message object with the level. + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. - The logger on which the message is logged. - The message object to log. + + true if log4net internal logging is enabled, otherwise + false. + - 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. + When set to true, internal debug level logging will be + displayed. - 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. + + 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 : + + + + + + + + + - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. - The logger on which the message is logged. - The message object to log. - The exception to log, including its stack trace. + + true if log4net should generate no output at all from internal + logging, otherwise false. + - See the form for more detailed information. + 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 : + + + + + + + + - + - 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 + + + + Raises the LogReceived event when an internal messages is received. + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Test if LogLog.Debug is enabled for output. - - - + - Logs a formatted message string with the level. + Writes log4net internal debug messages to the + standard output stream. - 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 to log. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + All internal debug messages are prepended with + the string "log4net: ". - - - + - Logs a formatted message string with the level. + Writes log4net internal debug messages to the + standard output stream. - 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 Type that generated this message. + The message to log. + An exception to log. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + All internal debug messages are prepended with + the string "log4net: ". - - - + - Logs a formatted message string with the level. + Test if LogLog.Warn is enabled for output. - The logger on which the message is logged. - A String containing zero or more format items - An Object to format - An Object to format + + true if Warn is enabled + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Test if LogLog.Warn is enabled for output. - - - + - Logs a formatted message string with the level. + Writes log4net internal warning messages to the + standard error stream. - 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 Type that generated this message. + The message to log. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + All internal warning messages are prepended with + the string "log4net:WARN ". - - - + - Log a message object with the level. + Writes log4net internal warning messages to the + standard error stream. - The logger on which the message is logged. - The lambda expression that gets the object to log. + The Type that generated this message. + The message to log. + An exception 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. + All internal warning messages are prepended with + the string "log4net:WARN ". - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Test if LogLog.Error is enabled for output. - 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. + + true if Error is enabled + - See the form for more detailed information. + Test if LogLog.Error is enabled for output. - - - - Log a message object with the level. //TODO + - Log a message object with the level. + Writes log4net internal error messages to the + standard error stream. - The logger on which the message is logged. - The message object to log. + The Type that generated this message. + The message 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. + All internal error messages are prepended with + the string "log4net:ERROR ". - - - + - Log a message object with the level including - the stack trace of the passed - as a parameter. + Writes log4net internal error messages to the + standard error stream. - The logger on which the message is logged. - The message object to log. - The exception to log, including its stack trace. + The Type that generated this message. + The message to log. + An exception to log. - See the form for more detailed information. + All internal debug messages are prepended with + the string "log4net:ERROR ". - - - + - Logs a formatted message string with the level. + Writes output to the standard output stream. - The logger on which the message is logged. - A String containing zero or more format items - An Object to format + The message to log. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Writes output to the standard error stream. - 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 to log. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + 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. - - - + - Logs a formatted message string with the level. + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + Subscribes to the LogLog.LogReceived event and stores messages + to the supplied IList instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a native error code and message. - 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. + Represents a Win32 platform native error. - - + Nicko Cadell + Gert Driesen - + - Logs a formatted message string with the level. + Create an instance of the class with the specified + error number and message. - 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 number of the native error. + The message of the native error. - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Create an instance of the class with the specified + error number and message. - - - + - Logs a formatted message string with the level. + Gets the number of the native error. - 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 number of the native error. + - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. + Gets the number of the native error. - - - + - Manages a mapping from levels to + Gets the message of the native error. + + The message of the native error. + - Manages an ordered mapping from instances - to subclasses. + Gets the message of the native error. - Nicko Cadell - + - Default constructor + Create a new instance of the class for the last Windows error. + + An instance of the class for the last windows error. + - Initialise a new instance of . + The message for the error number is lookup up using the + native Win32 FormatMessage function. - + - Add a to this mapping + Create a new instance of the class. - the entry to add + the error number for the native error + + An instance of the class for the specified + error number. + - If a has previously been added - for the same then that entry will be - overwritten. + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. - + - Lookup the mapping for the specified level + Retrieves the message corresponding with a Win32 message identifier. - the level to lookup - the for the level or null if no mapping found + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + - 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. + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. - + - Initialize options + Return error information string + error information string - Caches the sorted list of in an array + Return error information string - + - Implementation of Properties collection for the + 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. - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . + 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. - This class stores its properties in a slot on the named - log4net.Util.LogicalThreadContextProperties. + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + - For .NET Standard 1.3 this class uses - System.Threading.AsyncLocal rather than . + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. - 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. + If the function fails, the return value is zero. To get extended error information, + call . - - Nicko Cadell - - - - Flag used to disable this context if we don't have permission to access the CallContext. - + - + - Constructor + An always empty . - Initializes a new instance of the class. + A singleton implementation of the over a collection + that is empty and not modifiable. + Nicko Cadell + Gert Driesen - + - Remove a property + Initializes a new instance of the class. - the key for the entry to remove - Remove the value for the specified from the context. + Uses a private access modifier to enforce the singleton pattern. - + - Clear all the context properties + Gets the singleton instance of the . + The singleton instance of the . - Clear all the context properties + Gets the singleton instance of the . - + - Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + Gets the current object from the enumerator. - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread + + Throws an because the + never has a current value. + - 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. + 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 call context get data. + Test if the enumerator can advance, if so advance. - The peroperties dictionary stored in the call context + false as the cannot advance. - 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. + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + - + - Sets the call context data. + Resets the enumerator back to the start. - 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. + + As the enumerator is over an empty collection does nothing. + - + - The fully qualified type of the LogicalThreadContextProperties class. + Gets the current key from the enumerator. - Used by the internal logger to record the Type of the - log message. + Throws an exception because the + never has a current value. - - - - 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. + 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. - - - Delegate type used for LogicalThreadContextStack's callbacks. - - - + - Implementation of Stack for the + Gets the current value from the enumerator. + The current value from the enumerator. + + Throws an because the + never has a current value. + - Implementation of Stack for the + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . - Nicko Cadell - - - - The stack store. - + The collection is empty and + cannot be positioned over a valid location. - + - The name of this within the - . + 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. - + - The callback used to let the register a - new instance of a . + The singleton instance of the . - + - Internal constructor + An always empty . - Initializes a new instance of the class. + A singleton implementation of the over a collection + that is empty and not modifiable. + Nicko Cadell + Gert Driesen - + - Clears all the contextual information held in this stack. + Initializes a new instance of the class. - 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. + Uses a private access modifier to enforce the singleton pattern. - + - Removes the top context from this stack. + Get the singleton instance of the . - The message in the context that was removed from the top of this stack. + The singleton instance of the . - 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. + Gets the singleton instance of the . - + - Pushes a new context message into this stack. + Gets the current object from the enumerator. - The new context message. - - An that can be used to clean up the context stack. - + + Throws an because the + never has a current value. + - 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. + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . - 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. + The collection is empty and + cannot be positioned over a valid location. - + - Gets the current context information for this stack. + Test if the enumerator can advance, if so advance - Gets the current context information + false as the cannot advance. - Gets the current context information for this stack. + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. - + - Get a portable version of this object + Resets the enumerator back to the start. - the portable instance of this object - Get a cross thread portable version of this object + As the enumerator is over an empty collection does nothing. - + - The number of messages in the stack + The singleton instance of the . + + + + + A SecurityContext used when a SecurityContext is not required - - 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. + 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 - + - Gets and sets the internal stack used by this + Singleton instance of - The internal storage stack - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. + Singleton instance of - + - Inner class used to represent a single context frame in the stack. + Private constructor - Inner class used to represent a single context frame in the stack. + Private constructor for singleton pattern. - + - Constructor + Impersonate this SecurityContext - The message for this context. - The parent context in the chain. + State supplied by the caller + null - Initializes a new instance of the class - with the specified message and parent context. + No impersonation is done and null is always returned. - + - Get the message. + 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 message. - Get the message. + 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 - + - Gets the full text of the context down to the root level. + Default Constructor - - The full text of the context down to the root level. - - Gets the full text of the context down to the root level. + Initializes a new instance of the class. - + - Struct returned from the method. + Constructor + The prefix to use for each message. - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. + Initializes a new instance of the class + with the specified prefix. - + - The depth to trim the stack to when this instance is disposed + Reset the error handler back to its initial disabled state. - + - The outer LogicalThreadContextStack. + 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. + + - + - Constructor + Log the very first error - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. + The error message. + The exception. + The internal error code. - Initializes a new instance of the class with - the specified stack and return depth. + Sends the error information to 's Error method. - + - Returns the stack to the correct depth. + Log an Error + The error message. + The exception. - Returns the stack to the correct depth. + Invokes if and only if this is the first error or the first error after has been called. - + - Implementation of Stacks collection for the + Log an error + The error message. - Implementation of Stacks collection for the + Invokes if and only if this is the first error or the first error after has been called. - Nicko Cadell - + - Internal constructor + Is error logging enabled - Initializes a new instance of the class. + Is error logging enabled. Logging is only enabled for the + first error delivered to the . - + - The fully qualified type of the ThreadContextStacks class. + 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. - Used by the internal logger to record the Type of the - log message. + May be . - + - Gets the named thread context stack + The error code from the first error that trigged this error handler. - - The named stack - - - Gets the named thread context stack - + Defaults to - + - + The UTC date the error was recorded. - - - + - Outputs log statements from within the log4net assembly. + Flag to indicate if it is the first error - - - 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. + The message recorded during the first error. - - + - Initializes a new instance of the class. + The exception recorded during the first error. - - - - - + - Static constructor that initializes logging by reading - settings from the application configuration file. + The error code recorded during the first error. + + + + + String to prefix each message with + + + + + The fully qualified type of the OnlyOnceErrorHandler class. - - 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. - + Used by the internal logger to record the Type of the + log message. - + - Raises the LogReceived event when an internal messages is received. + A convenience class to convert property values to specific types. - - - - + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen - + - Writes log4net internal debug messages to the - standard output stream. + Initializes a new instance of the class. - - The message to log. - All internal debug messages are prepended with - the string "log4net: ". + Uses a private access modifier to prevent instantiation of this class. - + - Writes log4net internal debug messages to the - standard output stream. + Converts a string to a value. - The Type that generated this message. - The message to log. - An exception to log. + String to convert. + The default value. + The value of . - All internal debug messages are prepended with - the string "log4net: ". + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. - + - Writes log4net internal warning messages to the - standard error stream. + Parses a file size into a number. - The Type that generated this message. - The message to log. + String to parse. + The default value. + The value of . - All internal warning messages are prepended with - the string "log4net:WARN ". + 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. - + - Writes log4net internal warning messages to the - standard error stream. + Converts a string to an object. - The Type that generated this message. - The message to log. - An exception to log. + 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. + - All internal warning messages are prepended with - the string "log4net:WARN ". + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. - + - Writes log4net internal error messages to the - standard error stream. + Checks if there is an appropriate type conversion from the source type to the target type. - The Type that generated this message. - The message to log. + 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. - All internal error messages are prepended with - the string "log4net:ERROR ". - + - Writes log4net internal error messages to the - standard error stream. + Converts an object to the target type. - The Type that generated this message. - The message to log. - An exception to log. + The object to convert to the target type. + The type to convert to. + The converted object. - All internal debug messages are prepended with - the string "log4net:ERROR ". + Converts an object to the target type. - + - Writes output to the standard output stream. + Instantiates an object given a class name. - The message to log. + 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. + - 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. + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. - + - Writes output to the standard error stream. + Performs variable substitution in string from the + values of keys found in . - The message to log. + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. - Writes to both Console.Error and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. + The variable substitution delimiters are ${ and }. - 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. + 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 "}". - - - 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. + 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 . - + - A string indicating the severity of the internal message. + The fully qualified type of the OptionConverter class. - "log4net: ", - "log4net:ERROR ", - "log4net:WARN " + Used by the internal logger to record the Type of the + log message. - + - The internal log message. + 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 - + - The Exception related to the message. + Protected constructor - Optional. Will be null if no Exception was passed. + + Initializes a new instance of the class. + - + - Gets or sets a value indicating whether log4net internal logging - is enabled or disabled. + Get the next pattern converter in the chain - true if log4net internal logging is enabled, otherwise - false. + the next pattern converter in the chain - 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. + Get the next pattern converter in the chain - - - 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. + Gets or sets the formatting info for this converter - true if log4net should generate no output at all from internal - logging, otherwise false. + The formatting info for this converter - 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. + Gets or sets the formatting info for this converter + + + + + Gets or sets the option value for this converter + + + The option for this converter + + - The default value is false, i.e. internal logging is not - disabled. + Gets or sets the option value for this converter - - The following example disables internal logging using the - application configuration file : - - - - - - - - - + - + 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. + + - + - Test if LogLog.Debug is enabled for output. + Set the next pattern converter in the chains - - true if Debug is enabled - + the pattern converter that should follow this converter in the chain + the next converter - Test if LogLog.Debug is enabled for output. + 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. - + - Test if LogLog.Warn is enabled for output. + Write the pattern converter to the writer with appropriate formatting - - true if Warn is enabled - + that will receive the formatted result. + The state object on which the pattern converter should be executed. - Test if LogLog.Warn is enabled for output. + 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. - + - Test if LogLog.Error is enabled for output. + Fast space padding method. - - true if Error is enabled - + to which the spaces will be appended. + The number of spaces to be padded. - Test if LogLog.Error is enabled for output. + Fast space padding method. - + - Subscribes to the LogLog.LogReceived event and stores messages - to the supplied IList instance. + The option string to the converter - + - + Initial buffer size - - + - + Maximum buffer size before it is recycled - + - + 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. + + - + - + - Represents a native error code and message. + Most of the work of the class + is delegated to the PatternParser class. - Represents a Win32 platform native error. + The PatternParser processes a pattern string and + returns a chain of objects. Nicko Cadell Gert Driesen - + - Create an instance of the class with the specified - error number and message. + Constructor - The number of the native error. - The message of the native error. + The pattern to parse. - Create an instance of the class with the specified - error number and message. + Initializes a new instance of the class + with the specified pattern string. - + - Create a new instance of the class for the last Windows error. + Parses the pattern into a chain of pattern converters. - - An instance of the class for the last windows error. - + The head of a chain of pattern converters. - The message for the error number is lookup up using the - native Win32 FormatMessage function. + Parses the pattern into a chain of pattern converters. - + - Create a new instance of the class. + Get the converter registry used by this parser - the error number for the native error - - An instance of the class for the specified - error number. - + + The converter registry used by this parser + - The message for the specified error number is lookup up using the - native Win32 FormatMessage function. + Get the converter registry used by this parser - + - Retrieves the message corresponding with a Win32 message identifier. + Build the unified cache of converters from the static and instance maps - Message identifier for the requested message. - - The message corresponding with the specified message identifier. - + the list of all the converter names - The message will be searched for in system message-table resource(s) - using the native FormatMessage function. + Build the unified cache of converters from the static and instance maps - + - Return error information string + Sort strings by length - error information string - Return error information string + that orders strings by string length. + The longest strings are placed first - + - Formats a message string. + Internal method to parse the specified pattern to find specified matches - 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 pattern to parse + the converter names to match in the pattern - 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. + The matches param must be sorted such that longer strings come before shorter ones. - - - 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. + Process a parsed literal - - The number of the native error. - - - - Gets the number of the native error. - - + the literal text - + - Gets the message of the native error. + Process a parsed converter pattern - - The message of the native error. - - - - - Gets the message of the native error. - + 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 + + + - An always empty . + Internal map of converter identifiers to converter types - A singleton implementation of the over a collection - that is empty and not modifiable. + This map overrides the static s_globalRulesRegistry map. - Nicko Cadell - Gert Driesen - + - Initializes a new instance of the class. + The fully qualified type of the PatternParser class. - - Uses a private access modifier to enforce the singleton pattern. - + Used by the internal logger to record the Type of the + log message. - + - Test if the enumerator can advance, if so advance. + This class implements a patterned string. - 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. + 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 - + - Resets the enumerator back to the start. + Internal map of converter identifiers to converter types. - - - As the enumerator is over an empty collection does nothing. - - - + - The singleton instance of the . + the pattern - + - Gets the singleton instance of the . + the head of the pattern converter chain - The singleton instance of the . - - - Gets the singleton instance of the . - - - + - Gets the current object from the enumerator. + patterns defined on this PatternString only - - 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. + Initialize the global registry + + + + + Default constructor - - 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 . + Initialize a new instance of - The collection is empty and - cannot be positioned over a valid location. - + - Gets the current value from the enumerator. + Constructs a PatternString - The current value from the enumerator. - - Throws an because the - never has a current value. - + The pattern to use with this PatternString - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . + Initialize a new instance of with the pattern specified. - The collection is empty and - cannot be positioned over a valid location. - + - Gets the current entry from the enumerator. + Gets or sets the pattern formatting string - - Throws an because the - never has a current entry. - + + The pattern formatting string + - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. - The collection is empty and - cannot be positioned over a valid location. - + - An always empty . + Initialize object options - A singleton implementation of the over a collection - that is empty and not modifiable. + 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. - Nicko Cadell - Gert Driesen - + - Initializes a new instance of the class. + Create the used to parse the pattern + the pattern to parse + The - Uses a private access modifier to enforce the singleton pattern. + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. - + - Test if the enumerator can advance, if so advance + Produces a formatted string as specified by the conversion pattern. - false as the cannot advance. + The TextWriter to write the formatted event to - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. + Format the pattern to the . - + - Resets the enumerator back to the start. + Format the pattern as a string + the pattern formatted as a string - As the enumerator is over an empty collection does nothing. + Format the pattern to a string. - - - The singleton instance of the . - - - + - Get the singleton instance of the . + Add a converter to this PatternString - The singleton instance of the . + the converter info - Gets the singleton instance of the . + This version of the method is used by the configurator. + Programmatic users should use the alternative method. - + - Gets the current object from the enumerator. + Add a converter to this PatternString - - Throws an because the - never has a current value. - + the name of the conversion pattern for this converter + the type of the converter - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . + Add a converter to this PatternString - The collection is empty and - cannot be positioned over a valid location. - + - A SecurityContext used when a SecurityContext is not required + Write the name of the current AppDomain to the output - The is a no-op implementation of the - base class. It is used where a - is required but one has not been provided. + Write the name of the current AppDomain to the output writer Nicko Cadell - + - Singleton instance of + Write the name of the current AppDomain to the output + the writer to write to + null, state is not set - Singleton instance of + Writes name of the current AppDomain to the output . - + - Private constructor + AppSetting pattern converter - Private constructor for singleton pattern. + 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. + + + + + ... + + + ]]> + - + - Impersonate this SecurityContext + Write the property value to the output - State supplied by the caller - null + that will receive the formatted result. + null, state is not set - No impersonation is done and null is always returned. + 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. - + - 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. + Write the current date to the output - The error message is processed using the LogLog sub-system by default. + Date pattern converter, uses a to format + the current date and time to the writer as a string. - This policy aims at protecting an otherwise working application - from being flooded with error messages when logging fails. + 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 - Gert Driesen - Ron Grabowski - + - Default Constructor + The used to render the date to a string - Initializes a new instance of the class. + The used to render the date to a string - + - Constructor + Initialize the converter options - The prefix to use for each message. - Initializes a new instance of the class - with the specified prefix. + 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. - - - Reset the error handler back to its initial disabled state. - - - + - Log an Error + Write the current date to the output - The error message. - The exception. - The internal error code. + that will receive the formatted result. + null, state is not set - Invokes if and only if this is the first error or the first error after has been called. + 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. - + - Log the very first error + The fully qualified type of the DatePatternConverter class. - The error message. - The exception. - The internal error code. - - Sends the error information to 's Error method. - + Used by the internal logger to record the Type of the + log message. - + - Log an Error + Write an folder path to the output - The error message. - The exception. - Invokes if and only if this is the first error or the first error after has been called. + 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 - + - Log an error + Write an special path environment folder path to the output - The error message. + the writer to write to + null, state is not set - Invokes if and only if this is the first error or the first error after has been called. + 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 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. + The fully qualified type of the EnvironmentFolderPathPatternConverter class. Used by the internal logger to record the Type of the log message. - + - Is error logging enabled + Write an environment variable to the output - Is error logging enabled. Logging is only enabled for the - first error delivered to the . + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + Nicko Cadell - + - The date the first error that trigged this error handler occurred, or if it has not been triggered. + 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 UTC date the first error that trigged this error handler occured, or if it has not been triggered. + The fully qualified type of the EnvironmentPatternConverter class. + + Used by the internal logger to record the Type of the + log message. + - + - The message from the first error that trigged this error handler. + Write the current thread identity to the output + + + Write the current thread identity to the output writer + + + Nicko Cadell - + - The exception from the first error that trigged this error handler. + Write the current thread identity to the output + the writer to write to + null, state is not set - May be . + + Writes the current thread identity to the output . + - + - The error code from the first error that trigged this error handler. + The fully qualified type of the IdentityPatternConverter class. - Defaults to + Used by the internal logger to record the Type of the + log message. - + - A convenience class to convert property values to specific types. + Pattern converter for literal string instances in the pattern - Utility functions for converting types and parsing values. + Writes the literal string value specified in the + property to + the output. Nicko Cadell - Gert Driesen - + - Initializes a new instance of the class. + Set the next converter in the chain + The next pattern converter in the chain + The next pattern converter - Uses a private access modifier to prevent instantiation of this class. + 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. - + - Converts a string to a value. + Write the literal to the output - String to convert. - The default value. - The value of . + the writer to write to + null, not set - If is "true", then true is returned. - If is "false", then false is returned. - Otherwise, is returned. + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . - + - Parses a file size into a number. + Convert this pattern into the rendered message - String to parse. - The default value. - The value of . + that will receive the formatted result. + null, not set - 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. + This method is not used. - + - Converts a string to an object. + Writes a newline to the output - 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. + 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 - + - Checks if there is an appropriate type conversion from the source type to the target type. + Initialize the converter - 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. + 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. - + - Converts an object to the target type. + Write the current process ID to the output - The object to convert to the target type. - The type to convert to. - The converted object. - Converts an object to the target type. + Write the current process ID to the output writer + Nicko Cadell - + - Instantiates an object given a class name. + Write the current process ID to the output - 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. - + the writer to write to + null, state is not set - Checks that the is a subclass of - . If that test fails or the object could - not be instantiated, then is returned. + Write the current process ID to the output . - + - Performs variable substitution in string from the - values of keys found in . + The fully qualified type of the ProcessIdPatternConverter class. + + + Used by the internal logger to record the Type of the + log message. + + + + + Property pattern converter - 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 }. + 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. - For example, if props contains key=value, then the call + 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 + - - string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); - + Writes out the value of a named property. The property name + should be set in the + property. - will set the variable s to "Value of key is value.". + 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 + + - If no value could be found for the specified key, then substitution - defaults to an empty string. + 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. - For example, if system properties contains no value for the key - "nonExistentKey", then the call + The random characters in the string are limited to uppercase letters + and numbers only. - - string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); - + 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 + + - will set s to "Value of nonExistentKey is []". + 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. - An Exception is thrown if contains a start - delimiter "${" which is not balanced by a stop delimiter "}". + If any of the configuration properties are modified then + must be called again. - + - Converts the string representation of the name or numeric value of one or - more enumerated constants to an equivalent enumerated object. + Write a randoim string to the output - 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 writer to write to + null, state is not set + + + Write a randoim string to the output . + + - + - The fully qualified type of the OptionConverter class. + The fully qualified type of the RandomStringPatternConverter 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. + Write the current threads username to the output - The PatternParser processes a pattern string and - returns a chain of objects. + Write the current threads username to the output writer Nicko Cadell - Gert Driesen - + - Constructor + Write the current threads username to the output - The pattern to parse. + the writer to write to + null, state is not set - Initializes a new instance of the class - with the specified pattern string. + Write the current threads username to the output . - + - Parses the pattern into a chain of pattern converters. + The fully qualified type of the UserNamePatternConverter class. - The head of a chain of pattern converters. - - Parses the pattern into a chain of pattern converters. - + Used by the internal logger to record the Type of the + log message. - + - Build the unified cache of converters from the static and instance maps + Write the UTC date time to the output - the list of all the converter names - Build the unified cache of converters from the static and instance maps + Date pattern converter, uses a to format + the current date and time in Universal time. - - - - - 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. + See the for details on the date pattern syntax. + + Nicko Cadell - - - 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 + Write the current date and time to the output + that will receive the formatted result. + null, state is not set - This map overrides the static s_globalRulesRegistry map. + 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 PatternParser class. + The fully qualified type of the UtcDatePatternConverter class. Used by the internal logger to record the Type of the log message. - + - Get the converter registry used by this parser + String keyed object map. - - The converter registry used by this parser - - Get the converter registry used by this parser + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + Nicko Cadell + Gert Driesen - + - Sort strings by length + Constructor - that orders strings by string length. - The longest strings are placed first + Initializes a new instance of the class. - + - This class implements a patterned string. + Constructor + properties to copy - 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. + Initializes a new instance of the class. - 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 + 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. - Initialize a new instance of + Because this class is sealed the serialization constructor is private. - + - Constructs a PatternString + Gets or sets the value of the property with the specified key. - The pattern to use with this PatternString + + The value of the property with the specified key. + + The key of the property to get or set. - Initialize a new instance of with the pattern specified. + 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. - + - Initialize object options + Remove the entry with the specified key from this dictionary + the key for the entry to remove - 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. + Remove the entry with the specified key from this dictionary - + - Create the used to parse the pattern + See - the pattern to parse - The + an enumerator - Returns PatternParser used to parse the conversion string. Subclasses - may override this to return a subclass of PatternParser which recognize - custom conversion pattern name. + Returns a over the contest of this collection. - + - Produces a formatted string as specified by the conversion pattern. + See - The TextWriter to write the formatted event to + the key to remove - Format the pattern to the . + Remove the entry with the specified key from this dictionary - + - Format the pattern as a string + See - the pattern formatted as a string + the key to lookup in the collection + true if the collection contains the specified key - Format the pattern to a string. + Test if this collection contains a specified key. - + - Add a converter to this PatternString + Remove all properties from the properties collection - the converter info - This version of the method is used by the configurator. - Programmatic users should use the alternative method. + Remove all properties from the properties collection - + - Add a converter to this PatternString + See - the name of the conversion pattern for this converter - the type of the converter + the key + the value to store for the key - Add a converter to this PatternString + Store a value for the specified . + Thrown if the is not a string - + - Gets or sets the pattern formatting string + See - The pattern formatting string + false - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. + This collection is modifiable. This property always + returns false. - + - String keyed object map. + See + + The value for the key specified. + - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. + Get or set a value for the specified . - Nicko Cadell - Gert Driesen + Thrown if the is not a string - + - String keyed object map that is read only. + See - - - 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 + See - + - Constructor + See - - - Initializes a new instance of the class. - - - + - Copy Constructor + See - properties to copy - - - Initializes a new instance of the class. - - + + - + - Deserialization constructor + See - 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. + See + + + + + See + + + + + A class to hold the key and data for a property set in the config file - An array of all the keys. - Gets the key names. + A class to hold the key and data for a property set in the config file - + - Test if the dictionary contains a specified key + Property Key - the key to look for - true if the dictionary contains the specified key + + Property Key + - Test if the dictionary contains a specified key + Property Key. - + - Serializes this object into the provided. + Property Value - The to populate with data. - The destination for this serialization. + + Property Value + - Serializes this object into the provided. + Property Value. - + - See + Override Object.ToString to return sensible debug info + string info about this object - + - See + 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 - + - See + Constructor - - + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + - + - Remove all properties from the properties collection + Attach this instance to a different underlying + the writer to attach to + + + Attach this instance to a different underlying + + - + - See + Does not close the underlying output writer. - - + + + Does not close the underlying output writer. + This method does nothing. + + - + - See + that does not leak exceptions - - + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen - + - See + Constructor + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + - + - Gets or sets the value of the property with the specified key. + Gets or sets the error handler that all errors are passed to. - The value of the property with the specified key. + The error handler that all errors are passed to. - 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. + Gets or sets the error handler that all errors are passed to. - + - The hashtable used to store the properties + Gets a value indicating whether this writer is closed. - The internal collection used to store the properties + true if this writer is closed, otherwise false. - The hashtable used to store the properties + Gets a value indicating whether this writer is closed. - - - See - - - - - See - - - + - See + Writes a character to the underlying writer + the char to write + + + Writes a character to the underlying writer + + - + - See + 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 + + - + - See + Writes a string to the output. + The string data to write to the output. + + + Writes a string to the output. + + - + - See + Closes the underlying output writer. + + + Closes the underlying output writer. + + - + - The number of properties in this collection + The error handler instance to pass all errors to - + - See + Flag to indicate if this writer is closed - + - Constructor + Defines a lock that supports single writers and multiple readers - Initializes a new instance of the class. + 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 - properties to copy - Initializes a new instance of the class. + Initializes a new instance of the class. - + - Initializes a new instance of the class - with serialized data. + Acquires a reader lock - 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. + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. - + - Remove the entry with the specified key from this dictionary + Decrements the lock count - the key for the entry to remove - Remove the entry with the specified key from this dictionary + decrements the lock count. When the count + reaches zero, the lock is released. - + - See + Acquires the writer lock - an enumerator - Returns a over the contest of this collection. + This method blocks if another thread has a reader lock or writer lock. - + - See + Decrements the lock count on the writer lock - the key to remove - Remove the entry with the specified key from this dictionary + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. - + - See + String keyed object map that is read only. - the key to lookup in the collection - true if the collection contains the specified key - Test if this collection contains a specified key. + 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 - + - Remove all properties from the properties collection + The Hashtable used to store the properties data + + + + + Constructor - Remove all properties from the properties collection + Initializes a new instance of the class. - + - See + Copy Constructor - the key - the value to store for the key + properties to copy - Store a value for the specified . + Initializes a new instance of the class. - Thrown if the is not a string - + - See + 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. + + - + - See + Gets the key names. + An array of all the keys. + + + Gets the key names. + + - + Gets or sets the value of the property with the specified key. @@ -29706,297 +30292,391 @@ - + - See + Test if the dictionary contains a specified key - - false - + the key to look for + true if the dictionary contains the specified key - This collection is modifiable. This property always - returns false. + Test if the dictionary contains a specified key - + - See + The hashtable used to store the properties - The value for the key specified. + The internal collection used to store the properties - Get or set a value for the specified . + The hashtable used to store the properties - Thrown if the is not a string - + + + 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 + + + See - + See - + See - + - See + See + + - + - See + See - + - A class to hold the key and data for a property set in the config file + The number of properties in this collection - - - A class to hold the key and data for a property set in the config file - - - + - Override Object.ToString to return sensible debug info + See - string info about this object - + - Property Key + See - - Property Key - - - - Property Key. - - - + - Property Value + A that can be and reused - - Property Value - - Property Value. + A that can be and reused. + This uses a single buffer for string operations. + Nicko Cadell - + - A that ignores the message + Create an instance of + the format provider to use - This writer is used in special cases where it is necessary - to protect a writer from being closed by a client. + Create an instance of - Nicko Cadell - + - Constructor + Override Dispose to prevent closing of writer - the writer to actually write to + flag - Create a new ProtectCloseTextWriter using a writer + Override Dispose to prevent closing of writer - + - Attach this instance to a different underlying + Reset this string writer so that it can be reused. - the writer to attach to + the maximum buffer capacity before it is trimmed + the default size to make the buffer - Attach this instance to a different underlying + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. - + - Does not close the underlying output writer. + Utility class for system specific information. - Does not close the underlying output writer. - This method does nothing. + Utility class of static methods for system specific information. + Nicko Cadell + Gert Driesen + Alexey Solofnenko - + - Defines a lock that supports single writers and multiple readers + Private constructor to prevent instances. - 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. + Only static methods are exposed from this type. - Nicko Cadell - + - Constructor + Initialize default values for private static fields. - Initializes a new instance of the class. + Only static methods are exposed from this type. - + - Acquires a reader lock + Gets the system dependent line terminator. + + The system dependent line terminator. + - blocks if a different thread has the writer - lock, or if at least one thread is waiting for the writer lock. + Gets the system dependent line terminator. - + - Decrements the lock count + Gets the base directory for this . + The base directory path for the current . - decrements the lock count. When the count - reaches zero, the lock is released. + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. - + - Acquires the writer lock + Gets the path to the configuration file for the current . + The path to the configuration file for the current . - This method blocks if another thread has a reader lock or writer lock. + 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. - + - Decrements the lock count on the writer lock + Gets the path to the file that first executed in the current . + The path to the entry assembly. - ReleaseWriterLock decrements the writer lock count. - When the count reaches zero, the writer lock is released. + Gets the path to the file that first executed in the current . - + - A that can be and reused + Gets the ID of the current thread. + The ID of the current thread. - A that can be and reused. - This uses a single buffer for string operations. + 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. - Nicko Cadell - + - Create an instance of + Get the host name or machine name for the current machine - the format provider to use + + The hostname or machine name + - Create an instance of + 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. - + - Override Dispose to prevent closing of writer + Get this application's friendly name - flag + + The friendly name of this application as a string + - Override Dispose to prevent closing of writer + 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. - + - Reset this string writer so that it can be reused. + Get the start time for the current process. - 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. + 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. - + - Utility class for system specific information. + Get the UTC start time for the current process. - Utility class of static methods for system specific information. + 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. - Nicko Cadell - Gert Driesen - Alexey Solofnenko - + - Private constructor to prevent instances. + Text to output when a null is encountered. - Only static methods are exposed from this type. + 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. - + - Initialize default values for private static fields. + Text to output when an unsupported feature is requested. - Only static methods are exposed from this type. + 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. @@ -30016,12 +30696,12 @@ - Gets the fully qualified name of the , including - the name of the assembly from which the was + 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 . + The to get the fully qualified name for. + The fully qualified name for the . This is equivalent to the Type.AssemblyQualifiedName property, @@ -30032,13 +30712,13 @@ - Gets the short name of the . + Gets the short name of the . - The to get the name for. - The short name of the . + The to get the name for. + The short name of the . - The short name of the assembly is 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. @@ -30049,20 +30729,20 @@ 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 + 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. + Gets the file name portion of the , including the extension. - The to get the file name for. + The to get the file name for. The file name of the assembly. - Gets the file name portion of the , including the extension. + Gets the file name portion of the , including the extension. @@ -30095,7 +30775,7 @@ 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. + 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 @@ -30153,1187 +30833,768 @@ 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 + with a specified error message, the parameter name, and the value + of the argument. - 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. + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. - + - Get this application's friendly name + Parse a string into an value - - The friendly name of this application as a string - + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer - 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. + 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. - + - Get the start time for the current process. + 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 - 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. + 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. - + - Get the UTC start time for the current process. + 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 - 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. + 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. - + - Text to output when a null is encountered. + Lookup an application setting + the application settings key to lookup + the value for the key, or null - 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. + Configuration APIs are not supported under the Compact Framework - + - Text to output when an unsupported feature is requested. + Convert a path into a fully qualified local file path. + The path to convert. + The fully qualified path. - Use this value when an unsupported feature is requested. + 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 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. + The path specified must be a local file path, a URI is not supported. - + - Utility class that represents a format string. + 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 - Utility class that represents a format string. + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. - 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 + Tests two strings for equality, the ignoring case. - the formatted string + + 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. - + - 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. + Gets an empty array of types. - 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. + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. - - - Process an error during StringFormat - - - + - Dump the contents of an array into a string builder + The fully qualified type of the SystemInfo class. + + Used by the internal logger to record the Type of the + log message. + - + - Dump an object to a string + Cache the host name for the current machine - + - The fully qualified type of the SystemStringFormat class. + Cache the application friendly name - - Used by the internal logger to record the Type of the - log message. - - + - Implementation of Properties collection for the + Text to output when a null is encountered. - - - 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. + Text to output when an unsupported feature is requested. - + - Internal constructor + Start time for the current process. - - - Initializes a new instance of the class. - - - + - Remove a property + Utility class that represents a format string. - the key for the entry to remove - Remove a property + Utility class that represents a format string. + Nicko Cadell - + - Get the keys stored in the properties. + Format - - Gets the keys stored in the properties. - - a set of the defined keys - + - Clear all properties + Args - - - Clear all properties - - - + - Get the PropertiesDictionary for this thread. + Initialise the - 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. - - + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. - + - Gets or sets the value of a property + Format the string and arguments - - The value for the property with the specified key - - - - Gets or sets the value of a property - - + the formatted string - + - Implementation of Stack for the + 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. + - Implementation of Stack for the + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. - Nicko Cadell - + - The stack store. + Process an error during StringFormat - + - Internal constructor + Dump the contents of an array into a string builder - - - Initializes a new instance of the class. - - - + - Clears all the contextual information held in this stack. + Dump an object to a string - - - 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 fully qualified type of the SystemStringFormat class. - 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. - + Used by the internal logger to record the Type of the + log message. - + - Pushes a new context message into this stack. + Adapter that extends and forwards all + messages to an instance of . - 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. + Adapter that extends and forwards all + messages to an instance of . - 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"); - } - - + Nicko Cadell - + - Gets the current context information for this stack. + The writer to forward messages to - The current context information. - + - Gets the current context information for this stack. + Create an instance of that forwards all + messages to a . - Gets the current context information + The to forward to - Gets the current context information for this stack. + Create an instance of that forwards all + messages to a . - + - Get a portable version of this object + Gets or sets the underlying . - the portable instance of this object + + The underlying . + - Get a cross thread portable version of this object + Gets or sets the underlying . - + - The number of messages in the stack + The Encoding in which the output is written - The current number of messages in the stack + The - 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. + The Encoding in which the output is written - + - Gets and sets the internal stack used by this + Gets an object that controls formatting - The internal storage stack + + The format provider + - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. + Gets an object that controls formatting - + - Inner class used to represent a single context frame in the stack. + Gets or sets the line terminator string used by the TextWriter + + The line terminator to use + - Inner class used to represent a single context frame in the stack. + Gets or sets the line terminator string used by the TextWriter - + - Constructor + Closes the writer and releases any system resources associated with the writer - 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. + Dispose this writer - The message. + flag indicating if we are being disposed - Get the message. + Dispose this writer - + - Gets the full text of the context down to the root level. + Flushes any buffered output - - The full text of the context down to the root level. - - Gets the full text of the context down to the root level. + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device - + - Struct returned from the method. + Writes a character to the wrapped TextWriter + the value to write to the TextWriter - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. + Writes a character to the wrapped TextWriter - - - The ThreadContextStack internal stack - - - - - The depth to trim the stack to when this instance is disposed - - - + - Constructor + Writes a character buffer to the wrapped TextWriter - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. + the data buffer + the start index + the number of characters to write - Initializes a new instance of the class with - the specified stack and return depth. + Writes a character buffer to the wrapped TextWriter - + - Returns the stack to the correct depth. + Writes a string to the wrapped TextWriter + the value to write to the TextWriter - Returns the stack to the correct depth. + Writes a string to the wrapped TextWriter - + - Implementation of Stacks collection for the + Implementation of Properties collection for the - Implementation of Stacks 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 - + - Internal constructor + Each thread will automatically have its instance. - - - Initializes a new instance of the class. - - - + - The fully qualified type of the ThreadContextStacks class. + Internal constructor - Used by the internal logger to record the Type of the - log message. + + Initializes a new instance of the class. + - + - Gets the named thread context stack + Gets or sets the value of a property - The named stack + The value for the property with the specified key - Gets the named thread context stack + Gets or sets the value of a property - + - Utility class for transforming strings. + Remove a property + the key for the entry to remove - Utility class for transforming strings. + Remove a property - Nicko Cadell - Gert Driesen - + - Initializes a new instance of the class. + Get the keys stored in the properties. - - Uses a private access modifier to prevent instantiation of this class. + Gets the keys stored in the properties. - + a set of the defined keys - + - Write a string to an + Clear all properties - 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. + Clear all properties - + - Replace invalid XML characters in text string + Get the PropertiesDictionary for this thread. - the XML text input string - the string to use in place of invalid characters - A string that does not contain invalid XML characters. + create the dictionary if it does not exist, otherwise return null if does not exist + the properties for this thread - 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. + 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. - + - Count the number of times that the substring occurs in the text + Implementation of Stack for the - 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. + Implementation of Stack for the + Nicko Cadell - + - Characters illegal in XML 1.0 + The stack store. - + - Impersonate a Windows Account + Internal constructor - 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. + Initializes a new instance of the class. - + - Default constructor + The number of messages in the stack + + The current number of messages in the stack + - Default constructor + 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. - + - Initialize the SecurityContext based on the options set. + Clears all the contextual information held in this stack. - 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. + 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. + - The security context will try to Logon the specified user account and - capture a primary token for impersonation. + 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. - The required , - or properties were not specified. - + - Impersonate the Windows account specified by the and properties. + Pushes a new context message into this stack. - caller provided state + The new context message. - An instance that will revoke the impersonation of this SecurityContext + An that can be used to clean up the context stack. - Depending on the property either - impersonate a user using credentials supplied or revert - to the process credentials. + 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"); + } + + - + - Create a given the userName, domainName and password. + Returns the top context from this stack. - the user name - the domain name - the password - the for the account specified + The message in the context from the top of this stack. - Uses the Windows API call LogonUser to get a principal token for the account. This - token is used to initialize the WindowsIdentity. + Returns the top context from this stack. If this stack is empty then an + empty string (not ) is returned. - + - Gets or sets the impersonation mode for this security context + Gets the current context information for this stack. - - The impersonation mode for this security context - + The current context information. + + + + Gets and sets the internal stack used by this + + The internal storage stack - 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. + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. - + - Gets or sets the Windows username for this security context + Gets the current context information for this stack. - - The Windows username for this security context - + Gets the current context information - This property must be set if - is set to (the default setting). + Gets the current context information for this stack. - + - Gets or sets the Windows domain name for this security context + Get a portable version of this object - - The Windows domain name for this security context - + the portable instance of this object - 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). + Get a cross thread portable version of this object - + - Sets the password for the Windows account specified by the and properties. + Inner class used to represent a single context frame in the stack. - - The password for the Windows account specified by the and properties. - - This property must be set if - is set to (the default setting). + Inner class used to represent a single context frame in the stack. - + - The impersonation modes for the + Constructor + The message for this context. + The parent context in the chain. - See the property for - details. + Initializes a new instance of the class + with the specified message and parent context. - - - Impersonate a user using the credentials supplied - - - + - Revert this the thread to the credentials of the process + Get the message. + The message. + + + Get the message. + + - + - Adds to + Gets the full text of the context down to the root level. + + The full text of the context down to the root level. + - Helper class to expose the - through the interface. + Gets the full text of the context down to the root level. - + - Constructor + Struct returned from the method. - the impersonation context being wrapped - Constructor + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. - + - Revert the impersonation + 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. - Revert the impersonation + Initializes a new instance of the class with + the specified stack and return depth. - + - The log4net Global Context. + Returns the stack to the correct depth. - 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. + Returns the stack to the correct depth. - - - GlobalContext.Properties["hostname"] = Environment.MachineName; - - - - Nicko Cadell - + - Private Constructor. + Implementation of Stacks collection for the - Uses a private access modifier to prevent instantiation of this class. + + Implementation of Stacks collection for the + + Nicko Cadell - + - The global context properties instance + Internal constructor + + + Initializes a new instance of the class. + + - + - The global properties map. + Gets the named thread context stack - The global properties map. + The named stack - The global properties map. + Gets the named thread context stack - - - 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 fully qualified type of the ThreadContextStacks class. + + Used by the internal logger to record the Type of the + log message. + - + - The log4net Logical Thread Context. + Utility class for transforming strings. - 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. + Utility class for transforming strings. - 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 + Gert Driesen - + - Private Constructor. + Initializes a new instance of the class. @@ -31341,1122 +31602,958 @@ - - - The thread context properties instance - - - + - The thread context stacks instance + 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. + + - + - The thread properties map + Replace invalid XML characters in text string - - The thread properties map - + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. - The LogicalThreadContext properties override any - or properties with the same name. + 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. - + - The thread stacks + Count the number of times that the substring occurs in the text - - stack map - + the text to search + the substring to find + the number of times the substring occurs in the text - The logical thread stacks. + The substring is assumed to be non repeating within itself. - + - This class is used by client applications to request logger instances. + Characters illegal in XML 1.0 + + + + + Type converter for Boolean. - 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. + Supports conversion from string to bool type. - 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. + Can the source type be converted to the type supported by this object + the type to convert + true if the conversion is possible - Uses a private access modifier to prevent instantiation of this class. + + Returns true if the is + the type. + - - Returns the named logger if it exists. + - Returns the named logger if it exists. + Convert the source object to the type supported by this object + the object to convert + the converted object - If the named logger exists (in the default repository) then it - returns a reference to the logger, otherwise it returns null. + Uses the method to convert the + argument to a . - The fully qualified logger name to look for. - The logger found, or null if no logger could be found. + + The object cannot be converted to the + target type. To check for this condition use the + method. + - - Get the currently defined loggers. + - Returns all the currently defined loggers in the default repository. + Exception base type for conversion errors. - The root logger is not included in the returned array. + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + - All the defined loggers. + Nicko Cadell + Gert Driesen - - Get or create a logger. + - Retrieves or creates a named logger. + Constructor - 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. + Initializes a new instance of the class. - The name of the logger to retrieve. - The logger with the name specified. - + - Returns the named logger if it exists. + Constructor + A message to include with the exception. - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. + Initializes a new instance of the class + with the specified message. - 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. + Constructor + A message to include with the exception. + A nested exception to include. - If the named logger exists (in the repository for the specified assembly) then it - returns a reference to the logger, otherwise it returns - null. + Initializes a new instance of the class + with the specified message and inner exception. - 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. + Serialization constructor - The repository to lookup in. + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. - The root logger is not included in the returned array. + + Initializes a new instance of the class + with serialized data. + - All the defined loggers. - + - Returns all the currently defined loggers in the specified assembly's repository. + Creates a new instance of the class. - The assembly to use to lookup the repository. + The conversion destination type. + The value to convert. + An instance of the . - The root logger is not included in the returned array. + + Creates a new instance of the class. + - All the defined loggers. - + - Retrieves or creates a named logger. + Creates a new instance of the class. + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . - 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. + Creates a new instance of the class. - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - + - Retrieves or creates a named logger. + Register of type converters for specific types. - 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. + Maintains a registry of type converters used to convert between + types. - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. + + + Nicko Cadell + Gert Driesen - + - Shorthand for . + Private constructor - Get the logger for the fully qualified name of the type specified. + Initializes a new instance of the class. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - + - Shorthand for . + Static constructor. - Gets the logger for the fully qualified name of the type specified. + + This constructor defines the intrinsic type converters. + - 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 . + Adds a converter for a specific type. + The type being converted to. + The type converter to use to convert to the destination type. - Gets the logger for the fully qualified name of the type specified. + + Adds a converter instance for a specific type. + - 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. + 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. - 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. + Adds a converter for a specific type. - - Shutdown a logger repository. + - Shuts down the default repository. + 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. + - 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. + Gets the type converter to use to convert values to the destination type. - + - Shuts down the repository for the repository specified. + 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. + - 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. + Gets the type converter to use to convert values to the destination type. - The repository to shutdown. - + - Shuts down the repository specified. + Lookups the type converter to use as specified by the attributes on the + destination type. - - - 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. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + - - Reset the configuration of a repository + - Resets all values contained in this repository instance to their defaults. + 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. + - 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. - + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + - + - Resets all values contained in this repository instance to their defaults. + The fully qualified type of the ConverterRegistry class. - - 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. - + Used by the internal logger to record the Type of the + log message. - The repository to reset. - + - Resets all values contained in this repository instance to their defaults. + Mapping from to type converter. - - - 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. + Supports conversion from string to type. - Gets the for the repository specified - by the callers assembly (). + Supports conversion from string to type. - The instance for the default repository. + + + + Nicko Cadell + Gert Driesen - + - Returns the default instance. + Can the source type be converted to the type supported by this object - The default instance. + the type to convert + true if the conversion is possible - - Gets the for the repository specified - by the argument. + + Returns true if the is + the type. - The repository to lookup in. - + - Returns the default instance. + Overrides the ConvertFrom method of IConvertFrom. - The default instance. + the object to convert to an encoding + the encoding - Gets the for the repository specified - by the argument. + Uses the method to + convert the argument to an . - The assembly to use to lookup the repository. + + The object cannot be converted to the + target type. To check for this condition use the + method. + - - Get a logger repository. + - Returns the default instance. + Interface supported by type converters - Gets the for the repository specified - by the callers assembly (). + This interface supports conversion from arbitrary types + to a single target type. See . - The instance for the default repository. + Nicko Cadell + Gert Driesen - + - Returns the default instance. + Can the source type be converted to the type supported by this object - The default instance. + the type to convert + true if the conversion is possible - Gets the for the repository specified - by the argument. + Test if the can be converted to the + type supported by this converter. - The repository to lookup in. - + - Returns the default instance. + Convert the source object to the type supported by this object - The default instance. + the object to convert + the converted object - Gets the for the repository specified - by the argument. + Converts the to the type supported + by this converter. - The assembly to use to lookup the repository. - - Create a domain + - Creates a repository with the specified repository type. + Interface supported by type converters - 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. + This interface supports conversion from a single type to arbitrary types. + See . - 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. + Nicko Cadell - - Create a logger repository. + - Creates a repository with the specified repository type. + Returns whether this converter can convert the object to the specified 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. + A Type that represents the type you want to convert to + true if the conversion is possible - The created will be associated with the repository - specified such that a call to will return - the same repository instance. + Test if the type supported by this converter can be converted to the + . - + - Creates a repository with the specified name. + 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 - 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. + Converts the (which must be of the type supported + by this converter) to the specified.. - 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. + Supports conversion from string to type. - 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. + Supports conversion from string to type. - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. + + + Nicko Cadell - + - Creates a repository with the specified name and repository type. + Can the source type be converted to the type supported by this object + the type to convert + true if the conversion is possible - 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. + Returns true if the is + the 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 specified repository already exists. - + - Creates a repository with the specified name and repository type. + Overrides the ConvertFrom method of IConvertFrom. + the object to convert to an IPAddress + the IPAddress - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. - 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. + + The object cannot be converted to the + target type. To check for this condition use the + method. + - + - Creates a repository for the specified assembly and repository type. + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + Supports conversion from string to 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 string is used as the + of the . - 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. + + + + Nicko Cadell - + - Creates a repository for the specified assembly and repository type. + Can the source type be converted to the type supported by this object + the type to convert + true if the conversion is possible - 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. + Returns true if the is + the 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. - + - Gets the list of currently defined repositories. + Overrides the ConvertFrom method of IConvertFrom. + the object to convert to a PatternLayout + the PatternLayout - Get an array of all the objects that have been created. + Creates and returns a new using + the as the + . - 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. - + + The object cannot be converted to the + target type. To check for this condition use the + method. + - + - Implementation of Mapped Diagnostic Contexts. + Convert between string and - - - 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. + Supports conversion from string to type, + and from a type to a string. - The MDC is managed on a per thread basis. + The string is used as the + of the . - + + + Nicko Cadell - Gert Driesen - + - Initializes a new instance of the class. + 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 - Uses a private access modifier to prevent instantiation of this class. + + Returns true if the is + assignable from a type. + - + - Gets the context value identified by the parameter. + Converts the given value object to the specified type, using the arguments - 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 object to convert + The Type to convert the value parameter to + the converted object - - - 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. + Uses the method to convert the + argument to a . + + The object cannot be converted to the + . To check for this condition use the + method. + - + - Add an entry to the MDC + Can the source type be converted to the type supported by this object - The key to store the value under. - The value to store. + the type to convert + true if the conversion is possible - - - 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. + Returns true if the is + the type. - + - Removes the key value mapping for the key specified. + Overrides the ConvertFrom method of IConvertFrom. - The key to remove. + the object to convert to a PatternString + the PatternString - - - 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 + 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. + - + - Clear all entries in the MDC + Supports conversion from string to type. - - - 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 + Supports conversion from string to type. + + + + Nicko Cadell - + - Implementation of Nested Diagnostic Contexts. + Can the source type be converted to the type supported by this object + the type to convert + true if the conversion is possible - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + Returns true if the is + the type. - + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + - 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. + 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 + + - 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. + Class and Interface level attribute that specifies a type converter + to use with the associated type. - 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. + 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. - 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. + The string type name of the type converter - - Uses a private access modifier to prevent instantiation of this class. - - + - Clears all the contextual information held on the current thread. + Default constructor - - - 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. + Default constructor - + - Creates a clone of the stack of context information. + Create a new type converter attribute for the specified type name - A clone of the context info for this thread. + The string type name of the type converter - - - 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. + The type specified must implement the + or the interfaces. - + - Inherits the contextual information from another thread. + Create a new type converter attribute for the specified type - The context stack to inherit. + The type of the type converter - - - 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. + The type specified must implement the + or the interfaces. - + - Removes the top context from the stack. + The string type name of the type converter - - 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. + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. - + - Pushes a new context message. + Impersonate a Windows Account - 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"]. + This impersonates a Windows account. - - 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. + 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. - 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 impersonation modes for the - 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. + See the property for + details. - 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. + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Default constructor - - - 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. + Default constructor - + - Forces the stack depth to be at most . + Gets or sets the impersonation mode for this security context - The maximum depth of the stack + + The impersonation mode for this security context + - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. - - 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. + 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 the current context depth. + Gets or sets the Windows username for this security context - The current context depth. + + The Windows username for this security context + - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + 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 number of context values pushed onto the context stack. + The default value for is the local machine name + taken from the property. - Used to record the current depth of the context. This can then - be restored using the method. + This property must be set if + is set to (the default setting). - - + - The log4net Thread Context. + Sets the password for the Windows account specified by the and properties. + + The password for the Windows account specified by the and properties. + - The ThreadContext provides a location for thread specific debugging - information to be stored. - The ThreadContext properties override any - properties with the same name. + This property must be set if + is set to (the default setting). + + + + + Initialize the SecurityContext based on the options set. + + - 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. + 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. - 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. + If any of the configuration properties are modified then + must be called again. - The Thread Context is managed on a per thread basis. + The security context will try to Logon the specified user account and + capture a primary token for impersonation. - 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 + The required , + or properties were not specified. - + - Private Constructor. + Impersonate the Windows account specified by the and properties. + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + - Uses a private access modifier to prevent instantiation of this class. + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. - + - The thread context properties instance + 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. + + - + - The thread context stacks instance + Adds to + + + Helper class to expose the + through the interface. + + - + - The thread properties map + Constructor - - The thread properties map - + the impersonation context being wrapped - The ThreadContext properties override any - properties with the same name. + Constructor - + - The thread stacks + Revert the impersonation - - stack map - - The thread local stacks. + Revert the impersonation