/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef __com_sun_star_logging_XLogHandler_idl__
#define __com_sun_star_logging_XLogHandler_idl__

#ifndef __com_sun_star_lang_XComponent_idl__
#include <com/sun/star/lang/XComponent.idl>
#endif

#ifndef __com_sun_star_logging_LogRecord_idl__
#include <com/sun/star/logging/LogRecord.idl>
#endif

#ifndef __com_sun_star_logging_XLogFormatter_idl__
#include <com/sun/star/logging/XLogFormatter.idl>
#endif

//=============================================================================

module com { module sun { module star { module logging {

//=============================================================================

/** provides possibilites to send <type>LogRecord</type>s to an arbitrary output
    channel.

    @see XLogger

    @since OOo 2.3
 */
published interface XLogHandler
{
    /** allows life time control for the handler

        <p>Disposing the handler effectively means closing the channel
        to which the handler forwards the log records.
    */
    interface ::com::sun::star::lang::XComponent;

    /** specifies MIME charset name for the encoding to be used by this handler

        <p>It depends on the concrete handler implementation whether or not this
        parameter is needed.<p>

        @see http://www.iana.org/assignments/character-sets
    */
    [attribute] string Encoding;

    /** specifies the formatter to be used by this handler.
    */
    [attribute] XLogFormatter   Formatter;

    /** specifies the log level of this handler

        <p>Different handlers can have different log levels, which again might be
        different from the log level of the <type>XLogger</type> for which the handlers
        are used.</p>
    */
    [attribute] long    Level;

    /** flushes all buffered output of the handler

        <p>Log handlers are allowed to buffer their output. Upon <code>flush</code>
        being called, they must flush all their buffers.</p>
    */
    void    flush();

    /** publish the given log record at the handler's output channel.

        @return
            <TRUE/> if and only if the record was actually published. A handler
            will not publish a record if its log level doesn't meet the handler's
            log level, if the record is filtered, or if any other handler-specified
            restrictions apply.
    */
    boolean publish( [in] LogRecord Record );
};

//=============================================================================

}; }; }; };

//=============================================================================

#endif
