1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef COMPHELPER_LOGGING_HXX 29*cdf0e10cSrcweir #define COMPHELPER_LOGGING_HXX 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <comphelper/comphelperdllapi.h> 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir /** === begin UNO includes === **/ 34*cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp> 35*cdf0e10cSrcweir #include <com/sun/star/logging/XLogHandler.hpp> 36*cdf0e10cSrcweir #include <com/sun/star/logging/LogLevel.hpp> 37*cdf0e10cSrcweir /** === end UNO includes === **/ 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #include <boost/shared_ptr.hpp> 40*cdf0e10cSrcweir #include <boost/optional.hpp> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir //........................................................................ 43*cdf0e10cSrcweir namespace comphelper 44*cdf0e10cSrcweir { 45*cdf0e10cSrcweir //........................................................................ 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir //==================================================================== 48*cdf0e10cSrcweir //= string conversions, employed by the templatized log* members of 49*cdf0e10cSrcweir //= EventLogger 50*cdf0e10cSrcweir //==================================================================== 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir namespace log { namespace convert 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir inline const ::rtl::OUString& convertLogArgToString( const ::rtl::OUString& _rValue ) 55*cdf0e10cSrcweir { 56*cdf0e10cSrcweir return _rValue; 57*cdf0e10cSrcweir } 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( const sal_Char* _pAsciiValue ) 60*cdf0e10cSrcweir { 61*cdf0e10cSrcweir return ::rtl::OUString::createFromAscii( _pAsciiValue ); 62*cdf0e10cSrcweir } 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( double _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 65*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( float _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 66*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( sal_Int64 _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 67*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( sal_Int32 _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 68*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( sal_Int16 _nValue ) { return ::rtl::OUString::valueOf( (sal_Int32)_nValue ); } 69*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( sal_Unicode _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 70*cdf0e10cSrcweir inline ::rtl::OUString convertLogArgToString( sal_Bool _nValue ) { return ::rtl::OUString::valueOf( _nValue ); } 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir } } // namespace log::convert 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir //==================================================================== 75*cdf0e10cSrcweir //= EventLogger 76*cdf0e10cSrcweir //==================================================================== 77*cdf0e10cSrcweir class EventLogger_Impl; 78*cdf0e10cSrcweir typedef ::boost::optional< ::rtl::OUString > OptionalString; 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir /** encapsulates an <type scope="com::sun::star::logging">XLogger</type> 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir The class silences several (unlikely) errors which could potentially happen 83*cdf0e10cSrcweir when working with a logger. Additionally, it provides some convenience methods 84*cdf0e10cSrcweir for logging events. 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir You can use this class as follows 87*cdf0e10cSrcweir <pre> 88*cdf0e10cSrcweir EventLogger aLogger( xContext, sLoggerName ); 89*cdf0e10cSrcweir .... 90*cdf0e10cSrcweir aLogger.log( LogLevel::SEVERE, sSomeMessage ); 91*cdf0e10cSrcweir aLogger.logp( LogLevel::CONFIG, "MyClass", "MyMethod", sSomeMessage, SomeParameter1, SomeParameter2, SomeParameter3 ); 92*cdf0e10cSrcweir </pre> 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir The <code>log</code> and <code>logp</code> calls support up to 6 parameters, which can be of 95*cdf0e10cSrcweir arbitrary type. For every parameter, there must exist a function <code>convertLogArgToString</code> 96*cdf0e10cSrcweir which takes an argument of the respective type, and returns a string. 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir After a parameter has been converted to a string using the above mentioned 99*cdf0e10cSrcweir <code>convertLogArgToString</code> function, a placeholder $1$ (resp. $2$ resp. $4$ ...) 100*cdf0e10cSrcweir in the message will be replaced with this string, and the resulting message will be logged. 101*cdf0e10cSrcweir */ 102*cdf0e10cSrcweir class COMPHELPER_DLLPUBLIC EventLogger 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir protected: 105*cdf0e10cSrcweir ::boost::shared_ptr< EventLogger_Impl > m_pImpl; 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir public: 108*cdf0e10cSrcweir /** creates an <code>EventLogger</code> instance working with a css.logging.XLogger 109*cdf0e10cSrcweir instance given by name. 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir @param _rxContext 112*cdf0e10cSrcweir the component context to create services 113*cdf0e10cSrcweir @param _rLoggerName 114*cdf0e10cSrcweir the name of the logger to create. If empty, the office-wide default logger will be used. 115*cdf0e10cSrcweir */ 116*cdf0e10cSrcweir EventLogger( 117*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, 118*cdf0e10cSrcweir const ::rtl::OUString& _rLoggerName = ::rtl::OUString() 119*cdf0e10cSrcweir ); 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir /** creates an <code>EventLogger</code> instance working with a css.logging.XLogger 122*cdf0e10cSrcweir instance given by ASCII name. 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir @param _rxContext 125*cdf0e10cSrcweir the component context to create services 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir @param _rLoggerName 128*cdf0e10cSrcweir the ASCII name of the logger to create. 129*cdf0e10cSrcweir */ 130*cdf0e10cSrcweir EventLogger( 131*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, 132*cdf0e10cSrcweir const sal_Char* _pAsciiLoggerName 133*cdf0e10cSrcweir ); 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir ~EventLogger(); 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir public: 138*cdf0e10cSrcweir /** returns the name of the logger 139*cdf0e10cSrcweir */ 140*cdf0e10cSrcweir const ::rtl::OUString& getName() const; 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir /// returns the current log level threshold of the logger 143*cdf0e10cSrcweir sal_Int32 getLogLevel() const; 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir /// sets a new log level threshold of the logger 146*cdf0e10cSrcweir void setLogLevel( const sal_Int32 _nLogLevel ) const; 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir /// determines whether an event with the given level would be logged 149*cdf0e10cSrcweir bool isLoggable( const sal_Int32 _nLogLevel ) const; 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir /** adds the given log handler to the logger's set of handlers. 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir Note that normally, you would not use this method: The logger implementations 154*cdf0e10cSrcweir initialize themselves from the configuration, where usually, a default log handler 155*cdf0e10cSrcweir is specified. In this case, the logger will create and use this handler. 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir @return 158*cdf0e10cSrcweir <TRUE/> if and only if the addition was successful (as far as this can be detected 159*cdf0e10cSrcweir from outside the <code>XLogger</code>'s implementation. 160*cdf0e10cSrcweir */ 161*cdf0e10cSrcweir bool addLogHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::logging::XLogHandler >& _rxLogHandler ); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir /** removes the given log handler from the logger's set of handlers. 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir @return 166*cdf0e10cSrcweir <TRUE/> if and only if the addition was successful (as far as this can be detected 167*cdf0e10cSrcweir from outside the <code>XLogger</code>'s implementation. 168*cdf0e10cSrcweir */ 169*cdf0e10cSrcweir bool removeLogHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::logging::XLogHandler >& _rxLogHandler ); 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir //---------------------------------------------------------------- 172*cdf0e10cSrcweir //- XLogger::log equivalents/wrappers 173*cdf0e10cSrcweir //- string messages 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir /// logs a given message, without any arguments, or source class/method names 176*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage ) const 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 179*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage ); 180*cdf0e10cSrcweir return false; 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir /** logs a given message, replacing a placeholder in the message with an argument 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir The function takes, additionally to the log level and the message, an arbitrary 186*cdf0e10cSrcweir argument. This argument is converted to a string using an overloaded function 187*cdf0e10cSrcweir named <code>convertLogArgToString</code>. Then, a placeholder "$1$" 188*cdf0e10cSrcweir is searched in the message string, and replaced with the argument string. 189*cdf0e10cSrcweir */ 190*cdf0e10cSrcweir template< typename ARGTYPE1 > 191*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1 ) const 192*cdf0e10cSrcweir { 193*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 194*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 195*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 196*cdf0e10cSrcweir return false; 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir /// logs a given message, replacing 2 placeholders in the message with respective values 200*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 201*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 204*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 205*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 206*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 207*cdf0e10cSrcweir return false; 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir /// logs a given message, replacing 3 placeholders in the message with respective values 211*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 212*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 213*cdf0e10cSrcweir { 214*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 215*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 216*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 217*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 218*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 219*cdf0e10cSrcweir return false; 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir /// logs a given message, replacing 4 placeholders in the message with respective values 223*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 224*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 227*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 228*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 229*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 230*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 231*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 232*cdf0e10cSrcweir return false; 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir /// logs a given message, replacing 5 placeholders in the message with respective values 236*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 237*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 240*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 241*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 242*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 243*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 244*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 245*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 246*cdf0e10cSrcweir return false; 247*cdf0e10cSrcweir } 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir /// logs a given message, replacing 6 placeholders in the message with respective values 250*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 251*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 254*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, _rMessage, 255*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 256*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 257*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 258*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 259*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 260*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 261*cdf0e10cSrcweir return false; 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir //---------------------------------------------------------------- 265*cdf0e10cSrcweir //- XLogger::log equivalents/wrappers 266*cdf0e10cSrcweir //- ASCII messages 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir /// logs a given message, without any arguments, or source class/method names 269*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage ) const 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 272*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ) ); 273*cdf0e10cSrcweir return false; 274*cdf0e10cSrcweir } 275*cdf0e10cSrcweir 276*cdf0e10cSrcweir /** logs a given message, replacing a placeholder in the message with an argument 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir The function takes, additionally to the log level and the message, an arbitrary 279*cdf0e10cSrcweir argument. This argument is converted to a string using an overloaded function 280*cdf0e10cSrcweir named <code>convertLogArgToString</code>. Then, a placeholder "$1$" 281*cdf0e10cSrcweir is searched in the message string, and replaced with the argument string. 282*cdf0e10cSrcweir */ 283*cdf0e10cSrcweir template< typename ARGTYPE1 > 284*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1 ) const 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 287*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 288*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 289*cdf0e10cSrcweir return false; 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir /// logs a given message, replacing 2 placeholders in the message with respective values 293*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 294*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 297*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 298*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 299*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 300*cdf0e10cSrcweir return false; 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir /// logs a given message, replacing 3 placeholders in the message with respective values 304*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 305*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 308*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 309*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 310*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 311*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 312*cdf0e10cSrcweir return false; 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir /// logs a given message, replacing 4 placeholders in the message with respective values 316*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 317*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 318*cdf0e10cSrcweir { 319*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 320*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 321*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 322*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 323*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 324*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 325*cdf0e10cSrcweir return false; 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir /// logs a given message, replacing 5 placeholders in the message with respective values 329*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 330*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 333*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 334*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 335*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 336*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 337*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 338*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 339*cdf0e10cSrcweir return false; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir /// logs a given message, replacing 6 placeholders in the message with respective values 343*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 344*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Char* _pMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 347*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, ::rtl::OUString::createFromAscii( _pMessage ), 348*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 349*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 350*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 351*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 352*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 353*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 354*cdf0e10cSrcweir return false; 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir 357*cdf0e10cSrcweir //---------------------------------------------------------------- 358*cdf0e10cSrcweir //- XLogger::logp equivalents/wrappers 359*cdf0e10cSrcweir //- string messages 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir /// logs a given message, without any arguments, or source class/method names 362*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage ) const 363*cdf0e10cSrcweir { 364*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 365*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage ); 366*cdf0e10cSrcweir return false; 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir /** logs a given message, replacing a placeholder in the message with an argument 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir The function takes, additionally to the logp level and the message, an arbitrary 372*cdf0e10cSrcweir argument. This argument is converted to a string using an overloaded function 373*cdf0e10cSrcweir named <code>convertLogArgToString</code>. Then, a placeholder "$1$" 374*cdf0e10cSrcweir is searched in the message string, and replaced with the argument string. 375*cdf0e10cSrcweir */ 376*cdf0e10cSrcweir template< typename ARGTYPE1 > 377*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1 ) const 378*cdf0e10cSrcweir { 379*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 380*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 381*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 382*cdf0e10cSrcweir return false; 383*cdf0e10cSrcweir } 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir /// logs a given message, replacing 2 placeholders in the message with respective values 386*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 387*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 390*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 391*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 392*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 393*cdf0e10cSrcweir return false; 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir /// logs a given message, replacing 3 placeholders in the message with respective values 397*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 398*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 399*cdf0e10cSrcweir { 400*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 401*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 402*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 403*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 404*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 405*cdf0e10cSrcweir return false; 406*cdf0e10cSrcweir } 407*cdf0e10cSrcweir 408*cdf0e10cSrcweir /// logs a given message, replacing 4 placeholders in the message with respective values 409*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 410*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 413*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 414*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 415*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 416*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 417*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 418*cdf0e10cSrcweir return false; 419*cdf0e10cSrcweir } 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir /// logs a given message, replacing 5 placeholders in the message with respective values 422*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 423*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 426*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 427*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 428*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 429*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 430*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 431*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 432*cdf0e10cSrcweir return false; 433*cdf0e10cSrcweir } 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir /// logs a given message, replacing 6 placeholders in the message with respective values 436*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 437*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const ::rtl::OUString& _rMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 438*cdf0e10cSrcweir { 439*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 440*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, _rMessage, 441*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 442*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 443*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 444*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 445*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 446*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 447*cdf0e10cSrcweir return false; 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir //---------------------------------------------------------------- 451*cdf0e10cSrcweir //- XLogger::logp equivalents/wrappers 452*cdf0e10cSrcweir //- ASCII messages 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir /// logs a given ASCII message, without any arguments, or source class/method names 455*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage ) const 456*cdf0e10cSrcweir { 457*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 458*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ) ); 459*cdf0e10cSrcweir return false; 460*cdf0e10cSrcweir } 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir /** logs a given ASCII message, replacing a placeholder in the message with an argument 463*cdf0e10cSrcweir 464*cdf0e10cSrcweir The function takes, additionally to the logp level and the message, an arbitrary 465*cdf0e10cSrcweir argument. This argument is converted to a string using an overloaded function 466*cdf0e10cSrcweir named <code>convertLogArgToString</code>. Then, a placeholder "$1$" 467*cdf0e10cSrcweir is searched in the message string, and replaced with the argument string. 468*cdf0e10cSrcweir */ 469*cdf0e10cSrcweir template< typename ARGTYPE1 > 470*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1 ) const 471*cdf0e10cSrcweir { 472*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 473*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 474*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 475*cdf0e10cSrcweir return false; 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir /// logs a given ASCII message, replacing 2 placeholders in the message with respective values 479*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 480*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 481*cdf0e10cSrcweir { 482*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 483*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 484*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 485*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 486*cdf0e10cSrcweir return false; 487*cdf0e10cSrcweir } 488*cdf0e10cSrcweir 489*cdf0e10cSrcweir /// logs a given ASCII message, replacing 3 placeholders in the message with respective values 490*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 491*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 492*cdf0e10cSrcweir { 493*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 494*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 495*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 496*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 497*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 498*cdf0e10cSrcweir return false; 499*cdf0e10cSrcweir } 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir /// logs a given ASCII message, replacing 4 placeholders in the message with respective values 502*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 503*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 504*cdf0e10cSrcweir { 505*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 506*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 507*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 508*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 509*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 510*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 511*cdf0e10cSrcweir return false; 512*cdf0e10cSrcweir } 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir /// logs a given ASCII message, replacing 5 placeholders in the message with respective values 515*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 516*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 519*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 520*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 521*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 522*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 523*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 524*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 525*cdf0e10cSrcweir return false; 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir /// logs a given ASCII message, replacing 6 placeholders in the message with respective values 529*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 530*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Char* _pAsciiMessage, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 533*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, ::rtl::OUString::createFromAscii( _pAsciiMessage ), 534*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 535*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 536*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 537*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 538*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 539*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 540*cdf0e10cSrcweir return false; 541*cdf0e10cSrcweir } 542*cdf0e10cSrcweir 543*cdf0e10cSrcweir protected: 544*cdf0e10cSrcweir bool impl_log( 545*cdf0e10cSrcweir const sal_Int32 _nLogLevel, 546*cdf0e10cSrcweir const sal_Char* _pSourceClass, 547*cdf0e10cSrcweir const sal_Char* _pSourceMethod, 548*cdf0e10cSrcweir const ::rtl::OUString& _rMessage, 549*cdf0e10cSrcweir const OptionalString& _rArgument1 = OptionalString(), 550*cdf0e10cSrcweir const OptionalString& _rArgument2 = OptionalString(), 551*cdf0e10cSrcweir const OptionalString& _rArgument3 = OptionalString(), 552*cdf0e10cSrcweir const OptionalString& _rArgument4 = OptionalString(), 553*cdf0e10cSrcweir const OptionalString& _rArgument5 = OptionalString(), 554*cdf0e10cSrcweir const OptionalString& _rArgument6 = OptionalString() 555*cdf0e10cSrcweir ) const; 556*cdf0e10cSrcweir }; 557*cdf0e10cSrcweir 558*cdf0e10cSrcweir //==================================================================== 559*cdf0e10cSrcweir //= ResourceBasedEventLogger 560*cdf0e10cSrcweir //==================================================================== 561*cdf0e10cSrcweir struct ResourceBasedEventLogger_Data; 562*cdf0e10cSrcweir /** extends the EventLogger class with functionality to load log messages from 563*cdf0e10cSrcweir a resource bundle. 564*cdf0e10cSrcweir */ 565*cdf0e10cSrcweir class COMPHELPER_DLLPUBLIC ResourceBasedEventLogger : public EventLogger 566*cdf0e10cSrcweir { 567*cdf0e10cSrcweir private: 568*cdf0e10cSrcweir ::boost::shared_ptr< ResourceBasedEventLogger_Data > m_pData; 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir public: 571*cdf0e10cSrcweir /** creates a resource based event logger 572*cdf0e10cSrcweir @param _rxContext 573*cdf0e10cSrcweir the component context for creating new components 574*cdf0e10cSrcweir @param _rResourceBundleBaseName 575*cdf0e10cSrcweir the base name of the resource bundle to use. Will be used 576*cdf0e10cSrcweir in conjunction with XResourceBundleLoader::loadResource. 577*cdf0e10cSrcweir @param _rLoggerName 578*cdf0e10cSrcweir the name of the logger to work with. If empty, the office-wide 579*cdf0e10cSrcweir default logger will be used. 580*cdf0e10cSrcweir 581*cdf0e10cSrcweir */ 582*cdf0e10cSrcweir ResourceBasedEventLogger( 583*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, 584*cdf0e10cSrcweir const ::rtl::OUString& _rResourceBundleBaseName, 585*cdf0e10cSrcweir const ::rtl::OUString& _rLoggerName = ::rtl::OUString() 586*cdf0e10cSrcweir ); 587*cdf0e10cSrcweir 588*cdf0e10cSrcweir /** creates a resource based event logger 589*cdf0e10cSrcweir @param _rxContext 590*cdf0e10cSrcweir the component context for creating new components 591*cdf0e10cSrcweir @param _pResourceBundleBaseName 592*cdf0e10cSrcweir the ASCII base name of the resource bundle to use. Will be used 593*cdf0e10cSrcweir in conjunction with XResourceBundleLoader::loadResource. 594*cdf0e10cSrcweir @param _pAsciiLoggerName 595*cdf0e10cSrcweir the ASCII name of the logger to work with. If NULL, the office-wide 596*cdf0e10cSrcweir default logger will be used. 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir */ 599*cdf0e10cSrcweir ResourceBasedEventLogger( 600*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, 601*cdf0e10cSrcweir const sal_Char* _pResourceBundleBaseName, 602*cdf0e10cSrcweir const sal_Char* _pAsciiLoggerName = NULL 603*cdf0e10cSrcweir ); 604*cdf0e10cSrcweir 605*cdf0e10cSrcweir //---------------------------------------------------------------- 606*cdf0e10cSrcweir //- XLogger::log equivalents/wrappers 607*cdf0e10cSrcweir //- resource IDs 608*cdf0e10cSrcweir 609*cdf0e10cSrcweir /// logs a given message, without any arguments, or source class/method names 610*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID ) const 611*cdf0e10cSrcweir { 612*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 613*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ) ); 614*cdf0e10cSrcweir return false; 615*cdf0e10cSrcweir } 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir /** logs a given message, replacing a placeholder in the message with an argument 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir The function takes, additionally to the log level and the message, an arbitrary 620*cdf0e10cSrcweir argument. This argument is converted to a string using an overloaded function 621*cdf0e10cSrcweir named <code>convertLogArgToString</code>. Then, a placeholder "$1$" 622*cdf0e10cSrcweir is searched in the message string, and replaced with the argument string. 623*cdf0e10cSrcweir */ 624*cdf0e10cSrcweir template< typename ARGTYPE1 > 625*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1 ) const 626*cdf0e10cSrcweir { 627*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 628*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 629*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 630*cdf0e10cSrcweir return false; 631*cdf0e10cSrcweir } 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir /// logs a given message, replacing 2 placeholders in the message with respective values 634*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 635*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 638*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 639*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 640*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 641*cdf0e10cSrcweir return false; 642*cdf0e10cSrcweir } 643*cdf0e10cSrcweir 644*cdf0e10cSrcweir /// logs a given message, replacing 3 placeholders in the message with respective values 645*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 646*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 647*cdf0e10cSrcweir { 648*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 649*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 650*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 651*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 652*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 653*cdf0e10cSrcweir return false; 654*cdf0e10cSrcweir } 655*cdf0e10cSrcweir 656*cdf0e10cSrcweir /// logs a given message, replacing 4 placeholders in the message with respective values 657*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 658*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 661*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 662*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 663*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 664*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 665*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 666*cdf0e10cSrcweir return false; 667*cdf0e10cSrcweir } 668*cdf0e10cSrcweir 669*cdf0e10cSrcweir /// logs a given message, replacing 5 placeholders in the message with respective values 670*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 671*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 674*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 675*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 676*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 677*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 678*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 679*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 680*cdf0e10cSrcweir return false; 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir /// logs a given message, replacing 6 placeholders in the message with respective values 684*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 685*cdf0e10cSrcweir bool log( const sal_Int32 _nLogLevel, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 686*cdf0e10cSrcweir { 687*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 688*cdf0e10cSrcweir return impl_log( _nLogLevel, NULL, NULL, impl_loadStringMessage_nothrow( _nMessageResID ), 689*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 690*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 691*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 692*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 693*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 694*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 695*cdf0e10cSrcweir return false; 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir 698*cdf0e10cSrcweir //---------------------------------------------------------------- 699*cdf0e10cSrcweir //- XLogger::logp equivalents/wrappers 700*cdf0e10cSrcweir //- resource IDs 701*cdf0e10cSrcweir 702*cdf0e10cSrcweir /// logs a given ASCII message, without any arguments, or source class/method names 703*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID ) const 704*cdf0e10cSrcweir { 705*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 706*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ) ); 707*cdf0e10cSrcweir return false; 708*cdf0e10cSrcweir } 709*cdf0e10cSrcweir 710*cdf0e10cSrcweir /** logs a given ASCII message, replacing a placeholder in the message with an argument 711*cdf0e10cSrcweir */ 712*cdf0e10cSrcweir template< typename ARGTYPE1 > 713*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1 ) const 714*cdf0e10cSrcweir { 715*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 716*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 717*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ) ); 718*cdf0e10cSrcweir return false; 719*cdf0e10cSrcweir } 720*cdf0e10cSrcweir 721*cdf0e10cSrcweir /// logs a given ASCII message, replacing 2 placeholders in the message with respective values 722*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2 > 723*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2 ) const 724*cdf0e10cSrcweir { 725*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 726*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 727*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 728*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ) ); 729*cdf0e10cSrcweir return false; 730*cdf0e10cSrcweir } 731*cdf0e10cSrcweir 732*cdf0e10cSrcweir /// logs a given ASCII message, replacing 3 placeholders in the message with respective values 733*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3 > 734*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3 ) const 735*cdf0e10cSrcweir { 736*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 737*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 738*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 739*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 740*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ) ); 741*cdf0e10cSrcweir return false; 742*cdf0e10cSrcweir } 743*cdf0e10cSrcweir 744*cdf0e10cSrcweir /// logs a given ASCII message, replacing 4 placeholders in the message with respective values 745*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4 > 746*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4 ) const 747*cdf0e10cSrcweir { 748*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 749*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 750*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 751*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 752*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 753*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ) ); 754*cdf0e10cSrcweir return false; 755*cdf0e10cSrcweir } 756*cdf0e10cSrcweir 757*cdf0e10cSrcweir /// logs a given ASCII message, replacing 5 placeholders in the message with respective values 758*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5 > 759*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5 ) const 760*cdf0e10cSrcweir { 761*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 762*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 763*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 764*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 765*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 766*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 767*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ) ); 768*cdf0e10cSrcweir return false; 769*cdf0e10cSrcweir } 770*cdf0e10cSrcweir 771*cdf0e10cSrcweir /// logs a given ASCII message, replacing 6 placeholders in the message with respective values 772*cdf0e10cSrcweir template< typename ARGTYPE1, typename ARGTYPE2, typename ARGTYPE3, typename ARGTYPE4, typename ARGTYPE5, typename ARGTYPE6 > 773*cdf0e10cSrcweir bool logp( const sal_Int32 _nLogLevel, const sal_Char* _pSourceClass, const sal_Char* _pSourceMethod, const sal_Int32 _nMessageResID, ARGTYPE1 _argument1, ARGTYPE2 _argument2, ARGTYPE3 _argument3, ARGTYPE4 _argument4, ARGTYPE5 _argument5, ARGTYPE6 _argument6 ) const 774*cdf0e10cSrcweir { 775*cdf0e10cSrcweir if ( isLoggable( _nLogLevel ) ) 776*cdf0e10cSrcweir return impl_log( _nLogLevel, _pSourceClass, _pSourceMethod, impl_loadStringMessage_nothrow( _nMessageResID ), 777*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument1 ) ), 778*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument2 ) ), 779*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument3 ) ), 780*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument4 ) ), 781*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument5 ) ), 782*cdf0e10cSrcweir OptionalString( log::convert::convertLogArgToString( _argument6 ) ) ); 783*cdf0e10cSrcweir return false; 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir 786*cdf0e10cSrcweir private: 787*cdf0e10cSrcweir ::rtl::OUString impl_loadStringMessage_nothrow( const sal_Int32 _nMessageResID ) const; 788*cdf0e10cSrcweir }; 789*cdf0e10cSrcweir 790*cdf0e10cSrcweir //........................................................................ 791*cdf0e10cSrcweir } // namespace comphelper 792*cdf0e10cSrcweir //........................................................................ 793*cdf0e10cSrcweir 794*cdf0e10cSrcweir #endif // COMPHELPER_LOGGING_HXX 795