Mercurial > projects > ldc
diff tango/tango/util/log/FileAppender.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tango/tango/util/log/FileAppender.d Fri Jan 11 17:57:40 2008 +0100 @@ -0,0 +1,155 @@ +/******************************************************************************* + + copyright: Copyright (c) 2004 Kris Bell. All rights reserved + + license: BSD style: $(LICENSE) + + version: Initial release: May 2004 + + author: Kris + +*******************************************************************************/ + +module tango.util.log.FileAppender; + +private import tango.util.log.Appender; + +private import tango.io.Buffer, + tango.io.FileConst, + tango.io.FileConduit; + +private import tango.io.model.IConduit; + +/******************************************************************************* + + Append log messages to a file. This basic version has no rollover + support, so it just keeps on adding to the file. There's also a + RollingFileAppender that may suit your needs. + +*******************************************************************************/ + +public class FileAppender : Appender +{ + private Mask mask; + private Buffer buffer; + private IConduit conduit_; + + /*********************************************************************** + + ***********************************************************************/ + + protected this () + { + } + + /*********************************************************************** + + Create a basic FileAppender to a file with the specified + path. + + ***********************************************************************/ + + this (FilePath fp, EventLayout layout = null) + { + // Get a unique fingerprint for this instance + mask = register (fp.toString); + + // make it shareable for read + auto style = FileConduit.WriteAppending; + style.share = FileConduit.Share.Read; + setConduit (new FileConduit (fp, style)); + + setLayout (layout); + } + + /*********************************************************************** + + Create a basic FileAppender to a file with the specified + path, and with the given EventLayout + + ***********************************************************************/ + + this (char[] fp, EventLayout layout = null) + { + this (new FilePath (fp), layout); + } + + /*********************************************************************** + + Return the conduit + + ***********************************************************************/ + + IConduit conduit () + { + return conduit_; + } + + /*********************************************************************** + + Set the conduit + + ***********************************************************************/ + + protected Buffer setConduit (IConduit conduit) + { + // create a new buffer upon this conduit + conduit_ = conduit; + return (buffer = new Buffer(conduit)); + } + + /*********************************************************************** + + Return the fingerprint for this class + + ***********************************************************************/ + + Mask getMask () + { + return mask; + } + + /*********************************************************************** + + Return the name of this class + + ***********************************************************************/ + + char[] getName () + { + return this.classinfo.name; + } + + /*********************************************************************** + + Append an event to the output. + + ***********************************************************************/ + + synchronized void append (Event event) + { + auto layout = getLayout; + buffer.append (layout.header (event)); + buffer.append (layout.content (event)); + buffer.append (layout.footer (event)) + .append (FileConst.NewlineString) + .flush (); + } + + /*********************************************************************** + + Close the file associated with this Appender + + ***********************************************************************/ + + synchronized void close () + { + if (conduit_) + { + conduit_.detach; + conduit_ = null; + } + } +} + +