You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ms...@apache.org on 2022/04/28 19:46:32 UTC

[openoffice] branch AOO42X updated (0038efe05a -> a1b6a2a0b7)

This is an automated email from the ASF dual-hosted git repository.

mseidel pushed a change to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git


    from 0038efe05a As of Python 3.8, the pkg-config "--libs" needed to build with Python, differ between Python modules and applications that embed Python (see https://bugs.python.org/issue36721).
     new 2dc7e66cdc Implement a com.sun.star.logging.SyslogHandler service that logs to syslog.
     new a1b6a2a0b7 Adjusting version number before cherry-picking it for AOO42X

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 main/extensions/source/logging/log.component       |   3 +
 main/extensions/source/logging/log_services.cxx    |   2 +
 main/extensions/source/logging/makefile.mk         |   1 +
 .../{consolehandler.cxx => sysloghandler.cxx}      | 196 ++++++++++++++-------
 main/offapi/UnoApi_offapi.mk                       |   1 +
 .../logging/{FileHandler.idl => SyslogHandler.idl} |  49 +++---
 6 files changed, 158 insertions(+), 94 deletions(-)
 copy main/extensions/source/logging/{consolehandler.cxx => sysloghandler.cxx} (63%)
 copy main/offapi/com/sun/star/logging/{FileHandler.idl => SyslogHandler.idl} (70%)


[openoffice] 02/02: Adjusting version number before cherry-picking it for AOO42X

Posted by ms...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mseidel pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit a1b6a2a0b7841b46480ef5d6e9139a6a1d07a73a
Author: mseidel <ms...@apache.org>
AuthorDate: Thu Apr 28 21:43:57 2022 +0200

    Adjusting version number before cherry-picking it for AOO42X
    
    (cherry picked from commit 2bfabe857a8430ad7a3e9a492828a78c93b04c5a)
---
 main/offapi/com/sun/star/logging/SyslogHandler.idl | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/main/offapi/com/sun/star/logging/SyslogHandler.idl b/main/offapi/com/sun/star/logging/SyslogHandler.idl
index 5369e5f15c..c94647f7c6 100644
--- a/main/offapi/com/sun/star/logging/SyslogHandler.idl
+++ b/main/offapi/com/sun/star/logging/SyslogHandler.idl
@@ -1,5 +1,5 @@
 /**************************************************************
- * 
+ *
  * 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
@@ -7,16 +7,16 @@
  * 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.
- * 
+ *
  *************************************************************/
 
 
@@ -24,7 +24,7 @@
 #ifndef __com_sun_star_logging_SyslogHandler_idl__
 #define __com_sun_star_logging_SyslogHandler_idl__
 
-#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ 
+#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
 #include <com/sun/star/lang/IllegalArgumentException.idl>
 #endif
 #ifndef __com_sun_star_beans_NamedValue_idl__
@@ -33,7 +33,7 @@
 
 //=============================================================================
 
-module com { module sun { module star { module logging { 
+module com { module sun { module star { module logging {
 
 interface XLogHandler;
 
@@ -54,7 +54,7 @@ interface XLogHandler;
 
     @see XLogHandler::Encoding
 
-    @since OpenOffice 4.5
+    @since OpenOffice 4.2
  */
 service SyslogHandler : XLogHandler
 {
@@ -83,7 +83,7 @@ service SyslogHandler : XLogHandler
 
 //=============================================================================
 
-}; }; }; }; 
+}; }; }; };
 
 //=============================================================================
 


[openoffice] 01/02: Implement a com.sun.star.logging.SyslogHandler service that logs to syslog.

Posted by ms...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mseidel pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 2dc7e66cdcf7df378175b3735cd17ff4f36f4f63
Author: Damjan Jovanovic <da...@apache.org>
AuthorDate: Tue Apr 26 20:04:44 2022 +0200

    Implement a com.sun.star.logging.SyslogHandler service that logs
    to syslog.
    
    Patch by: me
    
    (cherry picked from commit 448486c680931f7025e1bc43b5f9036acef42990)
---
 main/extensions/source/logging/log.component       |   3 +
 main/extensions/source/logging/log_services.cxx    |   2 +
 main/extensions/source/logging/makefile.mk         |   1 +
 main/extensions/source/logging/sysloghandler.cxx   | 398 +++++++++++++++++++++
 main/offapi/UnoApi_offapi.mk                       |   1 +
 main/offapi/com/sun/star/logging/SyslogHandler.idl |  90 +++++
 6 files changed, 495 insertions(+)

diff --git a/main/extensions/source/logging/log.component b/main/extensions/source/logging/log.component
index 2cc16e3dc0..dc9db9e524 100644
--- a/main/extensions/source/logging/log.component
+++ b/main/extensions/source/logging/log.component
@@ -40,4 +40,7 @@
   <implementation name="com.sun.star.comp.extensions.PlainTextFormatter">
     <service name="com.sun.star.logging.PlainTextFormatter"/>
   </implementation>
+  <implementation name="com.sun.star.comp.extensions.SyslogHandler">
+    <service name="com.sun.star.logging.SyslogHandler"/>
+  </implementation>
 </component>
diff --git a/main/extensions/source/logging/log_services.cxx b/main/extensions/source/logging/log_services.cxx
index fa24a33c18..61ed3e1447 100644
--- a/main/extensions/source/logging/log_services.cxx
+++ b/main/extensions/source/logging/log_services.cxx
@@ -39,6 +39,7 @@ namespace logging
     extern void createRegistryInfo_ConsoleHandler();
     extern void createRegistryInfo_PlainTextFormatter();
     extern void createRegistryInfo_CsvFormatter();
+    extern void createRegistryInfo_SyslogHandler();
 
     static void initializeModule()
     {
@@ -53,6 +54,7 @@ namespace logging
                 createRegistryInfo_ConsoleHandler();
                 createRegistryInfo_PlainTextFormatter();
                 createRegistryInfo_CsvFormatter();
+                createRegistryInfo_SyslogHandler();
             }
         }
     }
