package Ġorg . ca fe jo jo . s cha api Ċ Ċ import Ġch . qos . log back . core . File Appender Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . OutputStream Ċ Ċ /** Ċ Ġ* ĠA Ġ[ File Appender ] Ġthat Ġuses Ġa Ġ[ Lazy File OutputStream ] Ġso Ġthat Ġthe Ġoutput Ġfile Ġis Ġcreated Ġonly Ġwhen Ġthe Ġfirst Ġoutput Ċ Ġ* Ġis Ġwritten Ġto Ġit . Ċ Ġ* Ċ Ġ* ĠBased Ġon Ġ< a Ġhref =" https :// stackoverflow . com / a / 3 7 1 5 7 8 2 9 / 3 3 0 7 8 7 2 ] "> a ĠStack Overflow Ġanswer Ġby ĠRobert </ a >. Ċ Ġ* Ċ Ġ* Ġ@ param ĠE Ġthe Ġtype Ġof Ġthe Ġ[ File Appender ] Ċ Ġ*/ Ċ class ĠLazy File Appender < E > Ġ: ĠFile Appender < E >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġopen File ( fileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlock . lock () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( fileName ). apply Ġ{ Ġparent File ?. mkdir s () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠLazy File OutputStream ( file , Ġappend ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ OutputStream ] Ġthat Ġcreates Ġthe Ġunderlying Ġ[ File OutputStream ] Ġonly Ġwhen Ġit Ġis Ġfirst Ġwritten Ġto . Ċ Ġ* Ċ Ġ* ĠBased Ġon Ġ< a Ġhref =" https :// github . com / aler oot / log 4 j - add itions "> A less io ĠPol ler o 's Ġlog 4 j - add itions Ġlibrary </ a >. Ċ Ġ* Ċ Ġ* Ġ@ property Ġfile Ġthe Ġfile Ġto Ġwrite Ġto Ċ Ġ* Ġ@ property Ġappend Ġwhether Ġthe Ġfile Ġshould Ġbe Ġappended Ġto Ċ Ġ*/ Ċ @ Suppress (" Late init Usage ") Ġ// ĠL ate init Ġis Ġexactly Ġthe Ġfeature Ġof Ġthis Ġclass Ċ class ĠLazy File OutputStream ( private Ġvar Ġfile : ĠFile , Ġprivate Ġvar Ġappend : ĠBoolean ) Ġ: ĠOutputStream () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġstream Lock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġvar Ġstream Open Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġo Stream : ĠFileOutputStream ĊĊĠĠĠ Ġprivate Ġfun ĠoutputStream (): ĠFileOutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( stream Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! stream Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo Stream Ġ= ĠFileOutputStream ( file , Ġappend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Open Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġo Stream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stream Open ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream (). close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . flush () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stream Open ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream (). flush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( byte : ĠInt ) Ġ= ĠoutputStream (). write ( byte ) ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( bytes : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ) Ġ= ĠoutputStream (). write ( bytes , Ġoffset , Ġlength ) ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( bytes : ĠByteArray ) Ġ= ĠoutputStream (). write ( bytes ) Ċ } Ċ