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 &quot;$1$&quot;
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 &quot;$1$&quot;
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 &quot;$1$&quot;
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 &quot;$1$&quot;
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 &quot;$1$&quot;
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