diff --git a/main/extensions/source/logging/makefile.mk b/main/extensions/source/logging/makefile.mk
index dfbd980e1c..7103900e7d 100644
--- a/main/extensions/source/logging/makefile.mk
+++ b/main/extensions/source/logging/makefile.mk
@@ -41,6 +41,7 @@ EXCEPTIONSFILES= \
         $(SLO)$/loggerconfig.obj        \
         $(SLO)$/loghandler.obj          \
         $(SLO)$/plaintextformatter.obj  \
+        $(SLO)$/sysloghandler.obj       \
 
 SLOFILES= \
         $(EXCEPTIONSFILES) \
diff --git a/main/extensions/source/logging/sysloghandler.cxx b/main/extensions/source/logging/sysloghandler.cxx
new file mode 100644
index 0000000000..aa8962194b
--- /dev/null
+++ b/main/extensions/source/logging/sysloghandler.cxx
@@ -0,0 +1,398 @@
+/**************************************************************
+ * 
+ * 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.
+ * 
+ *************************************************************/
+
+
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_extensions.hxx"
+
+#include "log_module.hxx"
+#include "methodguard.hxx"
+#include "loghandler.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/logging/XConsoleHandler.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/logging/LogLevel.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/ucb/AlreadyInitializedException.hpp>
+#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/beans/NamedValue.hpp>
+/** === end UNO includes === **/
+
+#include <tools/diagnose_ex.h>
+
+#include <comphelper/componentcontext.hxx>
+
+#include <cppuhelper/compbase3.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+#include <rtl/strbuf.hxx>
+#include <osl/process.h>
+#include <osl/socket.hxx>
+#include <osl/time.h>
+
+#include <stdio.h>
+
+//........................................................................
+namespace logging
+{
+//........................................................................
+
+	/** === begin UNO using === **/
+    using ::com::sun::star::logging::XLogHandler;
+    using ::com::sun::star::lang::XServiceInfo;
+    using ::com::sun::star::uno::Reference;
+    using ::com::sun::star::uno::XComponentContext;
+    using ::com::sun::star::uno::RuntimeException;
+    using ::com::sun::star::logging::XLogFormatter;
+    using ::com::sun::star::uno::Sequence;
+    using ::com::sun::star::logging::LogRecord;
+    using ::com::sun::star::uno::UNO_QUERY_THROW;
+    using ::com::sun::star::uno::Exception;
+    using ::com::sun::star::uno::Any;
+    using ::com::sun::star::uno::XInterface;
+    using ::com::sun::star::lang::XInitialization;
+    using ::com::sun::star::ucb::AlreadyInitializedException;
+    using ::com::sun::star::lang::IllegalArgumentException;
+    using ::com::sun::star::beans::NamedValue;
+	/** === end UNO using === **/
+    namespace LogLevel = ::com::sun::star::logging::LogLevel;
+
+	//====================================================================
+	//= SyslogHandler - declaration
+	//====================================================================
+	//--------------------------------------------------------------------
+    typedef ::cppu::WeakComponentImplHelper3    <   XLogHandler
+                                                ,   XServiceInfo
+                                                ,   XInitialization
+                                                >   SyslogHandler_Base;
+    class SyslogHandler    :public ::cppu::BaseMutex
+                            ,public SyslogHandler_Base
+	{
+    private:
+        ::comphelper::ComponentContext  m_aContext;
+        LogHandlerHelper                m_aHandlerHelper;
+        ::osl::SocketAddr               m_aSocketAddress;
+        ::osl::DatagramSocket           m_aSocket;
+
+    protected:
+        SyslogHandler( const Reference< XComponentContext >& _rxContext );
+        virtual ~SyslogHandler();
+
+        // XLogHandler
+        virtual ::rtl::OUString SAL_CALL getEncoding() throw (RuntimeException);
+        virtual void SAL_CALL setEncoding( const ::rtl::OUString& _encoding ) throw (RuntimeException);
+        virtual Reference< XLogFormatter > SAL_CALL getFormatter() throw (RuntimeException);
+        virtual void SAL_CALL setFormatter( const Reference< XLogFormatter >& _formatter ) throw (RuntimeException);
+        virtual ::sal_Int32 SAL_CALL getLevel() throw (RuntimeException);
+        virtual void SAL_CALL setLevel( ::sal_Int32 _level ) throw (RuntimeException);
+        virtual void SAL_CALL flush(  ) throw (RuntimeException);
+        virtual ::sal_Bool SAL_CALL publish( const LogRecord& Record ) throw (RuntimeException);
+
+        // XInitialization
+        virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+        // XServiceInfo
+		virtual ::rtl::OUString SAL_CALL getImplementationName() throw(RuntimeException);
+        virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException);
+        virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException);
+
+        // OComponentHelper
+        virtual void SAL_CALL disposing();
+
+    public:
+        // XServiceInfo - static version
+		static ::rtl::OUString SAL_CALL getImplementationName_static();
+        static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+        static Reference< XInterface > Create( const Reference< XComponentContext >& _rxContext );
+
+    public:
+        typedef ComponentMethodGuard< SyslogHandler > MethodGuard;
+        void    enterMethod( MethodGuard::Access );
+        void    leaveMethod( MethodGuard::Access );
+	};
+
+    //====================================================================
+	//= SyslogHandler - implementation
+	//====================================================================
+	//--------------------------------------------------------------------
+    SyslogHandler::SyslogHandler( const Reference< XComponentContext >& _rxContext )
+        :SyslogHandler_Base( m_aMutex )
+        ,m_aContext( _rxContext )
+        ,m_aHandlerHelper( _rxContext, m_aMutex, rBHelper )
+        ,m_aSocketAddress()
+        ,m_aSocket()
+    {
+    }
+
+    //--------------------------------------------------------------------
+    SyslogHandler::~SyslogHandler()
+    {
+        if ( !rBHelper.bDisposed )
+        {
+            acquire();
+            dispose();
+        }
+    }
+
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::disposing()
+    {
+        m_aHandlerHelper.setFormatter( NULL );
+    }
+
+    //--------------------------------------------------------------------
+    void SyslogHandler::enterMethod( MethodGuard::Access )
+    {
+        m_aHandlerHelper.enterMethod();
+    }
+
+    //--------------------------------------------------------------------
+    void SyslogHandler::leaveMethod( MethodGuard::Access )
+    {
+        m_aMutex.release();
+    }
+
+    //--------------------------------------------------------------------
+    ::rtl::OUString SAL_CALL SyslogHandler::getEncoding() throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        ::rtl::OUString sEncoding;
+        OSL_VERIFY( m_aHandlerHelper.getEncoding( sEncoding ) );
+        return sEncoding;
+    }
+    
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::setEncoding( const ::rtl::OUString& _rEncoding ) throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        OSL_VERIFY( m_aHandlerHelper.setEncoding( _rEncoding ) );
+    }
+    
+    //--------------------------------------------------------------------
+    Reference< XLogFormatter > SAL_CALL SyslogHandler::getFormatter() throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        return m_aHandlerHelper.getFormatter();
+    }
+    
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::setFormatter( const Reference< XLogFormatter >& _rxFormatter ) throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        m_aHandlerHelper.setFormatter( _rxFormatter );
+    }
+    
+    //--------------------------------------------------------------------
+    ::sal_Int32 SAL_CALL SyslogHandler::getLevel() throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        return m_aHandlerHelper.getLevel();
+    }
+    
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::setLevel( ::sal_Int32 _nLevel ) throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        m_aHandlerHelper.setLevel( _nLevel );
+    }
+    
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::flush(  ) throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+        fflush( stdout );
+        fflush( stderr );
+    }
+    
+    //--------------------------------------------------------------------
+    ::sal_Bool SAL_CALL SyslogHandler::publish( const LogRecord& _rRecord ) throw (RuntimeException)
+    {
+        MethodGuard aGuard( *this );
+
+        ::rtl::OString sEntry;
+        if ( !m_aHandlerHelper.formatForPublishing( _rRecord, sEntry ) )
+            return sal_False;
+
+        ::rtl::OStringBuffer buffer;
+        // PRI
+        const sal_Int32 facility = 1; // USER
+        sal_Int32 severity;
+        switch ( _rRecord.Level )
+        {
+            case LogLevel::SEVERE:
+                severity = 3; // error
+                break;
+            case LogLevel::WARNING:
+                severity = 4; // warning
+                break;
+            case LogLevel::INFO:
+            case LogLevel::CONFIG:
+                severity = 5; // notice
+                break;
+            default:
+                severity = 7; // debug
+        }
+        buffer.append( '<' );
+        buffer.append( ( facility * 8 ) + severity );
+        buffer.append( '>' );
+        
+        // VERSION
+        buffer.append( '1' );
+        buffer.append( ' ' );        
+        
+        // TIMESTAMP
+        char timestampBuffer[256];
+        snprintf( timestampBuffer, sizeof( timestampBuffer ),
+            "%04i-%02i-%02iT%02i:%02i:%02i.%02iZ",
+            (int)_rRecord.LogTime.Year, (int)_rRecord.LogTime.Month, (int)_rRecord.LogTime.Day,
+            (int)_rRecord.LogTime.Hours, (int)_rRecord.LogTime.Minutes, (int)_rRecord.LogTime.Seconds,
+            (int)_rRecord.LogTime.HundredthSeconds );
+        buffer.append( timestampBuffer );
+        buffer.append( ' ' );
+        
+        // HOSTNAME
+        ::rtl::OUString hostname = ::osl::SocketAddr::getLocalHostname( 0 );
+        if ( !hostname.isEmpty() )
+            buffer.append( ::rtl::OUStringToOString( hostname, RTL_TEXTENCODING_UTF8 ) );
+        else
+            buffer.append( '-' );
+        buffer.append( ' ' );
+        
+        // APP-NAME
+        buffer.append( "soffice" );
+        buffer.append( ' ' );
+        
+        // PROC-ID
+        oslProcessInfo pInfo;
+        pInfo.Size = sizeof(oslProcessInfo);
+        oslProcessError prerr = osl_getProcessInfo( NULL, osl_Process_IDENTIFIER, &pInfo );
+        if ( prerr == osl_Process_E_None )
+            buffer.append( (sal_Int64) pInfo.Ident );
+        else
+            buffer.append( '-' );
+        buffer.append( ' ' );
+        
+        // MESSAGE-ID
+        buffer.append( '-' );
+        buffer.append( ' ' );
+        
+        // STRUCTURED DATA
+        buffer.append( '-' );
+        buffer.append( ' ' );
+        
+        // MESSAGE
+        buffer.append( sEntry );
+        
+        sal_Int32 sockRes = m_aSocket.sendTo( m_aSocketAddress, buffer.getStr(), buffer.getLength() );
+
+        return sockRes == osl_Socket_MsgNormal;
+    }
+
+    //--------------------------------------------------------------------
+    void SAL_CALL SyslogHandler::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException)
+    {
+        ::osl::MutexGuard aGuard( m_aMutex );
+
+        if ( m_aHandlerHelper.getIsInitialized() )
+            throw AlreadyInitializedException();
+
+        if ( _rArguments.getLength() != 1 )
+            throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+
+        Sequence< NamedValue > aSettings;
+        if ( !( _rArguments[0] >>= aSettings ) )
+            throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+
+        // createWithSettings( [in] sequence< ::com::sun::star::beans::NamedValue > Settings )
+        ::comphelper::NamedValueCollection aTypedSettings( aSettings );
+        m_aHandlerHelper.initFromSettings( aTypedSettings );
+
+        ::rtl::OUString host;
+        if ( !aTypedSettings.get_ensureType( "Host", host ) )
+            throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+        sal_Int32 port;
+        if ( !aTypedSettings.get_ensureType( "Port", port ) )
+            throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+        ::osl::SocketAddr address( host, port );
+        if ( address.is() )
+            m_aSocketAddress = address;
+        else
+            throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
+
+        m_aHandlerHelper.setIsInitialized();
+    }
+
+    //--------------------------------------------------------------------
+    ::rtl::OUString SAL_CALL SyslogHandler::getImplementationName() throw(RuntimeException)
+    {
+        return getImplementationName_static();
+    }
+    
+    //--------------------------------------------------------------------
+    ::sal_Bool SAL_CALL SyslogHandler::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
+    {
+        const Sequence< ::rtl::OUString > aServiceNames( getSupportedServiceNames() );
+        for (   const ::rtl::OUString* pServiceNames = aServiceNames.getConstArray();
+                pServiceNames != aServiceNames.getConstArray() + aServiceNames.getLength();
+                ++pServiceNames
+            )
+            if ( _rServiceName == *pServiceNames )
+                return sal_True;
+        return sal_False;
+    }
+    
+    //--------------------------------------------------------------------
+    Sequence< ::rtl::OUString > SAL_CALL SyslogHandler::getSupportedServiceNames() throw(RuntimeException)
+    {
+        return getSupportedServiceNames_static();
+    }
+    
+    //--------------------------------------------------------------------
+    ::rtl::OUString SAL_CALL SyslogHandler::getImplementationName_static()
+    {
+        return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.extensions.SyslogHandler" ) );
+    }
+    
+    //--------------------------------------------------------------------
+    Sequence< ::rtl::OUString > SAL_CALL SyslogHandler::getSupportedServiceNames_static()
+    {
+        Sequence< ::rtl::OUString > aServiceNames(1);
+        aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.logging.SyslogHandler" ) );
+        return aServiceNames;
+    }
+
+    //--------------------------------------------------------------------
+    Reference< XInterface > SyslogHandler::Create( const Reference< XComponentContext >& _rxContext )
+    {
+        return *( new SyslogHandler( _rxContext ) );
+    }
+
+    //--------------------------------------------------------------------
+    void createRegistryInfo_SyslogHandler()
+    {
+        static OAutoRegistration< SyslogHandler > aAutoRegistration;
+    }
+
+//........................................................................
+} // namespace logging
+//........................................................................
diff --git a/main/offapi/UnoApi_offapi.mk b/main/offapi/UnoApi_offapi.mk
index 1a909007ea..3bdbf22e65 100644
--- a/main/offapi/UnoApi_offapi.mk
+++ b/main/offapi/UnoApi_offapi.mk
@@ -91,6 +91,7 @@ $(eval $(call gb_UnoApiTarget_add_idlfiles_nohdl,offapi,\
 	offapi/com/sun/star/logging/LoggerPool \
 	offapi/com/sun/star/logging/PlainTextFormatter \
 	offapi/com/sun/star/logging/SimpleLogRing \
+	offapi/com/sun/star/logging/SyslogHandler \
 	offapi/com/sun/star/mail/MailMessage \
 	offapi/com/sun/star/mail/MailServiceProvider \
 	offapi/com/sun/star/media/Manager \
diff --git a/main/offapi/com/sun/star/logging/SyslogHandler.idl b/main/offapi/com/sun/star/logging/SyslogHandler.idl
new file mode 100644
index 0000000000..5369e5f15c
--- /dev/null
+++ b/main/offapi/com/sun/star/logging/SyslogHandler.idl
@@ -0,0 +1,90 @@
+/**************************************************************
+ * 
+ * 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_SyslogHandler_idl__
+#define __com_sun_star_logging_SyslogHandler_idl__
+
+#ifndef __com_sun_star_lang_IllegalArgumentException_idl__ 
+#include <com/sun/star/lang/IllegalArgumentException.idl>
+#endif
+#ifndef __com_sun_star_beans_NamedValue_idl__
+#include <com/sun/star/beans/NamedValue.idl>
+#endif
+
+//=============================================================================
+
+module com { module sun { module star { module logging { 
+
+interface XLogHandler;
+
+//=============================================================================
+
+/** specifies a component implementing a log handler whose output
+    channel is the syslog network protocol.
+
+    <p>The handler will use the <code>Encoding</code> attribute of <type>XLogHandler</type>
+    to determine how to encode strings before actually writing them to the output
+    file.</p>
+
+    <p>The output is sent over UDP to the given Host and Port
+    in RFC5424 format, in plaintext, with APPNAME "soffice" and facility USER.
+    LogLevel::SEVERE becomes syslog's "error" severity, LogLevel::WARNING becomes syslog's
+    "warning" severity, LogLevel::INFO and LogLevel::CONFIG become syslog's "notice"
+    severity, and LogLevel::FINE and below become syslog's "debug" severity.</p>
+
+    @see XLogHandler::Encoding
+
+    @since OpenOffice 4.5
+ */
+service SyslogHandler : XLogHandler
+{
+    /** creates an instance of the log handler
+
+        @param Settings
+            contains the initial settings for the log handler
+
+            <p>The following settings are recognized and supported:
+            <ul><li><code>Encoding</code> - denotes the initial value of the <member>XLogHandler::Encoding</member></li>
+                <li><code>Formatter</code> - denotes the initial value of the <member>XLogHandler::Formatter</member></li>
+                <li><code>Level</code> - denotes the initial value of the <member>XLogHandler::Level</member></li>
+            </ul></p>
+
+            <p>Additionally, the following settings are required for this particular handler:
+            <ul><li><code>Host</code> - the hostname of the syslog server</li>
+                <li><code>Port</code> - the port of the syslog server</li>
+            </ul></p>
+
+        @throws ::com::sun::star::lang::IllegalArgumentException
+            if <arg>Settings</args> contains settings whose value is of the wrong type.
+    */
+    createWithSettings( [in] sequence< ::com::sun::star::beans::NamedValue > Settings )
+        raises ( ::com::sun::star::lang::IllegalArgumentException );
+};
+
+//=============================================================================
+
+}; }; }; }; 
+
+//=============================================================================
+
+#endif